summaryrefslogtreecommitdiffstats
path: root/tdeioslave/sftp/tdeio_sftp.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeioslave/sftp/tdeio_sftp.h')
-rw-r--r--tdeioslave/sftp/tdeio_sftp.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/tdeioslave/sftp/tdeio_sftp.h b/tdeioslave/sftp/tdeio_sftp.h
new file mode 100644
index 000000000..23ff101b7
--- /dev/null
+++ b/tdeioslave/sftp/tdeio_sftp.h
@@ -0,0 +1,149 @@
+/***************************************************************************
+ sftpProtocol.h - description
+ -------------------
+ begin : Sat Jun 30 20:08:47 CDT 2001
+ copyright : (C) 2001 by Lucas Fisher
+ email : ljfisher@purdue.edu
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef __tdeio_sftp_h__
+#define __tdeio_sftp_h__
+
+#include <tqstring.h>
+#include <tqcstring.h>
+#include <tqobject.h>
+
+#include <kurl.h>
+#include <tdeio/global.h>
+#include <tdeio/slavebase.h>
+#include <kdebug.h>
+
+#include "process.h"
+#include "sftpfileattr.h"
+#include "ksshprocess.h"
+
+#define KIO_SFTP_DB 7120
+
+
+class sftpProtocol : public TDEIO::SlaveBase
+{
+
+public:
+ sftpProtocol(const TQCString &pool_socket, const TQCString &app_socket);
+ virtual ~sftpProtocol();
+ virtual void setHost(const TQString& h, int port, const TQString& user, const TQString& pass);
+ virtual void get(const KURL& url);
+ virtual void listDir(const KURL& url) ;
+ virtual void mimetype(const KURL& url);
+ virtual void stat(const KURL& url);
+ virtual void copy(const KURL &src, const KURL &dest, int permissions, bool overwrite);
+ virtual void put(const KURL& url, int permissions, bool overwrite, bool resume);
+ virtual void closeConnection();
+ virtual void slave_status();
+ virtual void del(const KURL &url, bool isfile);
+ virtual void chmod(const KURL& url, int permissions);
+ virtual void symlink(const TQString& target, const KURL& dest, bool overwrite);
+ virtual void rename(const KURL& src, const KURL& dest, bool overwrite);
+ virtual void mkdir(const KURL&url, int permissions);
+ virtual void openConnection();
+
+private: // Private variables
+ /** True if ioslave is connected to sftp server. */
+ bool mConnected;
+
+ /** Host we are connected to. */
+ TQString mHost;
+
+ /** Port we are connected to. */
+ int mPort;
+
+ /** Ssh process to which we send the sftp packets. */
+ KSshProcess ssh;
+
+ /** Username to use when connecting */
+ TQString mUsername;
+
+ /** User's password */
+ TQString mPassword;
+
+ /** Message id of the last sftp packet we sent. */
+ unsigned int mMsgId;
+
+ /** Type of packet we are expecting to receive next. */
+ unsigned char mExpected;
+
+ /** Version of the sftp protocol we are using. */
+ int sftpVersion;
+
+ struct Status
+ {
+ int code;
+ TDEIO::filesize_t size;
+ TQString text;
+ };
+
+private: // private methods
+ bool getPacket(TQByteArray& msg);
+
+ /* Type is a sftp packet type found in .sftp.h'.
+ * Example: SSH2_FXP_READLINK, SSH2_FXP_RENAME, etc.
+ *
+ * Returns true if the type is supported by the sftp protocol
+ * version negotiated by the client and server (sftpVersion).
+ */
+ bool isSupportedOperation(int type);
+ /** Used to have the server canonicalize any given path name to an absolute path.
+ This is useful for converting path names containing ".." components or relative
+ pathnames without a leading slash into absolute paths.
+ Returns the canonicalized url. */
+ int sftpRealPath(const KURL& url, KURL& newUrl);
+
+ /** Send an sftp packet to stdin of the ssh process. */
+ bool putPacket(TQByteArray& p);
+ /** Process SSH_FXP_STATUS packets. */
+ void processStatus(TQ_UINT8, const TQString& message = TQString::null);
+ /** Process SSH_FXP_STATUS packes and return the result. */
+ Status doProcessStatus(TQ_UINT8, const TQString& message = TQString::null);
+ /** Opens a directory handle for url.path. Returns true if succeeds. */
+ int sftpOpenDirectory(const KURL& url, TQByteArray& handle);
+ /** Closes a directory or file handle. */
+ int sftpClose(const TQByteArray& handle);
+ /** Send a sftp command to rename a file or directoy. */
+ int sftpRename(const KURL& src, const KURL& dest);
+ /** Set a files attributes. */
+ int sftpSetStat(const KURL& url, const sftpFileAttr& attr);
+ /** Sends a sftp command to remove a file or directory. */
+ int sftpRemove(const KURL& url, bool isfile);
+ /** Creates a symlink named dest to target. */
+ int sftpSymLink(const TQString& target, const KURL& dest);
+ /** Get directory listings. */
+ int sftpReadDir(const TQByteArray& handle, const KURL& url);
+ /** Retrieves the destination of a link. */
+ int sftpReadLink(const KURL& url, TQString& target);
+ /** Stats a file. */
+ int sftpStat(const KURL& url, sftpFileAttr& attr);
+ /** No descriptions */
+ int sftpOpen(const KURL& url, const TQ_UINT32 pflags, const sftpFileAttr& attr, TQByteArray& handle);
+ /** No descriptions */
+ int sftpRead(const TQByteArray& handle, TDEIO::filesize_t offset, TQ_UINT32 len, TQByteArray& data);
+ /** No descriptions */
+ int sftpWrite(const TQByteArray& handle, TDEIO::filesize_t offset, const TQByteArray& data);
+
+ /** Performs faster upload when the source is a local file... */
+ void sftpCopyPut(const KURL& src, const KURL& dest, int mode, bool overwrite);
+ /** Performs faster download when the destination is a local file... */
+ void sftpCopyGet(const KURL& dest, const KURL& src, int mode, bool overwrite);
+
+ /** */
+ Status sftpGet( const KURL& src, TDEIO::filesize_t offset = 0, int fd = -1);
+ void sftpPut( const KURL& dest, int permissions, bool resume, bool overwrite, int fd = -1);
+};
+#endif