Previous fix fixed. Meta protocol should be really flawless from now on!
authorGuus Sliepen <guus@tinc-vpn.org>
Tue, 2 May 2000 09:55:34 +0000 (09:55 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 2 May 2000 09:55:34 +0000 (09:55 +0000)
src/net.c
src/net.h
src/protocol.c

index 69616b4..ebcaeb3 100644 (file)
--- a/src/net.c
+++ b/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
index 27a16cf..dffc7cb 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -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;
index 0a27692..c6b6fec 100644 (file)
@@ -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;