version 1.6, 2003/06/28 16:23:06 |
version 1.6.2.1, 2004/02/28 03:51:33 |
|
|
#include "atomicio.h" |
#include "atomicio.h" |
#include "msg.h" |
#include "msg.h" |
|
|
void |
int |
ssh_msg_send(int fd, u_char type, Buffer *m) |
ssh_msg_send(int fd, u_char type, Buffer *m) |
{ |
{ |
u_char buf[5]; |
u_char buf[5]; |
|
|
|
|
PUT_32BIT(buf, mlen + 1); |
PUT_32BIT(buf, mlen + 1); |
buf[4] = type; /* 1st byte of payload is mesg-type */ |
buf[4] = type; /* 1st byte of payload is mesg-type */ |
if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) |
if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) { |
fatal("ssh_msg_send: write"); |
error("ssh_msg_send: write"); |
if (atomicio(vwrite, fd, buffer_ptr(m), mlen) != mlen) |
return (-1); |
fatal("ssh_msg_send: write"); |
} |
|
if (atomicio(vwrite, fd, buffer_ptr(m), mlen) != mlen) { |
|
error("ssh_msg_send: write"); |
|
return (-1); |
|
} |
|
return (0); |
} |
} |
|
|
int |
int |
|
|
|
|
res = atomicio(read, fd, buf, sizeof(buf)); |
res = atomicio(read, fd, buf, sizeof(buf)); |
if (res != sizeof(buf)) { |
if (res != sizeof(buf)) { |
if (res == 0) |
if (res != 0) |
return -1; |
error("ssh_msg_recv: read: header %ld", (long)res); |
fatal("ssh_msg_recv: read: header %ld", (long)res); |
return (-1); |
} |
} |
msg_len = GET_32BIT(buf); |
msg_len = GET_32BIT(buf); |
if (msg_len > 256 * 1024) |
if (msg_len > 256 * 1024) { |
fatal("ssh_msg_recv: read: bad msg_len %u", msg_len); |
error("ssh_msg_recv: read: bad msg_len %u", msg_len); |
|
return (-1); |
|
} |
buffer_clear(m); |
buffer_clear(m); |
buffer_append_space(m, msg_len); |
buffer_append_space(m, msg_len); |
res = atomicio(read, fd, buffer_ptr(m), msg_len); |
res = atomicio(read, fd, buffer_ptr(m), msg_len); |
if (res != msg_len) |
if (res != msg_len) { |
fatal("ssh_msg_recv: read: %ld != msg_len", (long)res); |
error("ssh_msg_recv: read: %ld != msg_len", (long)res); |
return 0; |
return (-1); |
|
} |
|
return (0); |
} |
} |