# HG changeset patch # User Matti Hamalainen # Date 1337970657 -10800 # Node ID 3be600124da871d01dc5232b9a5b7e197abffa92 # Parent 8e9690a3f973687b428406fb656f4153babfc544 Fix packet shifting. diff -r 8e9690a3f973 -r 3be600124da8 network.c --- 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