aboutsummaryrefslogtreecommitdiff
path: root/src/sftpserver.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2013-05-30 10:38:47 +0200
committerAndreas Schneider <asn@cryptomilk.org>2013-07-13 15:00:52 +0200
commit7e7910a1ca35c069864bafc200d7ba593a73a1f2 (patch)
tree945714c8b5496b2d3c389b756f21f580b6e59ecd /src/sftpserver.c
parent55ddc3932ebd0584013fb63f06a600a6a7517a91 (diff)
downloadlibssh-7e7910a1ca35c069864bafc200d7ba593a73a1f2.tar.gz
libssh-7e7910a1ca35c069864bafc200d7ba593a73a1f2.tar.xz
libssh-7e7910a1ca35c069864bafc200d7ba593a73a1f2.zip
sftp: added useful server APIs
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/sftpserver.c')
-rw-r--r--src/sftpserver.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/sftpserver.c b/src/sftpserver.c
index 3ae93a99..431d1d82 100644
--- a/src/sftpserver.c
+++ b/src/sftpserver.c
@@ -62,6 +62,10 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) {
msg->type = packet->type;
msg->sftp = sftp;
+ /* take a copy of the whole packet */
+ msg->complete_message = ssh_buffer_new();
+ buffer_add_data(msg->complete_message, buffer_get_rest(payload), buffer_get_rest_len(payload));
+
buffer_get_u32(payload, &msg->id);
switch(msg->type) {
@@ -241,6 +245,33 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) {
return msg;
}
+/* Send an sftp client message. Can be used in cas of proxying */
+int sftp_send_client_message(sftp_session sftp, sftp_client_message msg){
+ return sftp_packet_write(sftp, msg->type, msg->complete_message);
+}
+
+uint8_t sftp_client_message_get_type(sftp_client_message msg){
+ return msg->type;
+}
+
+const char *sftp_client_message_get_filename(sftp_client_message msg){
+ return msg->filename;
+}
+
+void sftp_client_message_set_filename(sftp_client_message msg, const char *newname){
+ free(msg->filename);
+ msg->filename = strdup(newname);
+}
+
+char *sftp_client_message_get_data(sftp_client_message msg){
+ char *str = ssh_string_to_char(msg->data);
+ return str;
+}
+
+uint32_t sftp_client_message_get_flags(sftp_client_message msg){
+ return msg->flags;
+}
+
void sftp_client_message_free(sftp_client_message msg) {
if (msg == NULL) {
return;
@@ -250,7 +281,7 @@ void sftp_client_message_free(sftp_client_message msg) {
ssh_string_free(msg->data);
ssh_string_free(msg->handle);
sftp_attributes_free(msg->attr);
-
+ ssh_buffer_free(msg->complete_message);
ZERO_STRUCTP(msg);
SAFE_FREE(msg);
}