SilcSFTPMonitor monitor;
void *monitor_context;
SilcSFTPFilesystem fs;
+ SilcBuffer packet;
} *SilcSFTPServer;
/* General routine to send SFTP packet to the SFTP client. */
static void silc_sftp_send_packet(SilcSFTPServer sftp,
SilcSFTPPacket type,
- uint32 len, ...)
+ SilcUInt32 len, ...)
{
- SilcBuffer packet;
+ SilcBuffer tmp;
va_list vp;
va_start(vp, len);
- packet = silc_sftp_packet_encode_vp(type, len, vp);
+ tmp = silc_sftp_packet_encode_vp(type, sftp->packet, len, vp);
va_end(vp);
-
- if (!packet)
+ if (!tmp)
return;
+ sftp->packet = tmp;
- SILC_LOG_HEXDUMP(("SFTP packet to client"), packet->data, packet->len);
+ SILC_LOG_HEXDUMP(("SFTP packet to client"), sftp->packet->data,
+ sftp->packet->len);
/* Send the packet */
- (*sftp->send_packet)(sftp->sock, packet, sftp->send_context);
+ (*sftp->send_packet)(sftp->sock, sftp->packet, sftp->send_context);
- silc_buffer_free(packet);
+ /* Clear packet */
+ sftp->packet->data = sftp->packet->tail = sftp->packet->head;
+ sftp->packet->len = 0;
}
/* Sends error to the client */
static void silc_sftp_send_error(SilcSFTPServer sftp,
SilcSFTPStatus status,
- uint32 id)
+ SilcUInt32 id)
{
SILC_LOG_DEBUG(("Send error %d", status));
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
int mlen, llen;
SILC_LOG_DEBUG(("Status callback"));
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
unsigned char *hdata;
- uint32 hdata_len;
+ SilcUInt32 hdata_len;
SILC_LOG_DEBUG(("Handle callback"));
SILC_LOG_DEBUG(("Request ID: %d", id));
static void silc_sftp_server_data(SilcSFTP sftp,
SilcSFTPStatus status,
const unsigned char *data,
- uint32 data_len,
+ SilcUInt32 data_len,
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
SILC_LOG_DEBUG(("Data callback"));
SILC_LOG_DEBUG(("Request ID: %d", id));
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
SilcBuffer namebuf;
SILC_LOG_DEBUG(("Name callback"));
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
SilcBuffer attr_buf;
SILC_LOG_DEBUG(("Attr callback"));
static void silc_sftp_server_extended(SilcSFTP sftp,
SilcSFTPStatus status,
const unsigned char *data,
- uint32 data_len,
+ SilcUInt32 data_len,
void *context)
{
SilcSFTPServer server = (SilcSFTPServer)sftp;
- uint32 id = (uint32)context;
+ SilcUInt32 id = (SilcUInt32)context;
SILC_LOG_DEBUG(("Extended callback"));
SILC_LOG_DEBUG(("Request ID: %d", id));
SILC_LOG_DEBUG(("Stopping SFTP server %p", server));
+ if (server->packet)
+ silc_buffer_free(server->packet);
silc_free(server);
}
SilcSFTPPacket type;
char *filename = NULL, *path = NULL;
const unsigned char *payload = NULL;
- uint32 payload_len;
+ SilcUInt32 payload_len;
int ret;
SilcBufferStruct buf;
- uint32 id;
+ SilcUInt32 id;
SilcSFTPAttributes attrs;
SilcSFTPHandle handle;
SilcSFTPMonitorDataStruct mdata;
{
SilcSFTPFileOperation pflags;
unsigned char *attr_buf;
- uint32 attr_len = 0;
+ SilcUInt32 attr_len = 0;
SilcBufferStruct tmpbuf;
SILC_LOG_DEBUG(("Open request"));
case SILC_SFTP_CLOSE:
{
unsigned char *hdata;
- uint32 hdata_len;
+ SilcUInt32 hdata_len;
SILC_LOG_DEBUG(("Close request"));
case SILC_SFTP_READ:
{
unsigned char *hdata;
- uint32 hdata_len;
- uint64 offset;
- uint32 len;
+ SilcUInt32 hdata_len;
+ SilcUInt64 offset;
+ SilcUInt32 len;
SILC_LOG_DEBUG(("Read request"));
case SILC_SFTP_WRITE:
{
unsigned char *hdata;
- uint32 hdata_len;
- uint64 offset;
+ SilcUInt32 hdata_len;
+ SilcUInt64 offset;
unsigned char *data;
- uint32 data_len;
+ SilcUInt32 data_len;
SILC_LOG_DEBUG(("Read request"));
case SILC_SFTP_MKDIR:
{
unsigned char *attr_buf;
- uint32 attr_len = 0;
+ SilcUInt32 attr_len = 0;
SilcBufferStruct tmpbuf;
SILC_LOG_DEBUG(("Mkdir request"));
case SILC_SFTP_READDIR:
{
unsigned char *hdata;
- uint32 hdata_len;
+ SilcUInt32 hdata_len;
SILC_LOG_DEBUG(("Readdir request"));
case SILC_SFTP_FSTAT:
{
unsigned char *hdata;
- uint32 hdata_len;
+ SilcUInt32 hdata_len;
SILC_LOG_DEBUG(("Fstat request"));
case SILC_SFTP_SETSTAT:
{
unsigned char *attr_buf;
- uint32 attr_len = 0;
+ SilcUInt32 attr_len = 0;
SilcBufferStruct tmpbuf;
SILC_LOG_DEBUG(("Setstat request"));
case SILC_SFTP_FSETSTAT:
{
unsigned char *hdata, *attr_buf;
- uint32 hdata_len, attr_len = 0;
+ SilcUInt32 hdata_len, attr_len = 0;
SilcBufferStruct tmpbuf;
SILC_LOG_DEBUG(("Fsetstat request"));
{
char *request = NULL;
unsigned char *data;
- uint32 data_len;
+ SilcUInt32 data_len;
SILC_LOG_DEBUG(("Extended request"));