00001 #ifndef __COMMANDCLIENTIMPL_H__
00002 #define __COMMANDCLIENTIMPL_H__
00003
00004 #include <string>
00005 #include <utils/src/asutils.h>
00006 #include <pssh.h>
00007 #include "Static.h"
00008 #include "Buffer.h"
00009 #include "CmdError.h"
00010 #include "CommandClient.h"
00011
00012 using namespace Aspera;
00013 using namespace Aspera::Command;
00014
00043 namespace Aspera {
00044
00045 namespace Command {
00046
00047 void* runloop(void* ptr);
00048
00049 enum {PUTTY_SOCK, LOCAL_SOCK};
00050
00051 class CmdReply;
00052 class CmdReplyInfo;
00053 class CmdReplyFile;
00054 class CmdReplyMd5sum;
00055 class CmdReplyMounts;
00056 class CmdReplySize;
00057
00058
00059
00063 class CommandClientImpl : public CommandClient
00064 {
00065 public:
00066
00067 CommandClientImpl();
00068 ~CommandClientImpl();
00069
00073 CmdReplyInfo* connect(char* host, char* user, char* passphrase, char* privkeyfile, int port, CmdError& cmderr);
00077 CmdReplyInfo* connect(char* host, char* user, char* passwd, int port, CmdError& cmderr);
00081 void disconnect();
00087 CmdReplyFile* execLs(char cmdargs[], CmdError& cmderr);
00091 int execRm(char cmdargs[], CmdError& cmderr);
00095 CmdReplyMd5sum* execMd5sum(char cmdargs[], CmdError& cmderr);
00099 int execCp(char src[], char dest[], CmdError& cmderr);
00103 CmdReplyMounts* execDf(CmdError& cmderr);
00107 CmdReplySize* execDu(char cmdargs[], CmdError& cmderr);
00111 CmdReplyInfo* execInfo(CmdError& cmderr);
00115 int execMkdir(char cmdargs[], CmdError& cmderr);
00119 int execMv(char src[], char dest[], CmdError& cmderr);
00123 char* getUser();
00124
00125
00126
00130 void setError(int _errnum, char* _errstr);
00134 void getError(CmdError *cmderr);
00135
00136 private:
00137 unsigned int io_timeout;
00138 timeval command_timeout;
00139 pssh_context_t* context;
00140 pssh_session_t* session;
00141 pssh_channel_t* channel;
00142 as_thread_t pssh_thread;
00143 char *username;
00144 char *errstr;
00145 int errnum;
00146 int state;
00147 as_socket_t socks[2];
00148
00149 CmdReply* readReply();
00150 CmdReply* exec(char cmd[], char cmdargs[], CmdError& cmderr);
00151 CmdReplyInfo* connect(char* host, char* user, char* passwd, char* passphrase, char* privkeyfile, int port, CmdError& cmderr);
00152 int writeMsg(char cmdstring[]);
00153 CmdReply* parseMsg(Buffer *rawBuffer);
00154 friend void* runloop(void* ptr);
00155
00156 };
00157 }
00158 }
00159 #endif