00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __kio_sftp_h__
00018 #define __kio_sftp_h__
00019
00020 #include <tqstring.h>
00021 #include <tqcstring.h>
00022 #include <tqobject.h>
00023
00024 #include <kurl.h>
00025 #include <kio/global.h>
00026 #include <kio/slavebase.h>
00027 #include <kdebug.h>
00028
00029 #include "process.h"
00030 #include "sftpfileattr.h"
00031 #include "ksshprocess.h"
00032
00033 #define KIO_SFTP_DB 7120
00034
00035
00036 class sftpProtocol : public KIO::SlaveBase
00037 {
00038
00039 public:
00040 sftpProtocol(const TQCString &pool_socket, const TQCString &app_socket);
00041 virtual ~sftpProtocol();
00042 virtual void setHost(const TQString& h, int port, const TQString& user, const TQString& pass);
00043 virtual void get(const KURL& url);
00044 virtual void listDir(const KURL& url) ;
00045 virtual void mimetype(const KURL& url);
00046 virtual void stat(const KURL& url);
00047 virtual void copy(const KURL &src, const KURL &dest, int permissions, bool overwrite);
00048 virtual void put(const KURL& url, int permissions, bool overwrite, bool resume);
00049 virtual void closeConnection();
00050 virtual void slave_status();
00051 virtual void del(const KURL &url, bool isfile);
00052 virtual void chmod(const KURL& url, int permissions);
00053 virtual void symlink(const TQString& target, const KURL& dest, bool overwrite);
00054 virtual void rename(const KURL& src, const KURL& dest, bool overwrite);
00055 virtual void mkdir(const KURL&url, int permissions);
00056 virtual void openConnection();
00057
00058 private:
00060 bool mConnected;
00061
00063 TQString mHost;
00064
00066 int mPort;
00067
00069 KSshProcess ssh;
00070
00072 TQString mUsername;
00073
00075 TQString mPassword;
00076
00078 unsigned int mMsgId;
00079
00081 unsigned char mExpected;
00082
00084 int sftpVersion;
00085
00086 struct Status
00087 {
00088 int code;
00089 KIO::filesize_t size;
00090 TQString text;
00091 };
00092
00093 private:
00094 bool getPacket(TQByteArray& msg);
00095
00096
00097
00098
00099
00100
00101
00102 bool isSupportedOperation(int type);
00107 int sftpRealPath(const KURL& url, KURL& newUrl);
00108
00110 bool putPacket(TQByteArray& p);
00112 void processStatus(Q_UINT8, const TQString& message = TQString::null);
00114 Status doProcessStatus(Q_UINT8, const TQString& message = TQString::null);
00116 int sftpOpenDirectory(const KURL& url, TQByteArray& handle);
00118 int sftpClose(const TQByteArray& handle);
00120 int sftpRename(const KURL& src, const KURL& dest);
00122 int sftpSetStat(const KURL& url, const sftpFileAttr& attr);
00124 int sftpRemove(const KURL& url, bool isfile);
00126 int sftpSymLink(const TQString& target, const KURL& dest);
00128 int sftpReadDir(const TQByteArray& handle, const KURL& url);
00130 int sftpReadLink(const KURL& url, TQString& target);
00132 int sftpStat(const KURL& url, sftpFileAttr& attr);
00134 int sftpOpen(const KURL& url, const Q_UINT32 pflags, const sftpFileAttr& attr, TQByteArray& handle);
00136 int sftpRead(const TQByteArray& handle, KIO::filesize_t offset, Q_UINT32 len, TQByteArray& data);
00138 int sftpWrite(const TQByteArray& handle, KIO::filesize_t offset, const TQByteArray& data);
00139
00141 void sftpCopyPut(const KURL& src, const KURL& dest, int mode, bool overwrite);
00143 void sftpCopyGet(const KURL& dest, const KURL& src, int mode, bool overwrite);
00144
00146 Status sftpGet( const KURL& src, KIO::filesize_t offset = 0, int fd = -1);
00147 void sftpPut( const KURL& dest, int permissions, bool resume, bool overwrite, int fd = -1);
00148 };
00149 #endif