# HG changeset patch # User Matti Hamalainen # Date 1337824723 -10800 # Node ID 07a46ca075abc40c8d59d2898054c839db3a5a85 # Parent 74d97581dc46ed38aa413992cbd58dc79044030f Add some new functions for socket / connection input buffer handling/parsing. diff -r 74d97581dc46 -r 07a46ca075ab libnnchat.c --- a/libnnchat.c Thu May 24 04:58:10 2012 +0300 +++ b/libnnchat.c Thu May 24 04:58:43 2012 +0300 @@ -448,6 +448,61 @@ } +BOOL nn_conn_buf_check(nn_conn_t *conn, size_t n) +{ + return conn && conn->ptr && conn->in_ptr && (conn->ptr + n <= conn->in_ptr); +} + + +BOOL nn_conn_buf_skip(nn_conn_t *conn, size_t n) +{ + if (nn_conn_buf_check(conn, n)) + { + conn->ptr += n; + return TRUE; + } + else + return FALSE; +} + + +int nn_conn_buf_strncmp(nn_conn_t *conn, const char *str, const size_t n) +{ + int ret; + if (!nn_conn_buf_check(conn, n)) + return -1; + + if ((ret = strncmp(conn->ptr, str, n)) == 0) + { + conn->ptr += n; + return 0; + } + else + return ret; +} + + +int nn_conn_buf_strcmp(nn_conn_t *conn, const char *str) +{ + return nn_conn_buf_strncmp(conn, str, strlen(str)); +} + + +char *nn_conn_buf_strstr(nn_conn_t *conn, const char *str) +{ + char *pos; + size_t n = strlen(str); + + if (nn_conn_buf_check(conn, n) && ((pos = strstr(conn->ptr, str)) != NULL)) + { + conn->ptr = pos + n; + return pos; + } + else + return NULL; +} + + #define PUSHCHAR(x) th_vputch(&result, &resSize, &resPos, x) #define PUSHSTR(x) th_vputs(&result, &resSize, &resPos, x) diff -r 74d97581dc46 -r 07a46ca075ab libnnchat.h --- a/libnnchat.h Thu May 24 04:58:10 2012 +0300 +++ b/libnnchat.h Thu May 24 04:58:43 2012 +0300 @@ -124,6 +124,13 @@ BOOL nn_conn_check(nn_conn_t *); +BOOL nn_conn_buf_check(nn_conn_t *conn, size_t n); +BOOL nn_conn_buf_skip(nn_conn_t *conn, size_t n); +int nn_conn_buf_strncmp(nn_conn_t *conn, const char *str, const size_t n); +int nn_conn_buf_strcmp(nn_conn_t *conn, const char *str); +char * nn_conn_buf_strstr(nn_conn_t *conn, const char *str); + + typedef struct _nn_user_t { char *name;