Previous fix fixed. Meta protocol should be really flawless from now on!

This commit is contained in:
Guus Sliepen 2000-05-02 09:55:34 +00:00
parent 989d7edc07
commit aeccaca829
3 changed files with 13 additions and 8 deletions

View file

@ -956,19 +956,19 @@ cp
for(;;) for(;;)
{ {
p=0; cl->reqlen = 0;
for(i = oldlen; i < cl->buflen; i++) for(i = oldlen; i < cl->buflen; i++)
{ {
if(cl->buffer[i] == '\n') if(cl->buffer[i] == '\n')
{ {
p = i + 1; cl->buffer[i] = 0; /* replace end-of-line by end-of-string so we can use sscanf */
cl->buffer[p] = 0; /* add end-of-string so we can use sscanf */ cl->reqlen = i + 1;
break; break;
} }
} }
if(p) if(cl->reqlen)
{ {
if(sscanf(cl->buffer, "%d", &request) == 1) if(sscanf(cl->buffer, "%d", &request) == 1)
{ {
@ -988,8 +988,8 @@ cp
syslog(LOG_ERR, "Bogus data received: %s", cl->buffer); syslog(LOG_ERR, "Bogus data received: %s", cl->buffer);
} }
cl->buflen -= p; cl->buflen -= cl->reqlen;
memmove(cl->buffer, cl->buffer + p, cl->buflen); memmove(cl->buffer, cl->buffer + cl->reqlen, cl->buflen);
oldlen = 0; oldlen = 0;
} }
else else

View file

@ -114,6 +114,7 @@ typedef struct conn_list_t {
enc_key_t *key; /* encrypt with this key */ enc_key_t *key; /* encrypt with this key */
char buffer[MAXBUFSIZE]; /* metadata input buffer */ char buffer[MAXBUFSIZE]; /* metadata input buffer */
int buflen; /* bytes read into buffer */ int buflen; /* bytes read into buffer */
int reqlen; /* length of first request in buffer */
struct conn_list_t *nexthop; /* nearest meta-hop in this direction */ struct conn_list_t *nexthop; /* nearest meta-hop in this direction */
struct conn_list_t *next; /* after all, it's a list of connections */ struct conn_list_t *next; /* after all, it's a list of connections */
} conn_list_t; } conn_list_t;

View file

@ -616,7 +616,9 @@ cp
syslog(LOG_DEBUG, "Forwarding request for public key to " IP_ADDR_S, syslog(LOG_DEBUG, "Forwarding request for public key to " IP_ADDR_S,
IP_ADDR_V(fw->nexthop->vpn_ip)); IP_ADDR_V(fw->nexthop->vpn_ip));
if(write(fw->nexthop->meta_socket, cl->buffer, strlen(cl->buffer)) < 0) cl->buffer[cl->reqlen-1] = '\n';
if(write(fw->nexthop->meta_socket, cl->buffer, cl->reqlen) < 0)
{ {
syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__); syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__);
return -1; return -1;
@ -711,7 +713,9 @@ cp
syslog(LOG_DEBUG, "Forwarding public key to " IP_ADDR_S, syslog(LOG_DEBUG, "Forwarding public key to " IP_ADDR_S,
IP_ADDR_V(fw->nexthop->vpn_ip)); IP_ADDR_V(fw->nexthop->vpn_ip));
if((write(fw->nexthop->meta_socket, cl->buffer, strlen(cl->buffer))) < 0) cl->buffer[cl->reqlen-1] = '\n';
if((write(fw->nexthop->meta_socket, cl->buffer, cl->reqlen)) < 0)
{ {
syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__); syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__);
return -1; return -1;