aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-26 00:25:01 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-26 00:25:01 +0000
commite2bdc2f66c85d4d1a38b2511cb98da105cafcc24 (patch)
treec32b3d25c0e927d3bc7e9ecb943ce2549f1261df /include
parent35221f967ef5e9801c2496a7f10ced1408f9cd20 (diff)
downloadlibssh-e2bdc2f66c85d4d1a38b2511cb98da105cafcc24.tar.gz
libssh-e2bdc2f66c85d4d1a38b2511cb98da105cafcc24.tar.xz
libssh-e2bdc2f66c85d4d1a38b2511cb98da105cafcc24.zip
sftp server implementation :)
at this time, basic support of opendir, readdir, lstat, etc. just enough to "sftp" in and type ls. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@16 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'include')
-rw-r--r--include/libssh/sftp.h61
1 files changed, 60 insertions, 1 deletions
diff --git a/include/libssh/sftp.h b/include/libssh/sftp.h
index 428737f9..d4ac388e 100644
--- a/include/libssh/sftp.h
+++ b/include/libssh/sftp.h
@@ -31,8 +31,10 @@ typedef struct sftp_session_struct {
CHANNEL *channel;
int server_version;
int client_version;
+ int version;
struct request_queue *queue;
u32 id_counter;
+ void **handles;
} SFTP_SESSION ;
typedef struct {
@@ -67,6 +69,22 @@ typedef struct {
u32 id;
} SFTP_MESSAGE;
+/* this is a bunch of all data that could be into a message */
+typedef struct sftp_client_message{
+ SFTP_SESSION *sftp;
+ u8 type;
+ u32 id;
+ char *filename; /* can be "path" */
+ u32 flags;
+ struct sftp_attributes *attr;
+ STRING *handle;
+ u64 offset;
+ u32 len;
+ int attr_num;
+ BUFFER *attrbuf; /* used by sftp_reply_attrs */
+ STRING *data; /* can be newpath of rename() */
+} SFTP_CLIENT_MESSAGE;
+
typedef struct request_queue{
struct request_queue *next;
SFTP_MESSAGE *message;
@@ -83,7 +101,7 @@ typedef struct {
} STATUS_MESSAGE;
/* don't worry much of these aren't really used */
-typedef struct {
+typedef struct sftp_attributes{
char *name;
char *longname; /* some weird stuff */
u32 flags;
@@ -144,6 +162,27 @@ SFTP_SESSION *sftp_server_new(SSH_SESSION *session, CHANNEL *chan);
int sftp_server_init(SFTP_SESSION *sftp);
#endif
+/* 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,u8 type, BUFFER *payload);
+void sftp_packet_free(SFTP_PACKET *packet);
+void buffer_add_attributes(BUFFER *buffer, SFTP_ATTRIBUTES *attr);
+
+/* 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, char *name, SFTP_ATTRIBUTES *attr);
+int sftp_reply_handle(SFTP_CLIENT_MESSAGE *msg, STRING *handle);
+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, STRING *handle);
+int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, char *message);
+int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, char *file, char *longname,
+ SFTP_ATTRIBUTES *attr);
+int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg);
+void sftp_handle_remove(SFTP_SESSION *sftp, void *handle);
/* SFTP commands and constants */
#define SSH_FXP_INIT 1
@@ -225,6 +264,26 @@ int sftp_server_init(SFTP_SESSION *sftp);
#define SSH_FXF_EXCL 0x20
#define SSH_FXF_TEXT 0x40
+#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
+
+
#ifdef __cplusplus
} ;
#endif