# HG changeset patch # User Matti Hamalainen # Date 1337833648 -10800 # Node ID ccee77fe4525d13938f46ad3034031049f6d2125 # Parent 8bb69e749d971cb09d40b7dfb7ce8bb68128280a Fix protocol message parsing. diff -r 8bb69e749d97 -r ccee77fe4525 main.c --- a/main.c Thu May 24 07:02:30 2012 +0300 +++ b/main.c Thu May 24 07:27:28 2012 +0300 @@ -640,80 +640,79 @@ int nnproto_parse_user(nn_conn_t *conn) { - static const char *msg = ""; - char *p = conn->ptr; BOOL isMine, isIgnored = FALSE; - char *s, *t, *userName; + char *name, *msg, *t; /* Find start of the message */ - s = strstr(p, msg); - if (!s) return 1; - *s = 0; - s += strlen(msg); + name = conn->ptr; + t = nn_conn_buf_strstr(conn, ""); + if (!t) return 1; + *t = 0; + msg = conn->ptr; /* Find end of the message */ - t = strstr(s, ""); + t = nn_conn_buf_strstr(conn, ""); if (!t) return 3; *t = 0; /* Decode message string */ - s = nn_decode_str1(s); - if (!s) return -1; + msg = nn_decode_str1(msg); + if (!msg) return -1; /* Decode username */ - userName = nn_decode_str1(p); - if (!userName) + name = nn_decode_str1(name); + if (!name) { - th_free(s); + th_free(msg); return -2; } /* Check if the username is on our ignore list and * that it is not our OWN username! */ - isMine = strcmp(userName, optUserName) == 0; - isIgnored = setIgnoreMode && !isMine && checkIgnoreList(userName); + isMine = strcmp(name, optUserName) == 0; + isIgnored = setIgnoreMode && !isMine && checkIgnoreList(name); /* Is it a special control message? */ - if (*s == '/') + if (*msg == '/') { /* Ignore room join/leave messages */ - if (!optDebug && (strstr(s, "left the room") || strstr(s, "joined the room from"))) + if (!optDebug && (strstr(msg, "left the room") || strstr(msg, "joined the room from"))) goto done; - t = nn_strip_tags(s + 1); + t = nn_strip_tags(msg + 1); if (!strncmp(t, "BPRV ", 5)) { - char *name, *tmp, *msg, *h; + char *in_name, *tmp, *in_msg, *h; nn_window_t *win; h = nn_decode_str2(t + 1); if (!strncmp(t, "BPRV from ", 10)) { - name = nn_decode_str2(t + 10); + in_name = nn_decode_str2(t + 10); isMine = FALSE; } else { - name = nn_decode_str2(t + 8); + in_name = nn_decode_str2(t + 8); isMine = TRUE; } - for (tmp = name; *tmp && *tmp != ':'; tmp++); + for (tmp = in_name; *tmp && *tmp != ':'; tmp++); if (tmp[0] != 0 && tmp[1] == ' ') - msg = tmp + 2; + in_msg = tmp + 2; else - msg = ""; + in_msg = ""; *tmp = 0; - isIgnored = setIgnoreMode && checkIgnoreList(name); - win = findWindow(name); + isIgnored = setIgnoreMode && checkIgnoreList(in_name); + win = findWindow(in_name); if (win != NULL) { printMsgF(win, isIgnored ? 0 : LOG_WINDOW, "½5½<½%d½%s½5½>½0½ %s\n", - isMine ? 14 : 15, isMine ? optUserName : name, msg); + isMine ? 14 : 15, isMine ? optUserName : in_name, in_msg); printMsgF(NULL, LOG_FILE, "½11½%s½0½\n", h); } @@ -722,7 +721,7 @@ printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE), "½11½%s½0½\n", h); } - th_free(name); + th_free(in_name); th_free(h); } else @@ -739,17 +738,17 @@ { /* It's a normal message */ char *h; - t = nn_strip_tags(s); + t = nn_strip_tags(msg); h = nn_decode_str2(t); printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE), - "½5½<½%d½%s½5½>½0½ %s\n", isMine ? 14 : 15, userName, h); + "½5½<½%d½%s½5½>½0½ %s\n", isMine ? 14 : 15, name, h); th_free(h); th_free(t); } done: - th_free(s); - th_free(userName); + th_free(msg); + th_free(name); return 0; }