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)
{
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
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;
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;
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;