mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 18:04:25 +09:00
Improve sftp_reply_data and fix sftp_reply_status.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@627 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
@@ -653,11 +653,11 @@ int sftp_reply_handle(SFTP_CLIENT_MESSAGE *msg, STRING *handle);
|
|||||||
STRING *sftp_handle_alloc(SFTP_SESSION *sftp, void *info);
|
STRING *sftp_handle_alloc(SFTP_SESSION *sftp, void *info);
|
||||||
int sftp_reply_attr(SFTP_CLIENT_MESSAGE *msg, SFTP_ATTRIBUTES *attr);
|
int sftp_reply_attr(SFTP_CLIENT_MESSAGE *msg, SFTP_ATTRIBUTES *attr);
|
||||||
void *sftp_handle(SFTP_SESSION *sftp, STRING *handle);
|
void *sftp_handle(SFTP_SESSION *sftp, STRING *handle);
|
||||||
int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, char *message);
|
int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, const char *message);
|
||||||
int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, const char *file,
|
int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, const char *file,
|
||||||
const char *longname, SFTP_ATTRIBUTES *attr);
|
const char *longname, SFTP_ATTRIBUTES *attr);
|
||||||
int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg);
|
int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg);
|
||||||
int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, void *data, int len);
|
int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, const void *data, int len);
|
||||||
void sftp_handle_remove(SFTP_SESSION *sftp, void *handle);
|
void sftp_handle_remove(SFTP_SESSION *sftp, void *handle);
|
||||||
|
|
||||||
/* SFTP commands and constants */
|
/* SFTP commands and constants */
|
||||||
|
|||||||
@@ -360,30 +360,56 @@ int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, char *message){
|
int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status,
|
||||||
BUFFER *out=buffer_new();
|
const char *message) {
|
||||||
int r;
|
BUFFER *out;
|
||||||
STRING *s;
|
STRING *s;
|
||||||
buffer_add_u32(out,msg->id);
|
|
||||||
buffer_add_u32(out,htonl(status));
|
out = buffer_new();
|
||||||
s=string_from_char(message?message:"");
|
if (out == NULL) {
|
||||||
buffer_add_ssh_string(out,s);
|
return -1;
|
||||||
free(s);
|
}
|
||||||
buffer_add_u32(out,0); // language string
|
|
||||||
r=sftp_packet_write(msg->sftp,SSH_FXP_STATUS,out);
|
s = string_from_char(message ? message : "");
|
||||||
|
if (s == NULL) {
|
||||||
buffer_free(out);
|
buffer_free(out);
|
||||||
return r<0;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer_add_u32(out, msg->id) < 0 ||
|
||||||
|
buffer_add_u32(out, htonl(status)) < 0 ||
|
||||||
|
buffer_add_ssh_string(out, s) < 0 ||
|
||||||
|
buffer_add_u32(out, 0) < 0 || /* language string */
|
||||||
|
sftp_packet_write(msg->sftp, SSH_FXP_STATUS, out) < 0) {
|
||||||
|
buffer_free(out);
|
||||||
|
string_free(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_free(out);
|
||||||
|
string_free(s);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, void *data, int len){
|
int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, const void *data, int len) {
|
||||||
BUFFER *out=buffer_new();
|
BUFFER *out;
|
||||||
int r;
|
|
||||||
buffer_add_u32(out,msg->id);
|
out = buffer_new();
|
||||||
buffer_add_u32(out,ntohl(len));
|
if (out == NULL) {
|
||||||
buffer_add_data(out,data,len);
|
return -1;
|
||||||
r=sftp_packet_write(msg->sftp,SSH_FXP_DATA,out);
|
}
|
||||||
|
|
||||||
|
if (buffer_add_u32(out, msg->id) < 0 ||
|
||||||
|
buffer_add_u32(out, ntohl(len)) < 0 ||
|
||||||
|
buffer_add_data(out, data, len) < 0 ||
|
||||||
|
sftp_packet_write(msg->sftp, SSH_FXP_DATA, out) < 0) {
|
||||||
buffer_free(out);
|
buffer_free(out);
|
||||||
return r<0;
|
return -1;
|
||||||
|
}
|
||||||
|
buffer_free(out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function will return you a new handle to give the client.
|
/* this function will return you a new handle to give the client.
|
||||||
|
|||||||
Reference in New Issue
Block a user