Mercurial > hg > nnchat
changeset 396:07a46ca075ab
Add some new functions for socket / connection input buffer
handling/parsing.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 24 May 2012 04:58:43 +0300 |
parents | 74d97581dc46 |
children | 932829a556c7 |
files | libnnchat.c libnnchat.h |
diffstat | 2 files changed, 62 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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;