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)