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(;;)
|
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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue