aboutsummaryrefslogtreecommitdiff
path: root/libssh/sftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'libssh/sftp.c')
-rw-r--r--libssh/sftp.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/libssh/sftp.c b/libssh/sftp.c
index ff833e2..c6fd56f 100644
--- a/libssh/sftp.c
+++ b/libssh/sftp.c
@@ -42,6 +42,8 @@ MA 02111-1307, USA. */
/* can fetch it, while continuing to read for other messages (it is inspecified in which order messages may */
/* be sent back to the client */
+#define sftp_enter_function() _enter_function(sftp->channel->session)
+#define sftp_leave_function() _leave_function(sftp->channel->session)
/* functions */
void sftp_enqueue(SFTP_SESSION *session, SFTP_MESSAGE *msg);
@@ -49,18 +51,22 @@ static void sftp_message_free(SFTP_MESSAGE *msg);
SFTP_SESSION *sftp_new(SSH_SESSION *session){
SFTP_SESSION *sftp=malloc(sizeof(SFTP_SESSION));
+ enter_function();
memset(sftp,0,sizeof(SFTP_SESSION));
sftp->session=session;
sftp->channel=channel_new(session);
if(channel_open_session(sftp->channel)){
channel_free(sftp->channel);
free(sftp);
+ leave_function();
return NULL;
}
if(channel_request_sftp(sftp->channel)){
sftp_free(sftp);
+ leave_function();
return NULL;
}
+ leave_function();
return sftp;
}
@@ -138,11 +144,13 @@ int sftp_packet_write(SFTP_SESSION *sftp,u8 type, BUFFER *payload){
SFTP_PACKET *sftp_packet_read(SFTP_SESSION *sftp){
SFTP_PACKET *packet=malloc(sizeof(SFTP_PACKET));
u32 size;
+ sftp_enter_function();
packet->sftp=sftp;
packet->payload=buffer_new();
if(channel_read(sftp->channel,packet->payload,4,0)<=0){
buffer_free(packet->payload);
free(packet);
+ sftp_leave_function();
return NULL;
}
buffer_get_u32(packet->payload,&size);
@@ -150,6 +158,7 @@ SFTP_PACKET *sftp_packet_read(SFTP_SESSION *sftp){
if(channel_read(sftp->channel,packet->payload,1,0)<=0){
buffer_free(packet->payload);
free(packet);
+ sftp_leave_function();
return NULL;
}
buffer_get_u8(packet->payload,&packet->type);
@@ -157,8 +166,10 @@ SFTP_PACKET *sftp_packet_read(SFTP_SESSION *sftp){
if(channel_read(sftp->channel,packet->payload,size-1,0)<=0){
buffer_free(packet->payload);
free(packet);
+ sftp_leave_function();
return NULL;
}
+ sftp_leave_function();
return packet;
}
@@ -196,17 +207,23 @@ SFTP_MESSAGE *sftp_get_message(SFTP_PACKET *packet){
return msg;
}
-int sftp_read_and_dispatch(SFTP_SESSION *session){
+int sftp_read_and_dispatch(SFTP_SESSION *sftp){
SFTP_PACKET *packet;
SFTP_MESSAGE *message=NULL;
- packet=sftp_packet_read(session);
- if(!packet)
- return -1; /* something nasty happened reading the packet */
+ sftp_enter_function();
+ packet=sftp_packet_read(sftp);
+ if(!packet){
+ sftp_leave_function();
+ return -1; /* something nasty happened reading the packet */
+ }
message=sftp_get_message(packet);
sftp_packet_free(packet);
- if(!message)
- return -1;
- sftp_enqueue(session,message);
+ if(!message){
+ sftp_leave_function();
+ return -1;
+ }
+ sftp_enqueue(sftp,message);
+ sftp_leave_function();
return 0;
}
@@ -222,15 +239,19 @@ int sftp_init(SFTP_SESSION *sftp){
STRING *ext_name_s=NULL, *ext_data_s=NULL;
char *ext_name,*ext_data;
u32 version=htonl(LIBSFTP_VERSION);
+ sftp_enter_function();
buffer_add_u32(buffer,version);
sftp_packet_write(sftp,SSH_FXP_INIT,buffer);
buffer_free(buffer);
packet=sftp_packet_read(sftp);
- if(!packet)
- return -1;
+ if(!packet){
+ sftp_leave_function();
+ return -1;
+ }
if(packet->type != SSH_FXP_VERSION){
ssh_set_error(sftp->session,SSH_FATAL,"Received a %d messages instead of SSH_FXP_VERSION",packet->type);
sftp_packet_free(packet);
+ sftp_leave_function();
return -1;
}
buffer_get_u32(packet->payload,&version);
@@ -250,6 +271,7 @@ int sftp_init(SFTP_SESSION *sftp){
free(ext_data_s);
sftp_packet_free(packet);
sftp->version=sftp->server_version=version;
+ sftp_leave_function();
return 0;
}