changeset 438:3be600124da8

Fix packet shifting.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 May 2012 21:30:57 +0300
parents 8e9690a3f973
children 70ea06294f3f
files network.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/network.c	Fri May 25 20:49:09 2012 +0300
+++ b/network.c	Fri May 25 21:30:57 2012 +0300
@@ -379,14 +379,20 @@
     if (conn == NULL)
         return -10;
 
-    // Prod the input buffer
-    if (conn->ptr > conn->buf && conn->in_ptr - conn->ptr > 0)
+    // Shift the input buffer
+    if (conn->ptr > conn->buf)
     {
-        size_t delta = conn->ptr - conn->buf;
-        memmove(conn->buf, conn->ptr, delta);
-        conn->ptr = conn->buf;
-        conn->in_ptr -= delta;
-        conn->total_bytes -= delta;
+        size_t left = conn->in_ptr - conn->ptr;
+        if (left > 0)
+        {
+            size_t moved = conn->ptr - conn->buf;
+            memmove(conn->buf, conn->ptr, left);
+            conn->ptr = conn->buf;
+            conn->in_ptr -= moved;
+            conn->total_bytes -= moved;
+        }
+        else
+            nn_conn_reset(conn);        
     }
 
     // Check for incoming data