/* * Copyright (c) 2001 Lucas Fisher * Copyright (c) 2009 Andreas Schneider * Copyright (c) 2020 Martin Sandsmark * KDE2 port * Copyright (c) 2022 Mavridis Philippe * Trinity port * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later * version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __tdeio_sftp_h__ #define __tdeio_sftp_h__ #include #include #include #include #include #include #include #include // How big should each data packet be? Definitely not bigger than 64kb or // you will overflow the 2 byte size variable in a sftp packet. #define MAX_XFER_BUF_SIZE 60 * 1024 #define TDEIO_SFTP_DB 7120 namespace TDEIO { class AuthInfo; } 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) override; virtual void get(const KURL& url) override; virtual void listDir(const KURL& url) override; virtual void mimetype(const KURL& url) override; virtual void stat(const KURL& url) override; virtual void put(const KURL& url, int permissions, bool overwrite, bool resume) override; virtual void copy(const KURL &src, const KURL &dest, int permissions, bool overwrite) override; virtual void closeConnection() override; virtual void slave_status() override; virtual void del(const KURL &url, bool isfile) override; virtual void chmod(const KURL& url, int permissions) override; virtual void symlink(const TQString& target, const KURL& dest, bool overwrite) override; virtual void rename(const KURL& src, const KURL& dest, bool overwrite) override; virtual void mkdir(const KURL& url, int permissions) override; virtual void openConnection() override; // libssh authentication callback (note that this is called by the // global ::auth_callback() call. int auth_callback(const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata); // libssh logging callback (note that this is called by the // global ::log_callback() call. void log_callback(ssh_session session, int priority, const char *message, void *userdata); private: // Private variables void statMime(const KURL &url); void closeFile(); /** True if ioslave is connected to sftp server. */ bool mConnected; /** Host we are connected to. */ TQString mHost; /** Port we are connected to. */ int mPort; /** The ssh session for the connection */ ssh_session mSession; /** The sftp session for the connection */ sftp_session mSftp; /** Username to use when connecting */ TQString mUsername; /** User's password */ TQString mPassword; /** The open file */ sftp_file mOpenFile; /** The open URL */ KURL mOpenUrl; ssh_callbacks mCallbacks; /** Version of the sftp protocol we are using. */ int sftpVersion; //struct Status //{ // int code; // TDEIO::filesize_t size; // TQString text; //}; private: // private methods int authenticateKeyboardInteractive(TDEIO::AuthInfo &info); void reportError(const KURL &url, const int err); bool createUDSEntry(const TQString &filename, const TQByteArray &path, TDEIO::UDSEntry &entry, short int details); TQString canonicalizePath(const TQString &path); }; #endif