Mercurial > pidgin
comparison 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 |
comparison
equal
deleted
inserted
replaced
5961:fc8ba872a43f | 5962:115769a4c6fc |
---|---|
139 } | 139 } |
140 | 140 |
141 static gboolean | 141 static gboolean |
142 process_multi_line(MsnServConn *servconn, char *buffer) | 142 process_multi_line(MsnServConn *servconn, char *buffer) |
143 { | 143 { |
144 MsnMessage *msg; | |
145 char msg_str[MSN_BUF_LEN]; | 144 char msg_str[MSN_BUF_LEN]; |
146 gboolean result; | 145 gboolean result = TRUE; |
147 | 146 |
148 g_snprintf(msg_str, sizeof(msg_str), | 147 if (servconn->multiline_type == MSN_MULTILINE_MSG) { |
149 "MSG %s %s %d\r\n%s", | 148 MsnMessage *msg; |
150 servconn->msg_passport, servconn->msg_friendly, | 149 |
151 servconn->msg_len, buffer); | 150 g_snprintf(msg_str, sizeof(msg_str), |
152 | 151 "MSG %s %s %d\r\n%s", |
153 gaim_debug(GAIM_DEBUG_MISC, "msn", | 152 servconn->msg_passport, servconn->msg_friendly, |
154 "Message: {%s}\n", buffer); | 153 servconn->multiline_len, buffer); |
155 | 154 |
156 msg = msn_message_new_from_str(servconn->session, msg_str); | 155 gaim_debug(GAIM_DEBUG_MISC, "msn", |
157 | 156 "Message: {%s}\n", buffer); |
158 result = process_message(servconn, msg); | 157 |
159 | 158 msg = msn_message_new_from_str(servconn->session, msg_str); |
160 msn_message_destroy(msg); | 159 |
160 result = process_message(servconn, msg); | |
161 | |
162 msn_message_destroy(msg); | |
163 } | |
164 else if (servconn->multiline_type == MSN_MULTILINE_IPG) { | |
165 g_snprintf(msg_str, sizeof(msg_str), | |
166 "IPG %d\r\n%s", | |
167 servconn->multiline_len, buffer); | |
168 | |
169 gaim_debug(GAIM_DEBUG_MISC, "msn", | |
170 "Incoming Page: {%s}\n", buffer); | |
171 } | |
172 else if (servconn->multiline_type == MSN_MULTILINE_NOT) { | |
173 g_snprintf(msg_str, sizeof(msg_str), | |
174 "NOT %d\r\n%s", | |
175 servconn->multiline_len, buffer); | |
176 | |
177 gaim_debug(GAIM_DEBUG_MISC, "msn", | |
178 "Notification: {%s}\n", buffer); | |
179 } | |
161 | 180 |
162 return result; | 181 return result; |
163 } | 182 } |
164 | 183 |
165 static void | 184 static void |
438 servconn->rxqueue = g_realloc(servconn->rxqueue, len + servconn->rxlen); | 457 servconn->rxqueue = g_realloc(servconn->rxqueue, len + servconn->rxlen); |
439 memcpy(servconn->rxqueue + servconn->rxlen, buf, len); | 458 memcpy(servconn->rxqueue + servconn->rxlen, buf, len); |
440 servconn->rxlen += len; | 459 servconn->rxlen += len; |
441 | 460 |
442 while (cont) { | 461 while (cont) { |
443 if (servconn->parsing_msg) { | 462 if (servconn->parsing_multiline) { |
444 char *msg; | 463 char *msg; |
445 | 464 |
446 if (servconn->rxlen == 0) | 465 if (servconn->rxlen == 0) |
447 break; | 466 break; |
448 | 467 |
449 if (servconn->msg_len > servconn->rxlen) | 468 if (servconn->multiline_len > servconn->rxlen) |
450 break; | 469 break; |
451 | 470 |
452 msg = servconn->rxqueue; | 471 msg = servconn->rxqueue; |
453 servconn->rxlen -= servconn->msg_len; | 472 servconn->rxlen -= servconn->multiline_len; |
454 | 473 |
455 if (servconn->rxlen) { | 474 if (servconn->rxlen) { |
456 servconn->rxqueue = g_memdup(msg + servconn->msg_len, | 475 servconn->rxqueue = g_memdup(msg + servconn->multiline_len, |
457 servconn->rxlen); | 476 servconn->rxlen); |
458 } | 477 } |
459 else { | 478 else { |
460 servconn->rxqueue = NULL; | 479 servconn->rxqueue = NULL; |
461 msg = g_realloc(msg, servconn->msg_len + 1); | 480 msg = g_realloc(msg, servconn->multiline_len + 1); |
462 } | 481 } |
463 | 482 |
464 msg[servconn->msg_len] = '\0'; | 483 msg[servconn->multiline_len] = '\0'; |
465 servconn->parsing_msg = FALSE; | 484 servconn->parsing_multiline = FALSE; |
466 | 485 |
467 process_multi_line(servconn, msg); | 486 process_multi_line(servconn, msg); |
468 | 487 |
469 if (g_list_find(session->servconns, servconn) != NULL) { | 488 if (g_list_find(session->servconns, servconn) != NULL) { |
470 servconn->msg_len = 0; | 489 servconn->multiline_len = 0; |
471 | 490 |
472 if (servconn->msg_passport != NULL) | 491 if (servconn->msg_passport != NULL) |
473 g_free(servconn->msg_passport); | 492 g_free(servconn->msg_passport); |
474 | 493 |
475 if (servconn->msg_friendly != NULL) | 494 if (servconn->msg_friendly != NULL) |