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;