Mercurial > hg > nnchat
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