version 1.53, 2005/03/10 22:01:05 |
version 1.53.2.1, 2005/09/04 18:40:03 |
|
|
|
|
/* Send length first */ |
/* Send length first */ |
PUT_32BIT(mlen, buffer_len(m)); |
PUT_32BIT(mlen, buffer_len(m)); |
if (atomicio(vwrite, fd, mlen, sizeof(mlen)) <= 0) |
if (atomicio(vwrite, fd, mlen, sizeof(mlen)) != sizeof(mlen)) |
fatal("Couldn't send packet: %s", strerror(errno)); |
fatal("Couldn't send packet: %s", strerror(errno)); |
|
|
if (atomicio(vwrite, fd, buffer_ptr(m), buffer_len(m)) <= 0) |
if (atomicio(vwrite, fd, buffer_ptr(m), buffer_len(m)) != buffer_len(m)) |
fatal("Couldn't send packet: %s", strerror(errno)); |
fatal("Couldn't send packet: %s", strerror(errno)); |
|
|
buffer_clear(m); |
buffer_clear(m); |
|
|
static void |
static void |
get_msg(int fd, Buffer *m) |
get_msg(int fd, Buffer *m) |
{ |
{ |
ssize_t len; |
|
u_int msg_len; |
u_int msg_len; |
|
|
buffer_append_space(m, 4); |
buffer_append_space(m, 4); |
len = atomicio(read, fd, buffer_ptr(m), 4); |
if (atomicio(read, fd, buffer_ptr(m), 4) != 4) { |
if (len == 0) |
if (errno == EPIPE) |
fatal("Connection closed"); |
fatal("Connection closed"); |
else if (len == -1) |
else |
fatal("Couldn't read packet: %s", strerror(errno)); |
fatal("Couldn't read packet: %s", strerror(errno)); |
|
} |
|
|
msg_len = buffer_get_int(m); |
msg_len = buffer_get_int(m); |
if (msg_len > MAX_MSG_LENGTH) |
if (msg_len > MAX_MSG_LENGTH) |
fatal("Received message too long %u", msg_len); |
fatal("Received message too long %u", msg_len); |
|
|
buffer_append_space(m, msg_len); |
buffer_append_space(m, msg_len); |
len = atomicio(read, fd, buffer_ptr(m), msg_len); |
if (atomicio(read, fd, buffer_ptr(m), msg_len) != msg_len) { |
if (len == 0) |
if (errno == EPIPE) |
fatal("Connection closed"); |
fatal("Connection closed"); |
else if (len == -1) |
else |
fatal("Read packet: %s", strerror(errno)); |
fatal("Read packet: %s", strerror(errno)); |
|
} |
} |
} |
|
|
static void |
static void |
|
|
SFTP_DIRENT ***dir) |
SFTP_DIRENT ***dir) |
{ |
{ |
Buffer msg; |
Buffer msg; |
u_int type, id, handle_len, i, expected_id, ents = 0; |
u_int count, type, id, handle_len, i, expected_id, ents = 0; |
char *handle; |
char *handle; |
|
|
id = conn->msg_id++; |
id = conn->msg_id++; |
|
|
} |
} |
|
|
for (; !interrupted;) { |
for (; !interrupted;) { |
int count; |
|
|
|
id = expected_id = conn->msg_id++; |
id = expected_id = conn->msg_id++; |
|
|
debug3("Sending SSH2_FXP_READDIR I:%u", id); |
debug3("Sending SSH2_FXP_READDIR I:%u", id); |
|
|
Attrib junk, *a; |
Attrib junk, *a; |
Buffer msg; |
Buffer msg; |
char *handle; |
char *handle; |
int local_fd, status, num_req, max_req, write_error; |
int local_fd, status = 0, write_error; |
int read_error, write_errno; |
int read_error, write_errno; |
u_int64_t offset, size; |
u_int64_t offset, size; |
u_int handle_len, mode, type, id, buflen; |
u_int handle_len, mode, type, id, buflen, num_req, max_req; |
off_t progress_counter; |
off_t progress_counter; |
struct request { |
struct request { |
u_int id; |
u_int id; |
|
|
goto done; |
goto done; |
} |
} |
debug3("In write loop, ack for %u %u bytes at %llu", |
debug3("In write loop, ack for %u %u bytes at %llu", |
ack->id, ack->len, (unsigned long long)ack->offset); |
ack->id, ack->len, (unsigned long long)ack->offset); |
++ackid; |
++ackid; |
xfree(ack); |
xfree(ack); |
} |
} |