Previous fix fixed. Meta protocol should be really flawless from now on!
This commit is contained in:
parent
989d7edc07
commit
aeccaca829
3 changed files with 13 additions and 8 deletions
12
src/net.c
12
src/net.c
|
@ -956,19 +956,19 @@ cp
|
|||
|
||||
for(;;)
|
||||
{
|
||||
p=0;
|
||||
cl->reqlen = 0;
|
||||
|
||||
for(i = oldlen; i < cl->buflen; i++)
|
||||
{
|
||||
if(cl->buffer[i] == '\n')
|
||||
{
|
||||
p = i + 1;
|
||||
cl->buffer[p] = 0; /* add end-of-string so we can use sscanf */
|
||||
cl->buffer[i] = 0; /* replace end-of-line by end-of-string so we can use sscanf */
|
||||
cl->reqlen = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(p)
|
||||
if(cl->reqlen)
|
||||
{
|
||||
if(sscanf(cl->buffer, "%d", &request) == 1)
|
||||
{
|
||||
|
@ -988,8 +988,8 @@ cp
|
|||
syslog(LOG_ERR, "Bogus data received: %s", cl->buffer);
|
||||
}
|
||||
|
||||
cl->buflen -= p;
|
||||
memmove(cl->buffer, cl->buffer + p, cl->buflen);
|
||||
cl->buflen -= cl->reqlen;
|
||||
memmove(cl->buffer, cl->buffer + cl->reqlen, cl->buflen);
|
||||
oldlen = 0;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -114,6 +114,7 @@ typedef struct conn_list_t {
|
|||
enc_key_t *key; /* encrypt with this key */
|
||||
char buffer[MAXBUFSIZE]; /* metadata input 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 *next; /* after all, it's a list of connections */
|
||||
} conn_list_t;
|
||||
|
|
|
@ -616,7 +616,9 @@ cp
|
|||
syslog(LOG_DEBUG, "Forwarding request for public key to " IP_ADDR_S,
|
||||
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__);
|
||||
return -1;
|
||||
|
@ -711,7 +713,9 @@ cp
|
|||
syslog(LOG_DEBUG, "Forwarding public key to " IP_ADDR_S,
|
||||
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__);
|
||||
return -1;
|
||||
|
|
Loading…
Reference in a new issue