root/src/apps/codycam/SpawningUploadClient.h
/*
 * Copyright 1998-1999 Be, Inc. All Rights Reserved.
 * Copyright 2003-2019 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef SPAWNING_UPLOAD_CLIENT_H
#define SPAWNING_UPLOAD_CLIENT_H

#include "FileUploadClient.h"

#include <stdio.h>
#include <string.h>

#include <OS.h>
#include <String.h>


class SpawningUploadClient : public FileUploadClient {
public:
                                                                SpawningUploadClient();
        virtual                                         ~SpawningUploadClient();

        virtual bool                            Connect(const string& server,
                                                                        const string& login,
                                                                        const string& passwd);

        virtual bool                            PutFile(const string& local,
                                                                        const string& remote,
                                                                        ftp_mode mode = binary_mode);

        virtual bool                            GetFile(const string& remote,
                                                                        const string& local,
                                                                        ftp_mode mode = binary_mode);

        virtual bool                            MoveFile(const string& oldPath,
                                                                        const string& newPath);
        virtual bool                            ChangeDir(const string& dir);
        virtual bool                            PrintWorkingDir(string& dir);
        virtual bool                            ListDirContents(string& listing);
        virtual bool                            Chmod(const string& path, const string& mod);

        virtual void                            SetPassive(bool on);

protected:
                        status_t                        SetCommandLine(const char* command);
                        ssize_t                         SendCommand(const char* cmd);
                        ssize_t                         ReadReply(BString* to);
        virtual status_t                        ParseReply();
                        int                                     getpty(char* pty, char* tty);

                        int                                     InputPipe() const { return fPty; };
                        int                                     OutputPipe() const { return fPty; };

private:
                        bool                            SpawnCommand();

private:
                        string                          fCommand;
                        pid_t                           fCommandPid;
                        int                                     fPty;
};

#endif  // SPAWNING_UPLOAD_CLIENT_H