aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorelupus <elupus@svn>2010-03-08 21:51:31 +0000
committerelupus <elupus@svn>2010-03-08 21:51:31 +0000
commit2cef051aead92679f6f3ec732599ce4e080a1530 (patch)
tree6837630ebf9c8cd850fe845642dbe7c5e3f09c71 /lib
parent89c5d2a22bb33c76e974712690f2d01da2d3b0d2 (diff)
added: sftp client to windows version
git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk@28474 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
Diffstat (limited to 'lib')
-rw-r--r--lib/libssh_win32/include/libssh/callbacks.h113
-rw-r--r--lib/libssh_win32/include/libssh/libssh.h452
-rw-r--r--lib/libssh_win32/include/libssh/server.h187
-rw-r--r--lib/libssh_win32/include/libssh/sftp.h906
-rw-r--r--lib/libssh_win32/include/libssh/ssh2.h69
-rw-r--r--lib/libssh_win32/lib/libssh.def350
-rw-r--r--lib/libssh_win32/lib/libssh.libbin0 -> 78206 bytes
-rw-r--r--lib/libssh_win32/readme.txt5
8 files changed, 2082 insertions, 0 deletions
diff --git a/lib/libssh_win32/include/libssh/callbacks.h b/lib/libssh_win32/include/libssh/callbacks.h
new file mode 100644
index 0000000000..83ac5eea5f
--- /dev/null
+++ b/lib/libssh_win32/include/libssh/callbacks.h
@@ -0,0 +1,113 @@
+/*
+ * This file is part of the SSH Library
+ *
+ * Copyright (c) 2009 Aris Adamantiadis <aris@0xbadc0de.be>
+ *
+ * The SSH Library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The SSH 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 Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the SSH Library; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+/* callback.h
+ * This file includes the public declarations for the libssh callback mechanism
+ */
+
+#ifndef _SSH_CALLBACK_H
+#define _SSH_CALLBACK_H
+
+#include <libssh/libssh.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief SSH authentication callback.
+ *
+ * @param prompt Prompt to be displayed.
+ * @param buf Buffer to save the password. You should null-terminate it.
+ * @param len Length of the buffer.
+ * @param echo Enable or disable the echo of what you type.
+ * @param verify Should the password be verified?
+ * @param userdata Userdata to be passed to the callback function. Useful
+ * for GUI applications.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+typedef int (*ssh_auth_callback) (const char *prompt, char *buf, size_t len,
+ int echo, int verify, void *userdata);
+typedef void (*ssh_log_callback) (ssh_session session, int priority,
+ const char *message, void *userdata);
+/** this callback will be called with status going from 0.0 to 1.0 during
+ * connection */
+typedef void (*ssh_status_callback) (ssh_session session, float status,
+ void *userdata);
+
+struct ssh_callbacks_struct {
+ /** size of this structure. internal, shoud be set with ssh_callbacks_init()*/
+ size_t size;
+ /** User-provided data. User is free to set anything he wants here */
+ void *userdata;
+ /** this functions will be called if e.g. a keyphrase is needed. */
+ ssh_auth_callback auth_function;
+ /** this function will be called each time a loggable event happens. */
+ ssh_log_callback log_function;
+ /** this function gets called during connection time to indicate the percentage
+ * of connection steps completed.
+ */
+ void (*connect_status_function)(void *userdata, float status);
+};
+
+typedef struct ssh_callbacks_struct * ssh_callbacks;
+
+/** Initializes an ssh_callbacks_struct
+ * A call to this macro is mandatory when you have set a new
+ * ssh_callback_struct structure. Its goal is to maintain the binary
+ * compatibility with future versions of libssh as the structure
+ * evolves with time.
+ */
+#define ssh_callbacks_init(p) do {\
+ (p)->size=sizeof(*(p)); \
+} while(0);
+
+/**
+ * @brief Set the callback functions.
+ *
+ * This functions sets the callback structure to use your own callback
+ * functions for auth, logging and status.
+ *
+ * @code
+ * struct ssh_callbacks_struct cb;
+ * memset(&cb, 0, sizeof(struct ssh_callbacks_struct));
+ * cb.userdata = data;
+ * cb.auth_function = my_auth_function;
+ *
+ * ssh_callbacks_init(&cb);
+ * ssh_set_callbacks(session, &cb);
+ * @endcode
+ *
+ * @param session The session to set the callback structure.
+ *
+ * @param cb The callback itself.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int ssh_set_callbacks(ssh_session session, ssh_callbacks cb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_SSH_CALLBACK_H */
diff --git a/lib/libssh_win32/include/libssh/libssh.h b/lib/libssh_win32/include/libssh/libssh.h
new file mode 100644
index 0000000000..fa4d1d837f
--- /dev/null
+++ b/lib/libssh_win32/include/libssh/libssh.h
@@ -0,0 +1,452 @@
+/*
+ * This file is part of the SSH Library
+ *
+ * Copyright (c) 2003-2009 by Aris Adamantiadis
+ *
+ * The SSH Library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The SSH 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 Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the SSH Library; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#ifndef _LIBSSH_H
+#define _LIBSSH_H
+
+#ifdef LIBSSH_STATIC
+ #define LIBSSH_API
+#else
+ #if defined _WIN32 || defined __CYGWIN__
+ #ifdef LIBSSH_EXPORTS
+ #ifdef __GNUC__
+ #define LIBSSH_API __attribute__((dllexport))
+ #else
+ #define LIBSSH_API __declspec(dllexport)
+ #endif
+ #else
+ #ifdef __GNUC__
+ #define LIBSSH_API __attribute__((dllimport))
+ #else
+ #define LIBSSH_API __declspec(dllimport)
+ #endif
+ #endif
+ #else
+ #if __GNUC__ >= 4
+ #define LIBSSH_API __attribute__((visibility("default")))
+ #else
+ #define LIBSSH_API
+ #endif
+ #endif
+#endif
+
+#ifdef _MSC_VER
+ /* Visual Studio hasn't inttypes.h so it doesn't know uint32_t */
+ typedef int int32_t;
+ typedef unsigned int uint32_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned char uint8_t;
+ typedef unsigned long long uint64_t;
+ typedef int mode_t;
+#else /* _MSC_VER */
+ #include <unistd.h>
+ #include <inttypes.h>
+#endif /* _MSC_VER */
+
+#ifdef _WIN32
+ #include <winsock2.h>
+#else /* _WIN32 */
+ #include <sys/select.h> /* for fd_set * */
+ #include <netdb.h>
+#endif /* _WIN32 */
+
+#define SSH_STRINGIFY(s) SSH_TOSTRING(s)
+#define SSH_TOSTRING(s) #s
+
+/* libssh version macros */
+#define SSH_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c))
+#define SSH_VERSION_DOT(a, b, c) a ##.## b ##.## c
+#define SSH_VERSION(a, b, c) SSH_VERSION_DOT(a, b, c)
+
+/* libssh version */
+#define LIBSSH_VERSION_MAJOR 0
+#define LIBSSH_VERSION_MINOR 4
+#define LIBSSH_VERSION_MICRO 1
+
+#define LIBSSH_VERSION_INT SSH_VERSION_INT(LIBSSH_VERSION_MAJOR, \
+ LIBSSH_VERSION_MINOR, \
+ LIBSSH_VERSION_MICRO)
+#define LIBSSH_VERSION SSH_VERSION(LIBSSH_VERSION_MAJOR, \
+ LIBSSH_VERSION_MINOR, \
+ LIBSSH_VERSION_MICRO)
+
+/* GCC have printf type attribute check. */
+#ifdef __GNUC__
+#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
+#else
+#define PRINTF_ATTRIBUTE(a,b)
+#endif /* __GNUC__ */
+
+#ifdef __GNUC__
+#define SSH_DEPRECATED __attribute__ ((deprecated))
+#else
+#define SSH_DEPRECATED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct ssh_agent_struct* ssh_agent;
+typedef struct ssh_buffer_struct* ssh_buffer;
+typedef struct ssh_channel_struct* ssh_channel;
+typedef struct ssh_message_struct* ssh_message;
+typedef struct ssh_pcap_file_struct* ssh_pcap_file;
+typedef struct ssh_private_key_struct* ssh_private_key;
+typedef struct ssh_public_key_struct* ssh_public_key;
+typedef struct ssh_scp_struct* ssh_scp;
+typedef struct ssh_session_struct* ssh_session;
+typedef struct ssh_string_struct* ssh_string;
+
+/* Socket type */
+#ifdef _WIN32
+#define socket_t SOCKET
+#else
+typedef int socket_t;
+#endif
+
+/* the offsets of methods */
+enum ssh_kex_types_e {
+ SSH_KEX=0,
+ SSH_HOSTKEYS,
+ SSH_CRYPT_C_S,
+ SSH_CRYPT_S_C,
+ SSH_MAC_C_S,
+ SSH_MAC_S_C,
+ SSH_COMP_C_S,
+ SSH_COMP_S_C,
+ SSH_LANG_C_S,
+ SSH_LANG_S_C
+};
+
+#define SSH_CRYPT 2
+#define SSH_MAC 3
+#define SSH_COMP 4
+#define SSH_LANG 5
+
+enum ssh_auth_e {
+ SSH_AUTH_SUCCESS=0,
+ SSH_AUTH_DENIED,
+ SSH_AUTH_PARTIAL,
+ SSH_AUTH_INFO,
+ SSH_AUTH_ERROR=-1
+};
+
+/* auth flags */
+#define SSH_AUTH_METHOD_UNKNOWN 0
+#define SSH_AUTH_METHOD_NONE 0x0001
+#define SSH_AUTH_METHOD_PASSWORD 0x0002
+#define SSH_AUTH_METHOD_PUBLICKEY 0x0004
+#define SSH_AUTH_METHOD_HOSTBASED 0x0008
+#define SSH_AUTH_METHOD_INTERACTIVE 0x0010
+
+/* messages */
+enum ssh_requests_e {
+ SSH_REQUEST_AUTH=1,
+ SSH_REQUEST_CHANNEL_OPEN,
+ SSH_REQUEST_CHANNEL,
+ SSH_REQUEST_SERVICE,
+ SSH_REQUEST_GLOBAL,
+};
+
+enum ssh_channel_type_e {
+ SSH_CHANNEL_UNKNOWN=0,
+ SSH_CHANNEL_SESSION,
+ SSH_CHANNEL_DIRECT_TCPIP,
+ SSH_CHANNEL_FORWARDED_TCPIP,
+ SSH_CHANNEL_X11
+};
+
+enum ssh_channel_requests_e {
+ SSH_CHANNEL_REQUEST_UNKNOWN=0,
+ SSH_CHANNEL_REQUEST_PTY,
+ SSH_CHANNEL_REQUEST_EXEC,
+ SSH_CHANNEL_REQUEST_SHELL,
+ SSH_CHANNEL_REQUEST_ENV,
+ SSH_CHANNEL_REQUEST_SUBSYSTEM,
+ SSH_CHANNEL_REQUEST_WINDOW_CHANGE,
+};
+
+/* status flags */
+#define SSH_CLOSED 0x01
+#define SSH_READ_PENDING 0x02
+#define SSH_CLOSED_ERROR 0x04
+
+enum ssh_server_known_e {
+ SSH_SERVER_ERROR=-1,
+ SSH_SERVER_NOT_KNOWN=0,
+ SSH_SERVER_KNOWN_OK,
+ SSH_SERVER_KNOWN_CHANGED,
+ SSH_SERVER_FOUND_OTHER,
+ SSH_SERVER_FILE_NOT_FOUND,
+};
+
+#ifndef MD5_DIGEST_LEN
+ #define MD5_DIGEST_LEN 16
+#endif
+/* errors */
+
+enum ssh_error_types_e {
+ SSH_NO_ERROR=0,
+ SSH_REQUEST_DENIED,
+ SSH_FATAL,
+ SSH_EINTR
+};
+
+/* Error return codes */
+#define SSH_OK 0 /* No error */
+#define SSH_ERROR -1 /* Error of some kind */
+#define SSH_AGAIN -2 /* The nonblocking call must be repeated */
+#define SSH_EOF -127 /* We have already a eof */
+
+/** \addtogroup ssh_log
+ * @{
+ */
+ /** \brief Verbosity level for logging and help to debugging
+ */
+
+enum {
+ /** No logging at all
+ */
+ SSH_LOG_NOLOG=0,
+ /** Only rare and noteworthy events
+ */
+ SSH_LOG_RARE,
+ /** High level protocol informations
+ */
+ SSH_LOG_PROTOCOL,
+ /** Lower level protocol infomations, packet level
+ */
+ SSH_LOG_PACKET,
+ /** Every function path
+ */
+ SSH_LOG_FUNCTIONS
+};
+/** @}
+ */
+
+enum ssh_options_e {
+ SSH_OPTIONS_HOST,
+ SSH_OPTIONS_PORT,
+ SSH_OPTIONS_PORT_STR,
+ SSH_OPTIONS_FD,
+ SSH_OPTIONS_USER,
+ SSH_OPTIONS_SSH_DIR,
+ SSH_OPTIONS_IDENTITY,
+ SSH_OPTIONS_ADD_IDENTITY,
+ SSH_OPTIONS_KNOWNHOSTS,
+ SSH_OPTIONS_TIMEOUT,
+ SSH_OPTIONS_TIMEOUT_USEC,
+ SSH_OPTIONS_SSH1,
+ SSH_OPTIONS_SSH2,
+ SSH_OPTIONS_LOG_VERBOSITY,
+ SSH_OPTIONS_LOG_VERBOSITY_STR,
+
+ SSH_OPTIONS_CIPHERS_C_S,
+ SSH_OPTIONS_CIPHERS_S_C,
+ SSH_OPTIONS_COMPRESSION_C_S,
+ SSH_OPTIONS_COMPRESSION_S_C
+};
+
+enum {
+ /** Code is going to write/create remote files */
+ SSH_SCP_WRITE,
+ /** Code is going to read remote files */
+ SSH_SCP_READ,
+ SSH_SCP_RECURSIVE=0x10
+};
+
+enum ssh_scp_request_types {
+ /** A new directory is going to be pulled */
+ SSH_SCP_REQUEST_NEWDIR=1,
+ /** A new file is going to be pulled */
+ SSH_SCP_REQUEST_NEWFILE,
+ /** End of requests */
+ SSH_SCP_REQUEST_EOF,
+ /** End of directory */
+ SSH_SCP_REQUEST_ENDDIR,
+ /** Warning received */
+ SSH_SCP_REQUEST_WARNING
+};
+
+LIBSSH_API void buffer_free(ssh_buffer buffer);
+LIBSSH_API void *buffer_get(ssh_buffer buffer);
+LIBSSH_API uint32_t buffer_get_len(ssh_buffer buffer);
+LIBSSH_API ssh_buffer buffer_new(void);
+
+LIBSSH_API ssh_channel channel_accept_x11(ssh_channel channel, int timeout_ms);
+LIBSSH_API int channel_change_pty_size(ssh_channel channel,int cols,int rows);
+LIBSSH_API ssh_channel channel_forward_accept(ssh_session session, int timeout_ms);
+LIBSSH_API int channel_close(ssh_channel channel);
+LIBSSH_API int channel_forward_cancel(ssh_session session, const char *address, int port);
+LIBSSH_API int channel_forward_listen(ssh_session session, const char *address, int port, int *bound_port);
+LIBSSH_API void channel_free(ssh_channel channel);
+LIBSSH_API int channel_get_exit_status(ssh_channel channel);
+LIBSSH_API ssh_session channel_get_session(ssh_channel channel);
+LIBSSH_API int channel_is_closed(ssh_channel channel);
+LIBSSH_API int channel_is_eof(ssh_channel channel);
+LIBSSH_API int channel_is_open(ssh_channel channel);
+LIBSSH_API ssh_channel channel_new(ssh_session session);
+LIBSSH_API int channel_open_forward(ssh_channel channel, const char *remotehost,
+ int remoteport, const char *sourcehost, int localport);
+LIBSSH_API int channel_open_session(ssh_channel channel);
+LIBSSH_API int channel_poll(ssh_channel channel, int is_stderr);
+LIBSSH_API int channel_read(ssh_channel channel, void *dest, uint32_t count, int is_stderr);
+LIBSSH_API int channel_read_buffer(ssh_channel channel, ssh_buffer buffer, uint32_t count,
+ int is_stderr);
+LIBSSH_API int channel_read_nonblocking(ssh_channel channel, void *dest, uint32_t count,
+ int is_stderr);
+LIBSSH_API int channel_request_env(ssh_channel channel, const char *name, const char *value);
+LIBSSH_API int channel_request_exec(ssh_channel channel, const char *cmd);
+LIBSSH_API int channel_request_pty(ssh_channel channel);
+LIBSSH_API int channel_request_pty_size(ssh_channel channel, const char *term,
+ int cols, int rows);
+LIBSSH_API int channel_request_shell(ssh_channel channel);
+LIBSSH_API int channel_request_send_signal(ssh_channel channel, const char *signum);
+LIBSSH_API int channel_request_sftp(ssh_channel channel);
+LIBSSH_API int channel_request_subsystem(ssh_channel channel, const char *subsystem);
+LIBSSH_API int channel_request_x11(ssh_channel channel, int single_connection, const char *protocol,
+ const char *cookie, int screen_number);
+LIBSSH_API int channel_send_eof(ssh_channel channel);
+LIBSSH_API int channel_select(ssh_channel *readchans, ssh_channel *writechans, ssh_channel *exceptchans, struct
+ timeval * timeout);
+LIBSSH_API void channel_set_blocking(ssh_channel channel, int blocking);
+LIBSSH_API int channel_write(ssh_channel channel, const void *data, uint32_t len);
+
+LIBSSH_API void privatekey_free(ssh_private_key prv);
+LIBSSH_API ssh_private_key privatekey_from_file(ssh_session session, const char *filename,
+ int type, const char *passphrase);
+LIBSSH_API void publickey_free(ssh_public_key key);
+LIBSSH_API int ssh_publickey_to_file(ssh_session session, const char *file,
+ ssh_string pubkey, int type);
+LIBSSH_API ssh_string publickey_from_file(ssh_session session, const char *filename,
+ int *type);
+LIBSSH_API ssh_public_key publickey_from_privatekey(ssh_private_key prv);
+LIBSSH_API ssh_string publickey_to_string(ssh_public_key key);
+LIBSSH_API int ssh_try_publickey_from_file(ssh_session session, const char *keyfile,
+ ssh_string *publickey, int *type);
+
+LIBSSH_API int ssh_auth_list(ssh_session session);
+LIBSSH_API char *ssh_basename (const char *path);
+LIBSSH_API void ssh_clean_pubkey_hash(unsigned char **hash);
+LIBSSH_API int ssh_connect(ssh_session session);
+LIBSSH_API const char *ssh_copyright(void);
+LIBSSH_API void ssh_disconnect(ssh_session session);
+LIBSSH_API char *ssh_dirname (const char *path);
+LIBSSH_API int ssh_finalize(void);
+LIBSSH_API void ssh_free(ssh_session session);
+LIBSSH_API const char *ssh_get_disconnect_message(ssh_session session);
+LIBSSH_API const char *ssh_get_error(void *error);
+LIBSSH_API int ssh_get_error_code(void *error);
+LIBSSH_API socket_t ssh_get_fd(ssh_session session);
+LIBSSH_API char *ssh_get_hexa(const unsigned char *what, size_t len);
+LIBSSH_API char *ssh_get_issue_banner(ssh_session session);
+LIBSSH_API int ssh_get_openssh_version(ssh_session session);
+LIBSSH_API ssh_string ssh_get_pubkey(ssh_session session);
+LIBSSH_API int ssh_get_pubkey_hash(ssh_session session, unsigned char **hash);
+LIBSSH_API int ssh_get_random(void *where,int len,int strong);
+LIBSSH_API int ssh_get_version(ssh_session session);
+LIBSSH_API int ssh_get_status(ssh_session session);
+LIBSSH_API int ssh_init(void);
+LIBSSH_API int ssh_is_server_known(ssh_session session);
+LIBSSH_API void ssh_log(ssh_session session, int prioriry, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
+LIBSSH_API ssh_channel ssh_message_channel_request_open_reply_accept(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_reply_success(ssh_message msg);
+LIBSSH_API void ssh_message_free(ssh_message msg);
+LIBSSH_API ssh_message ssh_message_get(ssh_session session);
+LIBSSH_API ssh_message ssh_message_retrieve(ssh_session session, uint32_t packettype);
+LIBSSH_API int ssh_message_subtype(ssh_message msg);
+LIBSSH_API int ssh_message_type(ssh_message msg);
+LIBSSH_API int ssh_mkdir (const char *pathname, mode_t mode);
+LIBSSH_API ssh_session ssh_new(void);
+
+LIBSSH_API int ssh_options_copy(ssh_session src, ssh_session *dest);
+LIBSSH_API int ssh_options_getopt(ssh_session session, int *argcptr, char **argv);
+LIBSSH_API int ssh_options_parse_config(ssh_session session, const char *filename);
+LIBSSH_API int ssh_options_set(ssh_session session, enum ssh_options_e type,
+ const void *value);
+LIBSSH_API int ssh_pcap_file_close(ssh_pcap_file pcap);
+LIBSSH_API void ssh_pcap_file_free(ssh_pcap_file pcap);
+LIBSSH_API ssh_pcap_file ssh_pcap_file_new(void);
+LIBSSH_API int ssh_pcap_file_open(ssh_pcap_file pcap, const char *filename);
+LIBSSH_API void ssh_print_hexa(const char *descr, const unsigned char *what, size_t len);
+LIBSSH_API int ssh_scp_accept_request(ssh_scp scp);
+LIBSSH_API int ssh_scp_close(ssh_scp scp);
+LIBSSH_API int ssh_scp_deny_request(ssh_scp scp, const char *reason);
+LIBSSH_API void ssh_scp_free(ssh_scp scp);
+LIBSSH_API int ssh_scp_init(ssh_scp scp);
+LIBSSH_API int ssh_scp_leave_directory(ssh_scp scp);
+LIBSSH_API ssh_scp ssh_scp_new(ssh_session session, int mode, const char *location);
+LIBSSH_API int ssh_scp_pull_request(ssh_scp scp);
+LIBSSH_API int ssh_scp_push_directory(ssh_scp scp, const char *dirname, int mode);
+LIBSSH_API int ssh_scp_push_file(ssh_scp scp, const char *filename, size_t size, int perms);
+LIBSSH_API int ssh_scp_read(ssh_scp scp, void *buffer, size_t size);
+LIBSSH_API const char *ssh_scp_request_get_filename(ssh_scp scp);
+LIBSSH_API int ssh_scp_request_get_permissions(ssh_scp scp);
+LIBSSH_API size_t ssh_scp_request_get_size(ssh_scp scp);
+LIBSSH_API const char *ssh_scp_request_get_warning(ssh_scp scp);
+LIBSSH_API int ssh_scp_write(ssh_scp scp, const void *buffer, size_t len);
+LIBSSH_API int ssh_select(ssh_channel *channels, ssh_channel *outchannels, socket_t maxfd,
+ fd_set *readfds, struct timeval *timeout);
+LIBSSH_API int ssh_service_request(ssh_session session, const char *service);
+LIBSSH_API void ssh_set_blocking(ssh_session session, int blocking);
+LIBSSH_API void ssh_set_fd_except(ssh_session session);
+LIBSSH_API void ssh_set_fd_toread(ssh_session session);
+LIBSSH_API void ssh_set_fd_towrite(ssh_session session);
+LIBSSH_API void ssh_silent_disconnect(ssh_session session);
+LIBSSH_API int ssh_set_pcap_file(ssh_session session, ssh_pcap_file pcapfile);
+#ifndef _WIN32
+LIBSSH_API int ssh_userauth_agent_pubkey(ssh_session session, const char *username,
+ ssh_public_key publickey);
+#endif
+LIBSSH_API int ssh_userauth_autopubkey(ssh_session session, const char *passphrase);
+LIBSSH_API int ssh_userauth_kbdint(ssh_session session, const char *user, const char *submethods);
+LIBSSH_API const char *ssh_userauth_kbdint_getinstruction(ssh_session session);
+LIBSSH_API const char *ssh_userauth_kbdint_getname(ssh_session session);
+LIBSSH_API int ssh_userauth_kbdint_getnprompts(ssh_session session);
+LIBSSH_API const char *ssh_userauth_kbdint_getprompt(ssh_session session, unsigned int i, char *echo);
+LIBSSH_API int ssh_userauth_kbdint_setanswer(ssh_session session, unsigned int i,
+ const char *answer);
+LIBSSH_API int ssh_userauth_list(ssh_session session, const char *username);
+LIBSSH_API int ssh_userauth_none(ssh_session session, const char *username);
+LIBSSH_API int ssh_userauth_offer_pubkey(ssh_session session, const char *username, int type, ssh_string publickey);
+LIBSSH_API int ssh_userauth_password(ssh_session session, const char *username, const char *password);
+LIBSSH_API int ssh_userauth_pubkey(ssh_session session, const char *username, ssh_string publickey, ssh_private_key privatekey);
+LIBSSH_API const char *ssh_version(int req_version);
+LIBSSH_API int ssh_write_knownhost(ssh_session session);
+
+LIBSSH_API void string_burn(ssh_string str);
+LIBSSH_API ssh_string string_copy(ssh_string str);
+LIBSSH_API void *string_data(ssh_string str);
+LIBSSH_API int string_fill(ssh_string str, const void *data, size_t len);
+LIBSSH_API void string_free(ssh_string str);
+LIBSSH_API ssh_string string_from_char(const char *what);
+LIBSSH_API size_t string_len(ssh_string str);
+LIBSSH_API ssh_string string_new(size_t size);
+LIBSSH_API char *string_to_char(ssh_string str);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _LIBSSH_H */
+/* vim: set ts=2 sw=2 et cindent: */
diff --git a/lib/libssh_win32/include/libssh/server.h b/lib/libssh_win32/include/libssh/server.h
new file mode 100644
index 0000000000..a235ffa666
--- /dev/null
+++ b/lib/libssh_win32/include/libssh/server.h
@@ -0,0 +1,187 @@
+/* Public include file for server support */
+/*
+ * This file is part of the SSH Library
+ *
+ * Copyright (c) 2003-2008 by Aris Adamantiadis
+ *
+ * The SSH Library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The SSH 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 Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the SSH Library; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+/**
+ * @defgroup ssh_server SSH Server
+ * @addtogroup ssh_server
+ * @{
+ */
+
+#ifndef SERVER_H
+#define SERVER_H
+
+#include "libssh/libssh.h"
+#define SERVERBANNER CLIENTBANNER
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum ssh_bind_options_e {
+ SSH_BIND_OPTIONS_BINDADDR,
+ SSH_BIND_OPTIONS_BINDPORT,
+ SSH_BIND_OPTIONS_BINDPORT_STR,
+ SSH_BIND_OPTIONS_HOSTKEY,
+ SSH_BIND_OPTIONS_DSAKEY,
+ SSH_BIND_OPTIONS_RSAKEY,
+ SSH_BIND_OPTIONS_BANNER,
+ SSH_BIND_OPTIONS_LOG_VERBOSITY,
+ SSH_BIND_OPTIONS_LOG_VERBOSITY_STR
+};
+
+//typedef struct ssh_bind_struct SSH_BIND;
+typedef struct ssh_bind_struct* ssh_bind;
+
+/**
+ * @brief Creates a new SSH server bind.
+ *
+ * @return A newly allocated ssh_bind session pointer.
+ */
+LIBSSH_API ssh_bind ssh_bind_new(void);
+
+/**
+ * @brief Set the opitons for the current SSH server bind.
+ *
+ * @param ssh_bind The ssh server bind to use.
+ *
+ * @param options The option structure to set.
+ */
+LIBSSH_API int ssh_bind_options_set(ssh_bind sshbind,
+ enum ssh_bind_options_e type, const void *value);
+
+/**
+ * @brief Start listening to the socket.
+ *
+ * @param ssh_bind_o The ssh server bind to use.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int ssh_bind_listen(ssh_bind ssh_bind_o);
+
+/**
+ * @brief Set the session to blocking/nonblocking mode.
+ *
+ * @param ssh_bind_o The ssh server bind to use.
+ *
+ * @param blocking Zero for nonblocking mode.
+ */
+LIBSSH_API void ssh_bind_set_blocking(ssh_bind ssh_bind_o, int blocking);
+
+/**
+ * @brief Recover the file descriptor from the session.
+ *
+ * @param ssh_bind_o The ssh server bind to get the fd from.
+ *
+ * @return The file descriptor.
+ */
+LIBSSH_API socket_t ssh_bind_get_fd(ssh_bind ssh_bind_o);
+
+/**
+ * @brief Set the file descriptor for a session.
+ *
+ * @param ssh_bind_o The ssh server bind to set the fd.
+ *
+ * @param fd The file descriptssh_bind B
+ */
+LIBSSH_API void ssh_bind_set_fd(ssh_bind ssh_bind_o, socket_t fd);
+
+/**
+ * @brief Allow the file descriptor to accept new sessions.
+ *
+ * @param ssh_bind_o The ssh server bind to use.
+ */
+LIBSSH_API void ssh_bind_fd_toaccept(ssh_bind ssh_bind_o);
+
+/**
+ * @brief Accept an incoming ssh connection and initialize the session.
+ *
+ * @param ssh_bind_o The ssh server bind to accept a connection.
+ * @param session A preallocated ssh session
+ * @see ssh_new
+ * @return A newly allocated ssh session, NULL on error.
+ */
+LIBSSH_API int ssh_bind_accept(ssh_bind ssh_bind_o, ssh_session session);
+
+/**
+ * @brief Free a ssh servers bind.
+ *
+ * @param ssh_bind_o The ssh server bind to free.
+ */
+LIBSSH_API void ssh_bind_free(ssh_bind ssh_bind_o);
+
+/**
+ * @brief Exchange the banner and cryptographic keys.
+ *
+ * @param session The ssh session to accept a connection.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int ssh_accept(ssh_session session);
+
+LIBSSH_API int channel_write_stderr(ssh_channel channel, const void *data, uint32_t len);
+
+/* messages.c */
+LIBSSH_API int ssh_message_reply_default(ssh_message msg);
+
+LIBSSH_API char *ssh_message_auth_user(ssh_message msg);
+LIBSSH_API char *ssh_message_auth_password(ssh_message msg);
+LIBSSH_API ssh_public_key ssh_message_auth_publickey(ssh_message msg);
+LIBSSH_API int ssh_message_auth_reply_success(ssh_message msg,int partial);
+LIBSSH_API int ssh_message_auth_reply_pk_ok(ssh_message msg, ssh_string algo, ssh_string pubkey);
+LIBSSH_API int ssh_message_auth_set_methods(ssh_message msg, int methods);
+
+LIBSSH_API int ssh_message_service_reply_success(ssh_message msg);
+LIBSSH_API char *ssh_message_service_service(ssh_message msg);
+
+LIBSSH_API void ssh_set_message_callback(ssh_session session,
+ int(*ssh_message_callback)(ssh_session session, ssh_message msg));
+
+LIBSSH_API char *ssh_message_channel_request_open_originator(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_open_originator_port(ssh_message msg);
+LIBSSH_API char *ssh_message_channel_request_open_destination(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_open_destination_port(ssh_message msg);
+
+LIBSSH_API ssh_channel ssh_message_channel_request_channel(ssh_message msg);
+
+LIBSSH_API char *ssh_message_channel_request_pty_term(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_pty_width(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_pty_height(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_pty_pxwidth(ssh_message msg);
+LIBSSH_API int ssh_message_channel_request_pty_pxheight(ssh_message msg);
+
+LIBSSH_API char *ssh_message_channel_request_env_name(ssh_message msg);
+LIBSSH_API char *ssh_message_channel_request_env_value(ssh_message msg);
+
+LIBSSH_API char *ssh_message_channel_request_command(ssh_message msg);
+
+LIBSSH_API char *ssh_message_channel_request_subsystem(ssh_message msg);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SERVER_H */
+
+/**
+ * @}
+ */
+/* vim: set ts=2 sw=2 et cindent: */
diff --git a/lib/libssh_win32/include/libssh/sftp.h b/lib/libssh_win32/include/libssh/sftp.h
new file mode 100644
index 0000000000..1eab58231c
--- /dev/null
+++ b/lib/libssh_win32/include/libssh/sftp.h
@@ -0,0 +1,906 @@
+/*
+ * This file is part of the SSH Library
+ *
+ * Copyright (c) 2003-2008 by Aris Adamantiadis
+ *
+ * The SSH Library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The SSH 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 Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the SSH Library; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+/**
+ * @file sftp.h
+ *
+ * @brief SFTP handling functions
+ *
+ * SFTP commands are channeled by the ssh sftp subsystem. Every packet is
+ * sent/read using a sftp_packet type structure. Related to these packets,
+ * most of the server answers are messages having an ID and a message
+ * specific part. It is described by sftp_message when reading a message,
+ * the sftp system puts it into the queue, so the process having asked for
+ * it can fetch it, while continuing to read for other messages (it is
+ * unspecified in which order messages may be sent back to the client
+ *
+ * @defgroup ssh_sftp SFTP Functions
+ * @{
+ */
+
+#ifndef SFTP_H
+#define SFTP_H
+
+#include <sys/types.h>
+
+#include "libssh.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _WIN32
+#ifndef uid_t
+ typedef uint32_t uid_t;
+#endif /* uid_t */
+#ifndef gid_t
+ typedef uint32_t gid_t;
+#endif /* gid_t */
+#ifdef _MSC_VER
+#ifndef ssize_t
+ typedef _W64 SSIZE_T ssize_t;
+#endif /* ssize_t */
+#endif /* _MSC_VER */
+#endif /* _WIN32 */
+
+typedef struct sftp_attributes_struct* sftp_attributes;
+typedef struct sftp_client_message_struct* sftp_client_message;
+typedef struct sftp_dir_struct* sftp_dir;
+typedef struct sftp_ext_struct *sftp_ext;
+typedef struct sftp_file_struct* sftp_file;
+typedef struct sftp_message_struct* sftp_message;
+typedef struct sftp_packet_struct* sftp_packet;
+typedef struct sftp_request_queue_struct* sftp_request_queue;
+typedef struct sftp_session_struct* sftp_session;
+typedef struct sftp_status_message_struct* sftp_status_message;
+typedef struct sftp_statvfs_struct* sftp_statvfs_t;
+
+struct sftp_session_struct {
+ ssh_session session;
+ ssh_channel channel;
+ int server_version;
+ int client_version;
+ int version;
+ sftp_request_queue queue;
+ uint32_t id_counter;
+ int errnum;
+ void **handles;
+ sftp_ext ext;
+};
+
+struct sftp_packet_struct {
+ sftp_session sftp;
+ uint8_t type;
+ ssh_buffer payload;
+};
+
+/* file handler */
+struct sftp_file_struct {
+ sftp_session sftp;
+ char *name;
+ uint64_t offset;
+ ssh_string handle;
+ int eof;
+ int nonblocking;
+};
+
+struct sftp_dir_struct {
+ sftp_session sftp;
+ char *name;
+ ssh_string handle; /* handle to directory */
+ ssh_buffer buffer; /* contains raw attributes from server which haven't been parsed */
+ uint32_t count; /* counts the number of following attributes structures into buffer */
+ int eof; /* end of directory listing */
+};
+
+struct sftp_message_struct {
+ sftp_session sftp;
+ uint8_t packet_type;
+ ssh_buffer payload;
+ uint32_t id;
+};
+
+/* this is a bunch of all data that could be into a message */
+struct sftp_client_message_struct {
+ sftp_session sftp;
+ uint8_t type;
+ uint32_t id;
+ char *filename; /* can be "path" */
+ uint32_t flags;
+ sftp_attributes attr;
+ ssh_string handle;
+ uint64_t offset;
+ uint32_t len;
+ int attr_num;
+ ssh_buffer attrbuf; /* used by sftp_reply_attrs */
+ ssh_string data; /* can be newpath of rename() */
+};
+
+struct sftp_request_queue_struct {
+ sftp_request_queue next;
+ sftp_message message;
+};
+
+/* SSH_FXP_MESSAGE described into .7 page 26 */
+struct sftp_status_message_struct {
+ uint32_t id;
+ uint32_t status;
+ ssh_string error;
+ ssh_string lang;
+ char *errormsg;
+ char *langmsg;
+};
+
+struct sftp_attributes_struct {
+ char *name;
+ char *longname; /* ls -l output on openssh, not reliable else */
+ uint32_t flags;
+ uint8_t type;
+ uint64_t size;
+ uint32_t uid;
+ uint32_t gid;
+ char *owner; /* set if openssh and version 4 */
+ char *group; /* set if openssh and version 4 */
+ uint32_t permissions;
+ uint64_t atime64;
+ uint32_t atime;
+ uint32_t atime_nseconds;
+ uint64_t createtime;
+ uint32_t createtime_nseconds;
+ uint64_t mtime64;
+ uint32_t mtime;
+ uint32_t mtime_nseconds;
+ ssh_string acl;
+ uint32_t extended_count;
+ ssh_string extended_type;
+ ssh_string extended_data;
+};
+
+struct sftp_statvfs_struct {
+ uint64_t f_bsize; /* file system block size */
+ uint64_t f_frsize; /* fundamental fs block size */
+ uint64_t f_blocks; /* number of blocks (unit f_frsize) */
+ uint64_t f_bfree; /* free blocks in file system */
+ uint64_t f_bavail; /* free blocks for non-root */
+ uint64_t f_files; /* total file inodes */
+ uint64_t f_ffree; /* free file inodes */
+ uint64_t f_favail; /* free file inodes for to non-root */
+ uint64_t f_fsid; /* file system id */
+ uint64_t f_flag; /* bit mask of f_flag values */
+ uint64_t f_namemax; /* maximum filename length */
+};
+
+#define LIBSFTP_VERSION 3
+
+/**
+ * @brief Start a new sftp session.
+ *
+ * @param session The ssh session to use.
+ *
+ * @return A new sftp session or NULL on error.
+ */
+LIBSSH_API sftp_session sftp_new(ssh_session session);
+
+/**
+ * @brief Close and deallocate a sftp session.
+ *
+ * @param sftp The sftp session handle to free.
+ */
+LIBSSH_API void sftp_free(sftp_session sftp);
+
+/**
+ * @brief Initialize the sftp session with the server.
+ *
+ * @param sftp The sftp session to initialize.
+ *
+ * @return 0 on success, < 0 on error with ssh error set.
+ */
+LIBSSH_API int sftp_init(sftp_session sftp);
+
+/**
+ * @brief Get the last sftp error.
+ *
+ * Use this function to get the latest error set by a posix like sftp function.
+ *
+ * @param sftp The sftp session where the error is saved.
+ *
+ * @return The saved error (see server responses), < 0 if an error
+ * in the function occured.
+ */
+LIBSSH_API int sftp_get_error(sftp_session sftp);
+
+/**
+ * @brief Get the count of extensions provided by the server.
+ *
+ * @param sftp The sftp session to use.
+ *
+ * @return The count of extensions provided by the server, 0 on error or
+ * not available.
+ */
+LIBSSH_API unsigned int sftp_extensions_get_count(sftp_session sftp);
+
+/**
+ * @brief Get the name of the extension provided by the server.
+ *
+ * @param sftp The sftp session to use.
+ *
+ * @param indexn The index number of the extension name you want.
+ *
+ * @return The name of the extension.
+ */
+LIBSSH_API const char *sftp_extensions_get_name(sftp_session sftp, unsigned int indexn);
+
+/**
+ * @brief Get the data of the extension provided by the server.
+ *
+ * This is normally the version number of the extension.
+ *
+ * @param sftp The sftp session to use.
+ *
+ * @param indexn The index number of the extension data you want.
+ *
+ * @return The data of the extension.
+ */
+LIBSSH_API const char *sftp_extensions_get_data(sftp_session sftp, unsigned int indexn);
+
+/**
+ * @brief Check if the given extension is supported.
+ *
+ * @param sftp The sftp session to use.
+ *
+ * @param name The name of the extension.
+ *
+ * @param data The data of the extension.
+ *
+ * @return 1 if supported, 0 if not.
+ *
+ * Example:
+ *
+ * @code
+ * sftp_extension_supported(sftp, "statvfs@openssh.com", "2");
+ * @endcode
+ */
+LIBSSH_API int sftp_extension_supported(sftp_session sftp, const char *name,
+ const char *data);
+
+/**
+ * @brief Open a directory used to obtain directory entries.
+
+ * @param session The sftp session handle to open the directory.
+ * @param path The path of the directory to open.
+ *
+ * @return A sftp directory handle or NULL on error with ssh and
+ * sftp error set.
+ *
+ * @see sftp_readdir
+ * @see sftp_closedir
+ */
+LIBSSH_API sftp_dir sftp_opendir(sftp_session session, const char *path);
+
+/**
+ * @brief Get a single file attributes structure of a directory.
+ *
+ * @param session The sftp session handle to read the directory entry.
+ * @param dir The opened sftp directory handle to read from.
+ *
+ * @return A file attribute structure or NULL at the end of the
+ * directory.
+ *
+ * @see sftp_opendir()
+ * @see sftp_attribute_free()
+ * @see sftp_closedir()
+ */
+LIBSSH_API sftp_attributes sftp_readdir(sftp_session session, sftp_dir dir);
+
+/**
+ * @brief Tell if the directory has reached EOF (End Of File).
+ *
+ * @param dir The sftp directory handle.
+ *
+ * @return 1 if the directory is EOF, 0 if not.
+ *
+ * @see sftp_readdir()
+ */
+LIBSSH_API int sftp_dir_eof(sftp_dir dir);
+
+/**
+ * @brief Get information about a file or directory.
+ *
+ * @param session The sftp session handle.
+ * @param path The path to the file or directory to obtain the
+ * information.
+ *
+ * @return The sftp attributes structure of the file or directory,
+ * NULL on error with ssh and sftp error set.
+ */
+LIBSSH_API sftp_attributes sftp_stat(sftp_session session, const char *path);
+
+/**
+ * @brief Get information about a file or directory.
+ *
+ * Identical to sftp_stat, but if the file or directory is a symbolic link,
+ * then the link itself is stated, not the file that it refers to.
+ *
+ * @param session The sftp session handle.
+ * @param path The path to the file or directory to obtain the
+ * information.
+ *
+ * @return The sftp attributes structure of the file or directory,
+ * NULL on error with ssh and sftp error set.
+ */
+LIBSSH_API sftp_attributes sftp_lstat(sftp_session session, const char *path);
+
+/**
+ * @brief Get information about a file or directory from a file handle.
+ *
+ * @param file The sftp file handle to get the stat information.
+ *
+ * @return The sftp attributes structure of the file or directory,
+ * NULL on error with ssh and sftp error set.
+ */
+LIBSSH_API sftp_attributes sftp_fstat(sftp_file file);
+
+/**
+ * @brief Free a sftp attribute structure.
+ *
+ * @param file The sftp attribute structure to free.
+ */
+LIBSSH_API void sftp_attributes_free(sftp_attributes file);
+
+/**
+ * @brief Close a directory handle opened by sftp_opendir().
+ *
+ * @param dir The sftp directory handle to close.
+ *
+ * @return Returns SSH_NO_ERROR or SSH_ERROR if an error occured.
+ */
+LIBSSH_API int sftp_closedir(sftp_dir dir);
+
+/**
+ * @brief Close an open file handle.
+ *
+ * @param file The open sftp file handle to close.
+ *
+ * @return Returns SSH_NO_ERROR or SSH_ERROR if an error occured.
+ *
+ * @see sftp_open()
+ */
+LIBSSH_API int sftp_close(sftp_file file);
+
+/**
+ * @brief Open a file on the server.
+ *
+ * @param session The sftp session handle.
+ *
+ * @param file The file to be opened.
+ *
+ * @param accesstype Is one of O_RDONLY, O_WRONLY or O_RDWR which request
+ * opening the file read-only,write-only or read/write.
+ * Acesss may also be bitwise-or'd with one or more of
+ * the following:
+ * O_CREAT - If the file does not exist it will be
+ * created.
+ * O_EXCL - When used with O_CREAT, if the file already
+ * exists it is an error and the open will fail.
+ * O_TRUNC - If the file already exists it will be
+ * truncated.
+ *
+ * @param mode Mode specifies the permissions to use if a new file is
+ * created. It is modified by the process's umask in
+ * the usual way: The permissions of the created file are
+ * (mode & ~umask)
+ *
+ * @return A sftp file handle, NULL on error with ssh and sftp
+ * error set.
+ */
+LIBSSH_API sftp_file sftp_open(sftp_session session, const char *file, int accesstype,
+ mode_t mode);
+
+LIBSSH_API void sftp_file_set_nonblocking(sftp_file handle);
+
+LIBSSH_API void sftp_file_set_blocking(sftp_file handle);
+
+/**
+ * @brief Read from a file using an opened sftp file handle.
+ *
+ * @param file The opened sftp file handle to be read from.
+ *
+ * @param buf Pointer to buffer to recieve read data.
+ *
+ * @param count Size of the buffer in bytes.
+ *
+ * @return Number of bytes written, < 0 on error with ssh and sftp
+ * error set.
+ */
+LIBSSH_API ssize_t sftp_read(sftp_file file, void *buf, size_t count);
+
+/**
+ * @brief Start an asynchronous read from a file using an opened sftp file handle.
+ *
+ * Its goal is to avoid the slowdowns related to the request/response pattern
+ * of a synchronous read. To do so, you must call 2 functions:
+ *
+ * sftp_async_read_begin() and sftp_async_read().
+ *
+ * The first step is to call sftp_async_read_begin(). This function returns a
+ * request identifier. The second step is to call sftp_async_read() using the
+ * returned identifier.
+ *
+ * @param file The opened sftp file handle to be read from.
+ *
+ * @param len Size to read in bytes.
+ *
+ * @return An identifier corresponding to the sent request, < 0 on
+ * error.
+ *
+ * @warning When calling this function, the internal offset is
+ * updated corresponding to the len parameter.
+ *
+ * @warning A call to sftp_async_read_begin() sends a request to
+ * the server. When the server answers, libssh allocates
+ * memory to store it until sftp_async_read() is called.
+ * Not calling sftp_async_read() will lead to memory
+ * leaks.
+ *
+ * @see sftp_async_read()
+ * @see sftp_open()
+ */
+LIBSSH_API int sftp_async_read_begin(sftp_file file, uint32_t len);
+
+/**
+ * @brief Wait for an asynchronous read to complete and save the data.
+ *
+ * @param file The opened sftp file handle to be read from.
+ *
+ * @param data Pointer to buffer to recieve read data.
+ *
+ * @param len Size of the buffer in bytes. It should be bigger or
+ * equal to the length parameter of the
+ * sftp_async_read_begin() call.
+ *
+ * @param id The identifier returned by the sftp_async_read_begin()
+ * function.
+ *
+ * @return Number of bytes read, 0 on EOF, SSH_ERROR if an error
+ * occured, SSH_AGAIN if the file is opened in nonblocking
+ * mode and the request hasn't been executed yet.
+ *
+ * @warning A call to this function with an invalid identifier
+ * will never return.
+ *
+ * @see sftp_async_read_begin()
+ */
+LIBSSH_API int sftp_async_read(sftp_file file, void *data, uint32_t len, uint32_t id);
+
+/**
+ * @brief Write to a file using an opened sftp file handle.
+ *
+ * @param file Open sftp file handle to write to.
+ *
+ * @param buf Pointer to buffer to write data.
+ *
+ * @param count Size of buffer in bytes.
+ *
+ * @return Number of bytes written, < 0 on error with ssh and sftp
+ * error set.
+ *
+ * @see sftp_open()
+ * @see sftp_read()
+ * @see sftp_close()
+ */
+LIBSSH_API ssize_t sftp_write(sftp_file file, const void *buf, size_t count);
+
+/**
+ * @brief Seek to a specific location in a file.
+ *
+ * @param file Open sftp file handle to seek in.
+ *
+ * @param new_offset Offset in bytes to seek.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int sftp_seek(sftp_file file, uint32_t new_offset);
+
+/**
+ * @brief Seek to a specific location in a file. This is the
+ * 64bit version.
+ *
+ * @param file Open sftp file handle to seek in.
+ *
+ * @param new_offset Offset in bytes to seek.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int sftp_seek64(sftp_file file, uint64_t new_offset);
+
+/**
+ * @brief Report current byte position in file.
+ *
+ * @param file Open sftp file handle.
+ *
+ * @return The offset of the current byte relative to the beginning
+ * of the file associated with the file descriptor. < 0 on
+ * error.
+ */
+LIBSSH_API unsigned long sftp_tell(sftp_file file);
+
+/**
+ * @brief Report current byte position in file.
+ *
+ * @param file Open sftp file handle.
+ *
+ * @return The offset of the current byte relative to the beginning
+ * of the file associated with the file descriptor. < 0 on
+ * error.
+ */
+LIBSSH_API uint64_t sftp_tell64(sftp_file file);
+
+/**
+ * @brief Rewinds the position of the file pointer to the beginning of the
+ * file.
+ *
+ * @param file Open sftp file handle.
+ */
+LIBSSH_API void sftp_rewind(sftp_file file);
+
+/**
+ * @brief Unlink (delete) a file.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param file The file to unlink/delete.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_unlink(sftp_session sftp, const char *file);
+
+/**
+ * @brief Remove a directoy.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param directory The directory to remove.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_rmdir(sftp_session sftp, const char *directory);
+
+/**
+ * @brief Create a directory.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param directory The directory to create.
+ *
+ * @param mode Specifies the permissions to use. It is modified by the
+ * process's umask in the usual way:
+ * The permissions of the created file are (mode & ~umask)
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_mkdir(sftp_session sftp, const char *directory, mode_t mode);
+
+/**
+ * @brief Rename or move a file or directory.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param original The original url (source url) of file or directory to
+ * be moved.
+ *
+ * @param newname The new url (destination url) of the file or directory
+ * after the move.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_rename(sftp_session sftp, const char *original, const char *newname);
+
+/**
+ * @brief Set file attributes on a file, directory or symbolic link.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param file The file which attributes should be changed.
+ *
+ * @param attr The file attributes structure with the attributes set
+ * which should be changed.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_setstat(sftp_session sftp, const char *file, sftp_attributes attr);
+
+/**
+ * @brief Change the file owner and group
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param file The file which owner and group should be changed.
+ *
+ * @param owner The new owner which should be set.
+ *
+ * @param group The new group which should be set.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_chown(sftp_session sftp, const char *file, uid_t owner, gid_t group);
+
+/**
+ * @brief Change permissions of a file
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param file The file which owner and group should be changed.
+ *
+ * @param mode Specifies the permissions to use. It is modified by the
+ * process's umask in the usual way:
+ * The permissions of the created file are (mode & ~umask)
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_chmod(sftp_session sftp, const char *file, mode_t mode);
+
+/**
+ * @brief Change the last modification and access time of a file.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param file The file which owner and group should be changed.
+ *
+ * @param times A timeval structure which contains the desired access
+ * and modification time.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_utimes(sftp_session sftp, const char *file, const struct timeval *times);
+
+/**
+ * @brief Create a symbolic link.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param target Specifies the target of the symlink.
+ *
+ * @param dest Specifies the path name of the symlink to be created.
+ *
+ * @return 0 on success, < 0 on error with ssh and sftp error set.
+ */
+LIBSSH_API int sftp_symlink(sftp_session sftp, const char *target, const char *dest);
+
+/**
+ * @brief Read the value of a symbolic link.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param path Specifies the path name of the symlink to be read.
+ *
+ * @return The target of the link, NULL on error.
+ */
+LIBSSH_API char *sftp_readlink(sftp_session sftp, const char *path);
+
+/**
+ * @brief Get information about a mounted file system.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param path The pathname of any file within the mounted file system.
+ *
+ * @return A statvfs structure or NULL on error.
+ */
+LIBSSH_API sftp_statvfs_t sftp_statvfs(sftp_session sftp, const char *path);
+
+/**
+ * @brief Get information about a mounted file system.
+ *
+ * @param file An opened file.
+ *
+ * @return A statvfs structure or NULL on error.
+ */
+LIBSSH_API sftp_statvfs_t sftp_fstatvfs(sftp_file file);
+
+/**
+ * @brief Free the memory of an allocated statvfs.
+ *
+ * @param statvfs_o The statvfs to free.
+ */
+LIBSSH_API void sftp_statvfs_free(sftp_statvfs_t statvfs_o);
+
+/**
+ * @brief Canonicalize a sftp path.
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @param path The path to be canonicalized.
+ *
+ * @return The canonicalize path, NULL on error.
+ */
+LIBSSH_API char *sftp_canonicalize_path(sftp_session sftp, const char *path);
+
+/**
+ * @brief Get the version of the SFTP protocol supported by the server
+ *
+ * @param sftp The sftp session handle.
+ *
+ * @return The server version.
+ */
+LIBSSH_API int sftp_server_version(sftp_session sftp);
+
+#ifdef WITH_SERVER
+/**
+ * @brief Create a new sftp server session.
+ *
+ * @param session The ssh session to use.
+ *
+ * @param chan The ssh channel to use.
+ *
+ * @return A new sftp server session.
+ */
+LIBSSH_API sftp_session sftp_server_new(ssh_session session, ssh_channel chan);
+
+/**
+ * @brief Intialize the sftp server.
+ *
+ * @param sftp The sftp session to init.
+ *
+ * @return 0 on success, < 0 on error.
+ */
+LIBSSH_API int sftp_server_init(sftp_session sftp);
+#endif /* WITH_SERVER */
+
+/* this is not a public interface */
+#define SFTP_HANDLES 256
+sftp_packet sftp_packet_read(sftp_session sftp);
+int sftp_packet_write(sftp_session sftp,uint8_t type, ssh_buffer payload);
+void sftp_packet_free(sftp_packet packet);
+int buffer_add_attributes(ssh_buffer buffer, sftp_attributes attr);
+sftp_attributes sftp_parse_attr(sftp_session session, ssh_buffer buf,int expectname);
+/* sftpserver.c */
+
+sftp_client_message sftp_get_client_message(sftp_session sftp);
+void sftp_client_message_free(sftp_client_message msg);
+int sftp_reply_name(sftp_client_message msg, const char *name,
+ sftp_attributes attr);
+int sftp_reply_handle(sftp_client_message msg, ssh_string handle);
+ssh_string sftp_handle_alloc(sftp_session sftp, void *info);
+int sftp_reply_attr(sftp_client_message msg, sftp_attributes attr);
+void *sftp_handle(sftp_session sftp, ssh_string handle);
+int sftp_reply_status(sftp_client_message msg, uint32_t status, const char *message);
+int sftp_reply_names_add(sftp_client_message msg, const char *file,
+ const char *longname, sftp_attributes attr);
+int sftp_reply_names(sftp_client_message msg);
+int sftp_reply_data(sftp_client_message msg, const void *data, int len);
+void sftp_handle_remove(sftp_session sftp, void *handle);
+
+/* SFTP commands and constants */
+#define SSH_FXP_INIT 1
+#define SSH_FXP_VERSION 2
+#define SSH_FXP_OPEN 3
+#define SSH_FXP_CLOSE 4
+#define SSH_FXP_READ 5
+#define SSH_FXP_WRITE 6
+#define SSH_FXP_LSTAT 7
+#define SSH_FXP_FSTAT 8
+#define SSH_FXP_SETSTAT 9
+#define SSH_FXP_FSETSTAT 10
+#define SSH_FXP_OPENDIR 11
+#define SSH_FXP_READDIR 12
+#define SSH_FXP_REMOVE 13
+#define SSH_FXP_MKDIR 14
+#define SSH_FXP_RMDIR 15
+#define SSH_FXP_REALPATH 16
+#define SSH_FXP_STAT 17
+#define SSH_FXP_RENAME 18
+#define SSH_FXP_READLINK 19
+#define SSH_FXP_SYMLINK 20
+
+#define SSH_FXP_STATUS 101
+#define SSH_FXP_HANDLE 102
+#define SSH_FXP_DATA 103
+#define SSH_FXP_NAME 104
+#define SSH_FXP_ATTRS 105
+
+#define SSH_FXP_EXTENDED 200
+#define SSH_FXP_EXTENDED_REPLY 201
+
+/* attributes */
+/* sftp draft is completely braindead : version 3 and 4 have different flags for same constants */
+/* and even worst, version 4 has same flag for 2 different constants */
+/* follow up : i won't develop any sftp4 compliant library before having a clarification */
+
+#define SSH_FILEXFER_ATTR_SIZE 0x00000001
+#define SSH_FILEXFER_ATTR_PERMISSIONS 0x00000004
+#define SSH_FILEXFER_ATTR_ACCESSTIME 0x00000008
+#define SSH_FILEXFER_ATTR_ACMODTIME 0x00000008
+#define SSH_FILEXFER_ATTR_CREATETIME 0x00000010
+#define SSH_FILEXFER_ATTR_MODIFYTIME 0x00000020
+#define SSH_FILEXFER_ATTR_ACL 0x00000040
+#define SSH_FILEXFER_ATTR_OWNERGROUP 0x00000080
+#define SSH_FILEXFER_ATTR_SUBSECOND_TIMES 0x00000100
+#define SSH_FILEXFER_ATTR_EXTENDED 0x80000000
+#define SSH_FILEXFER_ATTR_UIDGID 0x00000002
+
+/* types */
+#define SSH_FILEXFER_TYPE_REGULAR 1
+#define SSH_FILEXFER_TYPE_DIRECTORY 2
+#define SSH_FILEXFER_TYPE_SYMLINK 3
+#define SSH_FILEXFER_TYPE_SPECIAL 4
+#define SSH_FILEXFER_TYPE_UNKNOWN 5
+
+/* server responses */
+#define SSH_FX_OK 0
+#define SSH_FX_EOF 1
+#define SSH_FX_NO_SUCH_FILE 2
+#define SSH_FX_PERMISSION_DENIED 3
+#define SSH_FX_FAILURE 4
+#define SSH_FX_BAD_MESSAGE 5
+#define SSH_FX_NO_CONNECTION 6
+#define SSH_FX_CONNECTION_LOST 7
+#define SSH_FX_OP_UNSUPPORTED 8
+#define SSH_FX_INVALID_HANDLE 9
+#define SSH_FX_NO_SUCH_PATH 10
+#define SSH_FX_FILE_ALREADY_EXISTS 11
+#define SSH_FX_WRITE_PROTECT 12
+#define SSH_FX_NO_MEDIA 13
+
+/* file flags */
+#define SSH_FXF_READ 0x01
+#define SSH_FXF_WRITE 0x02
+#define SSH_FXF_APPEND 0x04
+#define SSH_FXF_CREAT 0x08
+#define SSH_FXF_TRUNC 0x10
+#define SSH_FXF_EXCL 0x20
+#define SSH_FXF_TEXT 0x40
+
+/* rename flags */
+#define SSH_FXF_RENAME_OVERWRITE 0x00000001
+#define SSH_FXF_RENAME_ATOMIC 0x00000002
+#define SSH_FXF_RENAME_NATIVE 0x00000004
+
+#define SFTP_OPEN SSH_FXP_OPEN
+#define SFTP_CLOSE SSH_FXP_CLOSE
+#define SFTP_READ SSH_FXP_READ
+#define SFTP_WRITE SSH_FXP_WRITE
+#define SFTP_LSTAT SSH_FXP_LSTAT
+#define SFTP_FSTAT SSH_FXP_FSTAT
+#define SFTP_SETSTAT SSH_FXP_SETSTAT
+#define SFTP_FSETSTAT SSH_FXP_FSETSTAT
+#define SFTP_OPENDIR SSH_FXP_OPENDIR
+#define SFTP_READDIR SSH_FXP_READDIR
+#define SFTP_REMOVE SSH_FXP_REMOVE
+#define SFTP_MKDIR SSH_FXP_MKDIR
+#define SFTP_RMDIR SSH_FXP_RMDIR
+#define SFTP_REALPATH SSH_FXP_REALPATH
+#define SFTP_STAT SSH_FXP_STAT
+#define SFTP_RENAME SSH_FXP_RENAME
+#define SFTP_READLINK SSH_FXP_READLINK
+#define SFTP_SYMLINK SSH_FXP_SYMLINK
+
+/* openssh flags */
+#define SSH_FXE_STATVFS_ST_RDONLY 0x1 /* read-only */
+#define SSH_FXE_STATVFS_ST_NOSUID 0x2 /* no setuid */
+
+#ifdef __cplusplus
+} ;
+#endif
+
+#endif /* SFTP_H */
+
+/** @} */
+/* vim: set ts=2 sw=2 et cindent: */
diff --git a/lib/libssh_win32/include/libssh/ssh2.h b/lib/libssh_win32/include/libssh/ssh2.h
new file mode 100644
index 0000000000..d7269fa344
--- /dev/null
+++ b/lib/libssh_win32/include/libssh/ssh2.h
@@ -0,0 +1,69 @@
+#ifndef __SSH2_H
+#define __SSH2_H
+
+#define SSH2_MSG_DISCONNECT 1
+#define SSH2_MSG_IGNORE 2
+#define SSH2_MSG_UNIMPLEMENTED 3
+#define SSH2_MSG_DEBUG 4
+#define SSH2_MSG_SERVICE_REQUEST 5
+#define SSH2_MSG_SERVICE_ACCEPT 6
+
+#define SSH2_MSG_KEXINIT 20
+#define SSH2_MSG_NEWKEYS 21
+
+#define SSH2_MSG_KEXDH_INIT 30
+#define SSH2_MSG_KEXDH_REPLY 31
+
+#define SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 30
+#define SSH2_MSG_KEX_DH_GEX_GROUP 31
+#define SSH2_MSG_KEX_DH_GEX_INIT 32
+#define SSH2_MSG_KEX_DH_GEX_REPLY 33
+#define SSH2_MSG_KEX_DH_GEX_REQUEST 34
+#define SSH2_MSG_USERAUTH_REQUEST 50
+#define SSH2_MSG_USERAUTH_FAILURE 51
+#define SSH2_MSG_USERAUTH_SUCCESS 52
+#define SSH2_MSG_USERAUTH_BANNER 53
+#define SSH2_MSG_USERAUTH_PK_OK 60
+#define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ 60
+#define SSH2_MSG_USERAUTH_INFO_REQUEST 60
+#define SSH2_MSG_USERAUTH_INFO_RESPONSE 61
+#define SSH2_MSG_GLOBAL_REQUEST 80
+#define SSH2_MSG_REQUEST_SUCCESS 81
+#define SSH2_MSG_REQUEST_FAILURE 82
+#define SSH2_MSG_CHANNEL_OPEN 90
+#define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION 91
+#define SSH2_MSG_CHANNEL_OPEN_FAILURE 92
+#define SSH2_MSG_CHANNEL_WINDOW_ADJUST 93
+#define SSH2_MSG_CHANNEL_DATA 94
+#define SSH2_MSG_CHANNEL_EXTENDED_DATA 95
+#define SSH2_MSG_CHANNEL_EOF 96
+#define SSH2_MSG_CHANNEL_CLOSE 97
+#define SSH2_MSG_CHANNEL_REQUEST 98
+#define SSH2_MSG_CHANNEL_SUCCESS 99
+#define SSH2_MSG_CHANNEL_FAILURE 100
+
+#define SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1
+#define SSH2_DISCONNECT_PROTOCOL_ERROR 2
+#define SSH2_DISCONNECT_KEY_EXCHANGE_FAILED 3
+#define SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED 4
+#define SSH2_DISCONNECT_RESERVED 4
+#define SSH2_DISCONNECT_MAC_ERROR 5
+#define SSH2_DISCONNECT_COMPRESSION_ERROR 6
+#define SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE 7
+#define SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8
+#define SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9
+#define SSH2_DISCONNECT_CONNECTION_LOST 10
+#define SSH2_DISCONNECT_BY_APPLICATION 11
+#define SSH2_DISCONNECT_TOO_MANY_CONNECTIONS 12
+#define SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER 13
+#define SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14
+#define SSH2_DISCONNECT_ILLEGAL_USER_NAME 15
+
+#define SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED 1
+#define SSH2_OPEN_CONNECT_FAILED 2
+#define SSH2_OPEN_UNKNOWN_CHANNEL_TYPE 3
+#define SSH2_OPEN_RESOURCE_SHORTAGE 4
+
+#define SSH2_EXTENDED_DATA_STDERR 1
+
+#endif
diff --git a/lib/libssh_win32/lib/libssh.def b/lib/libssh_win32/lib/libssh.def
new file mode 100644
index 0000000000..5e7d721776
--- /dev/null
+++ b/lib/libssh_win32/lib/libssh.def
@@ -0,0 +1,350 @@
+EXPORTS
+ buffer_add_attributes
+ buffer_add_buffer
+ buffer_add_data
+ buffer_add_ssh_string
+ buffer_add_u16
+ buffer_add_u32
+ buffer_add_u64
+ buffer_add_u8
+ buffer_free
+ buffer_get
+ buffer_get_data
+ buffer_get_len
+ buffer_get_mpint
+ buffer_get_rest
+ buffer_get_rest_len
+ buffer_get_ssh_string
+ buffer_get_u32
+ buffer_get_u64
+ buffer_get_u8
+ buffer_new
+ buffer_pass_bytes
+ buffer_pass_bytes_end
+ buffer_prepend_data
+ buffer_reinit
+ channel_accept_x11
+ channel_change_pty_size
+ channel_close
+ channel_default_bufferize
+ channel_forward_accept
+ channel_forward_cancel
+ channel_forward_listen
+ channel_free
+ channel_get_exit_status
+ channel_get_session
+ channel_handle
+ channel_is_closed
+ channel_is_eof
+ channel_is_open
+ channel_new
+ channel_open_forward
+ channel_open_session
+ channel_poll
+ channel_read
+ channel_read_buffer
+ channel_read_nonblocking
+ channel_request_env
+ channel_request_exec
+ channel_request_pty
+ channel_request_pty_size
+ channel_request_send_signal
+ channel_request_sftp
+ channel_request_shell
+ channel_request_subsystem
+ channel_request_x11
+ channel_select
+ channel_send_eof
+ channel_set_blocking
+ channel_write
+ channel_write_common
+ channel_write_stderr
+ crypt_set_algorithms
+ crypt_set_algorithms_server
+ crypto_free
+ crypto_new
+ packet_decrypt
+ packet_decrypt_len
+ packet_encrypt
+ packet_flush
+ packet_hmac_verify
+ packet_parse
+ packet_read
+ packet_send
+ packet_translate
+ packet_wait
+ privatekey_free
+ privatekey_from_file
+ publickey_free
+ publickey_from_file
+ publickey_from_privatekey
+ publickey_from_string
+ publickey_make_dss
+ publickey_make_rsa
+ publickey_to_string
+ sftp_async_read
+ sftp_async_read_begin
+ sftp_attributes_free
+ sftp_canonicalize_path
+ sftp_chmod
+ sftp_chown
+ sftp_client_message_free
+ sftp_close
+ sftp_closedir
+ sftp_dir_eof
+ sftp_extension_supported
+ sftp_extensions_get_count
+ sftp_extensions_get_data
+ sftp_extensions_get_name
+ sftp_file_set_blocking
+ sftp_file_set_nonblocking
+ sftp_free
+ sftp_fstat
+ sftp_fstatvfs
+ sftp_get_client_message
+ sftp_get_error
+ sftp_handle
+ sftp_handle_alloc
+ sftp_handle_remove
+ sftp_init
+ sftp_lstat
+ sftp_mkdir
+ sftp_new
+ sftp_open
+ sftp_opendir
+ sftp_packet_free
+ sftp_packet_read
+ sftp_packet_write
+ sftp_parse_attr
+ sftp_read
+ sftp_readdir
+ sftp_readlink
+ sftp_rename
+ sftp_reply_attr
+ sftp_reply_data
+ sftp_reply_handle
+ sftp_reply_name
+ sftp_reply_names
+ sftp_reply_names_add
+ sftp_reply_status
+ sftp_rewind
+ sftp_rmdir
+ sftp_seek
+ sftp_seek64
+ sftp_server_init
+ sftp_server_new
+ sftp_server_version
+ sftp_setstat
+ sftp_stat
+ sftp_statvfs
+ sftp_statvfs_free
+ sftp_symlink
+ sftp_tell
+ sftp_tell64
+ sftp_unlink
+ sftp_utimes
+ sftp_write
+ ssh_accept
+ ssh_auth_list
+ ssh_basename
+ ssh_bind_accept
+ ssh_bind_fd_toaccept
+ ssh_bind_free
+ ssh_bind_get_fd
+ ssh_bind_listen
+ ssh_bind_new
+ ssh_bind_options_set
+ ssh_bind_set_blocking
+ ssh_bind_set_fd
+ ssh_channel_from_local
+ ssh_channel_new_id
+ ssh_clean_pubkey_hash
+ ssh_config_parse_file
+ ssh_connect
+ ssh_connect_host
+ ssh_copyright
+ ssh_crc32
+ ssh_crypto_finalize
+ ssh_crypto_init
+ ssh_dirname
+ ssh_disconnect
+ ssh_do_sign
+ ssh_encrypt_rsa1
+ ssh_execute_message_callbacks
+ ssh_file_readaccess_ok
+ ssh_finalize
+ ssh_find_matching
+ ssh_free
+ ssh_get_banner
+ ssh_get_disconnect_message
+ ssh_get_error
+ ssh_get_error_code
+ ssh_get_fd
+ ssh_get_hexa
+ ssh_get_issue_banner
+ ssh_get_kex
+ ssh_get_kex1
+ ssh_get_local_username
+ ssh_get_openssh_version
+ ssh_get_pubkey
+ ssh_get_pubkey_hash
+ ssh_get_random
+ ssh_get_status
+ ssh_get_user_home_dir
+ ssh_get_version
+ ssh_handle_packets
+ ssh_init
+ ssh_is_server_known
+ ssh_kex_nums DATA
+ ssh_list_append
+ ssh_list_free
+ ssh_list_get_iterator
+ ssh_list_kex
+ ssh_list_new
+ ssh_list_prepend
+ ssh_list_remove
+ ssh_log
+ ssh_message_auth_password
+ ssh_message_auth_publickey
+ ssh_message_auth_reply_pk_ok
+ ssh_message_auth_reply_success
+ ssh_message_auth_set_methods
+ ssh_message_auth_user
+ ssh_message_channel_request_channel
+ ssh_message_channel_request_command
+ ssh_message_channel_request_env_name
+ ssh_message_channel_request_env_value
+ ssh_message_channel_request_open_destination
+ ssh_message_channel_request_open_destination_port
+ ssh_message_channel_request_open_originator
+ ssh_message_channel_request_open_originator_port
+ ssh_message_channel_request_open_reply_accept
+ ssh_message_channel_request_pty_height
+ ssh_message_channel_request_pty_pxheight
+ ssh_message_channel_request_pty_pxwidth
+ ssh_message_channel_request_pty_term
+ ssh_message_channel_request_pty_width
+ ssh_message_channel_request_reply_success
+ ssh_message_channel_request_subsystem
+ ssh_message_free
+ ssh_message_get
+ ssh_message_reply_default
+ ssh_message_retrieve
+ ssh_message_service_reply_success
+ ssh_message_service_service
+ ssh_message_subtype
+ ssh_message_type
+ ssh_mkdir
+ ssh_new
+ ssh_options_copy
+ ssh_options_getopt
+ ssh_options_parse_config
+ ssh_options_set
+ ssh_options_set_algo
+ ssh_poll
+ ssh_poll_add_events
+ ssh_poll_ctx_add
+ ssh_poll_ctx_dopoll
+ ssh_poll_ctx_free
+ ssh_poll_ctx_new
+ ssh_poll_ctx_remove
+ ssh_poll_free
+ ssh_poll_get_ctx
+ ssh_poll_get_events
+ ssh_poll_get_fd
+ ssh_poll_new
+ ssh_poll_remove_events
+ ssh_poll_set_callback
+ ssh_poll_set_events
+ ssh_print_bignum
+ ssh_print_hexa
+ ssh_publickey_to_file
+ ssh_regex_finalize
+ ssh_regex_init
+ ssh_scp_accept_request
+ ssh_scp_close
+ ssh_scp_deny_request
+ ssh_scp_free
+ ssh_scp_init
+ ssh_scp_integer_mode
+ ssh_scp_leave_directory
+ ssh_scp_new
+ ssh_scp_pull_request
+ ssh_scp_push_directory
+ ssh_scp_push_file
+ ssh_scp_read
+ ssh_scp_read_string
+ ssh_scp_request_get_filename
+ ssh_scp_request_get_permissions
+ ssh_scp_request_get_size
+ ssh_scp_request_get_warning
+ ssh_scp_response
+ ssh_scp_string_mode
+ ssh_scp_write
+ ssh_select
+ ssh_send_banner
+ ssh_send_kex
+ ssh_service_request
+ ssh_set_blocking
+ ssh_set_callbacks
+ ssh_set_error
+ ssh_set_error_invalid
+ ssh_set_error_oom
+ ssh_set_fd_except
+ ssh_set_fd_toread
+ ssh_set_fd_towrite
+ ssh_set_message_callback
+ ssh_sign_session_id
+ ssh_silent_disconnect
+ ssh_socket_blocking_flush
+ ssh_socket_close
+ ssh_socket_completeread
+ ssh_socket_completewrite
+ ssh_socket_data_available
+ ssh_socket_data_writable
+ ssh_socket_fd_isset
+ ssh_socket_fd_set
+ ssh_socket_free
+ ssh_socket_get_fd
+ ssh_socket_get_status
+ ssh_socket_init
+ ssh_socket_is_open
+ ssh_socket_new
+ ssh_socket_nonblocking_flush
+ ssh_socket_poll
+ ssh_socket_read
+ ssh_socket_set_except
+ ssh_socket_set_fd
+ ssh_socket_set_toread
+ ssh_socket_set_towrite
+ ssh_socket_wait_for_data
+ ssh_socket_write
+ ssh_try_publickey_from_file
+ ssh_type_from_name
+ ssh_type_to_char
+ ssh_userauth_autopubkey
+ ssh_userauth_build_digest
+ ssh_userauth_kbdint
+ ssh_userauth_kbdint_getinstruction
+ ssh_userauth_kbdint_getname
+ ssh_userauth_kbdint_getnprompts
+ ssh_userauth_kbdint_getprompt
+ ssh_userauth_kbdint_setanswer
+ ssh_userauth_list
+ ssh_userauth_none
+ ssh_userauth_offer_pubkey
+ ssh_userauth_password
+ ssh_userauth_pubkey
+ ssh_version
+ ssh_write_knownhost
+ string_burn
+ string_copy
+ string_data
+ string_fill
+ string_free
+ string_from_char
+ string_len
+ string_new
+ string_to_char
+ try_publickey_from_file
+ \ No newline at end of file
diff --git a/lib/libssh_win32/lib/libssh.lib b/lib/libssh_win32/lib/libssh.lib
new file mode 100644
index 0000000000..71581257d6
--- /dev/null
+++ b/lib/libssh_win32/lib/libssh.lib
Binary files differ
diff --git a/lib/libssh_win32/readme.txt b/lib/libssh_win32/readme.txt
new file mode 100644
index 0000000000..cde6f0967d
--- /dev/null
+++ b/lib/libssh_win32/readme.txt
@@ -0,0 +1,5 @@
+Binary:
+http://winkde.org/pub/kde/ports/win32/releases/nightly/latest/libssh-mingw4-20100307-lib.tar.bz2
+
+Source:
+http://winkde.org/pub/kde/ports/win32/releases/nightly/latest/libssh-mingw4-20100307-src.tar.bz2 \ No newline at end of file