Mercurial > pidgin.yaz
diff src/protocols/msn/servconn.c @ 5962:115769a4c6fc
[gaim-migrate @ 6409]
Guess I found out. It crashes gaim! This fix should work... hahahaha right.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Thu, 26 Jun 2003 10:13:58 +0000 |
parents | 349204c9a709 |
children | 914f2d5da21c |
line wrap: on
line diff
--- a/src/protocols/msn/servconn.c Thu Jun 26 09:39:21 2003 +0000 +++ b/src/protocols/msn/servconn.c Thu Jun 26 10:13:58 2003 +0000 @@ -141,23 +141,42 @@ static gboolean process_multi_line(MsnServConn *servconn, char *buffer) { - MsnMessage *msg; char msg_str[MSN_BUF_LEN]; - gboolean result; + gboolean result = TRUE; + + if (servconn->multiline_type == MSN_MULTILINE_MSG) { + MsnMessage *msg; - g_snprintf(msg_str, sizeof(msg_str), - "MSG %s %s %d\r\n%s", - servconn->msg_passport, servconn->msg_friendly, - servconn->msg_len, buffer); + g_snprintf(msg_str, sizeof(msg_str), + "MSG %s %s %d\r\n%s", + servconn->msg_passport, servconn->msg_friendly, + servconn->multiline_len, buffer); + + gaim_debug(GAIM_DEBUG_MISC, "msn", + "Message: {%s}\n", buffer); + + msg = msn_message_new_from_str(servconn->session, msg_str); + + result = process_message(servconn, msg); - gaim_debug(GAIM_DEBUG_MISC, "msn", - "Message: {%s}\n", buffer); + msn_message_destroy(msg); + } + else if (servconn->multiline_type == MSN_MULTILINE_IPG) { + g_snprintf(msg_str, sizeof(msg_str), + "IPG %d\r\n%s", + servconn->multiline_len, buffer); - msg = msn_message_new_from_str(servconn->session, msg_str); + gaim_debug(GAIM_DEBUG_MISC, "msn", + "Incoming Page: {%s}\n", buffer); + } + else if (servconn->multiline_type == MSN_MULTILINE_NOT) { + g_snprintf(msg_str, sizeof(msg_str), + "NOT %d\r\n%s", + servconn->multiline_len, buffer); - result = process_message(servconn, msg); - - msn_message_destroy(msg); + gaim_debug(GAIM_DEBUG_MISC, "msn", + "Notification: {%s}\n", buffer); + } return result; } @@ -440,34 +459,34 @@ servconn->rxlen += len; while (cont) { - if (servconn->parsing_msg) { + if (servconn->parsing_multiline) { char *msg; if (servconn->rxlen == 0) break; - if (servconn->msg_len > servconn->rxlen) + if (servconn->multiline_len > servconn->rxlen) break; msg = servconn->rxqueue; - servconn->rxlen -= servconn->msg_len; + servconn->rxlen -= servconn->multiline_len; if (servconn->rxlen) { - servconn->rxqueue = g_memdup(msg + servconn->msg_len, + servconn->rxqueue = g_memdup(msg + servconn->multiline_len, servconn->rxlen); } else { servconn->rxqueue = NULL; - msg = g_realloc(msg, servconn->msg_len + 1); + msg = g_realloc(msg, servconn->multiline_len + 1); } - msg[servconn->msg_len] = '\0'; - servconn->parsing_msg = FALSE; + msg[servconn->multiline_len] = '\0'; + servconn->parsing_multiline = FALSE; process_multi_line(servconn, msg); if (g_list_find(session->servconns, servconn) != NULL) { - servconn->msg_len = 0; + servconn->multiline_len = 0; if (servconn->msg_passport != NULL) g_free(servconn->msg_passport);