version 1.33, 2002/02/13 00:28:13 |
version 1.34, 2002/06/06 17:12:44 |
|
|
process(void) |
process(void) |
{ |
{ |
u_int msg_len; |
u_int msg_len; |
|
u_int buf_len; |
|
u_int consumed; |
u_int type; |
u_int type; |
u_char *cp; |
u_char *cp; |
|
|
if (buffer_len(&iqueue) < 5) |
buf_len = buffer_len(&iqueue); |
|
if (buf_len < 5) |
return; /* Incomplete message. */ |
return; /* Incomplete message. */ |
cp = buffer_ptr(&iqueue); |
cp = buffer_ptr(&iqueue); |
msg_len = GET_32BIT(cp); |
msg_len = GET_32BIT(cp); |
|
|
error("bad message "); |
error("bad message "); |
exit(11); |
exit(11); |
} |
} |
if (buffer_len(&iqueue) < msg_len + 4) |
if (buf_len < msg_len + 4) |
return; |
return; |
buffer_consume(&iqueue, 4); |
buffer_consume(&iqueue, 4); |
|
buf_len -= 4; |
type = buffer_get_char(&iqueue); |
type = buffer_get_char(&iqueue); |
switch (type) { |
switch (type) { |
case SSH2_FXP_INIT: |
case SSH2_FXP_INIT: |
|
|
error("Unknown message %d", type); |
error("Unknown message %d", type); |
break; |
break; |
} |
} |
|
/* discard the remaining bytes from the current packet */ |
|
if (buf_len < buffer_len(&iqueue)) |
|
fatal("iqueue grows"); |
|
consumed = buf_len - buffer_len(&iqueue); |
|
if (msg_len < consumed) |
|
fatal("msg_len %d < consumed %d", msg_len, consumed); |
|
if (msg_len > consumed) |
|
buffer_consume(&iqueue, msg_len - consumed); |
} |
} |
|
|
int |
int |