set length properly
authorBrendan O'Dea <bod@optus.net>
Tue, 10 May 2005 09:47:23 +0000 (09:47 +0000)
committerBrendan O'Dea <bod@optus.net>
Tue, 10 May 2005 09:47:23 +0000 (09:47 +0000)
ppp.c

diff --git a/ppp.c b/ppp.c
index 40d33e3..6888328 100644 (file)
--- a/ppp.c
+++ b/ppp.c
@@ -1,6 +1,6 @@
 // L2TPNS PPP Stuff
 
-char const *cvs_id_ppp = "$Id: ppp.c,v 1.55 2005-05-10 09:35:27 bodea Exp $";
+char const *cvs_id_ppp = "$Id: ppp.c,v 1.56 2005-05-10 09:47:23 bodea Exp $";
 
 #include <stdio.h>
 #include <string.h>
@@ -405,7 +405,6 @@ void processlcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l)
                                        *q++ = 6;
                                        memset(q, 0, 4); // asyncmap 0
                                        q += 4;
-                                       *((uint16_t *) (response + 2)) = htons(l = q - response); // LCP header length
                                        break;
 
                                case 3: // Authentication-Protocol
@@ -466,7 +465,6 @@ void processlcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l)
                                                        q = a;
                                                }
 
-                                               *((uint16_t *) (response + 2)) = htons(l = q - response); // LCP header length
                                                break;
                                        }
                                        break;
@@ -498,18 +496,22 @@ void processlcp(tunnelidt t, sessionidt s, uint8_t *p, uint16_t l)
 
                                        memcpy(q, o, length);
                                        q += length;
-                                       *((uint16_t *) (response + 2)) = htons(l = q - response); // LCP header length
                        }
                        x -= length;
                        o += length;
                }
 
-               if (!response)
+               if (response)
                {
-                       // Send back a ConfigAck
-                       q = response = makeppp(b, sizeof(b), p, l, t, s, PPPLCP);
-                       if (!q) return;
-                       *q = ConfigAck;
+                       l = q - response; // LCP packet length
+                       *((uint16_t *) (response + 2)) = htons(l); // update header
+               }
+               else
+               {
+                       // Send packet back as ConfigAck
+                       response = makeppp(b, sizeof(b), p, l, t, s, PPPLCP);
+                       if (!response) return;
+                       *response = ConfigAck;
                }
 
                LOG(3, s, t, "Sending %s\n", ppp_lcp_type(*response));