comparison src/protocols/msn/msn.c @ 8646:1e211dde3cae

[gaim-migrate @ 9398] Added a patch by shx to clean up the message-handling code and split the command stuff from it, among a few other things. Also, I fixed a crash in message parsing, which I think may close a couple bug reports. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Tue, 13 Apr 2004 04:08:22 +0000
parents 1d5e31e518fc
children cc2ce209cc46
comparison
equal deleted inserted replaced
8645:47f647dd2ac3 8646:1e211dde3cae
136 } 136 }
137 137
138 static void 138 static void
139 send_to_mobile_cb(MsnMobileData *data, const char *entry) 139 send_to_mobile_cb(MsnMobileData *data, const char *entry)
140 { 140 {
141 MsnSession *session = data->gc->proto_data; 141 MsnSession *session;
142 MsnServConn *servconn = session->notification_conn; 142 MsnServConn *servconn;
143 MsnUser *user;
144 MsnPage *page; 143 MsnPage *page;
145 char *page_str; 144 char *buf;
146 145 char *payload;
147 user = msn_user_new(session, data->passport, NULL); 146 size_t len;
147 size_t payload_len;
148
149 session = data->gc->proto_data;
150 servconn = session->notification_conn;
148 151
149 page = msn_page_new(); 152 page = msn_page_new();
150 msn_page_set_receiver(page, user);
151 msn_page_set_transaction_id(page, ++session->trId);
152 msn_page_set_body(page, entry); 153 msn_page_set_body(page, entry);
153 154 buf = g_strdup_printf("PGD %d %s 1 %d\r\n", ++session->trId,
154 page_str = msn_page_build_string(page); 155 data->passport, page->size);
155 156
156 msn_user_destroy(user); 157 len = strlen(buf);
158
159 payload = msn_page_gen_payload(page, &payload_len);
160
161 if (payload != NULL)
162 {
163 buf = g_realloc(buf, len + payload_len + 1);
164 memcpy(buf + len, payload, payload_len);
165 len += payload_len;
166 buf[len] = 0;
167 }
168
157 msn_page_destroy(page); 169 msn_page_destroy(page);
158 170
159 if (!msn_servconn_write(servconn, page_str, strlen(page_str))) { 171 if (!msn_servconn_write(servconn, buf, len))
160 172 {
161 gaim_connection_error(data->gc, _("Write error")); 173 gaim_connection_error(data->gc, _("Write error"));
162 } 174 }
163 175
164 g_free(page_str); 176 g_free(buf);
165 } 177 }
166 178
167 static void 179 static void
168 close_mobile_page_cb(MsnMobileData *data, const char *entry) 180 close_mobile_page_cb(MsnMobileData *data, const char *entry)
169 { 181 {
539 user = msn_user_new(session, who, NULL); 551 user = msn_user_new(session, who, NULL);
540 552
541 msn_import_html(message, &msgformat, &msgtext); 553 msn_import_html(message, &msgformat, &msgtext);
542 554
543 msg = msn_message_new(); 555 msg = msn_message_new();
544 msn_message_set_receiver(msg, user);
545 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); 556 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
546 msn_message_set_body(msg, msgtext); 557 msn_message_set_body(msg, msgtext);
547 558
548 g_free(msgformat); 559 g_free(msgformat);
549 g_free(msgtext); 560 g_free(msgtext);
609 620
610 user = msn_user_new(session, who, NULL); 621 user = msn_user_new(session, who, NULL);
611 622
612 msg = msn_message_new(); 623 msg = msn_message_new();
613 msn_message_set_content_type(msg, "text/x-msmsgscontrol"); 624 msn_message_set_content_type(msg, "text/x-msmsgscontrol");
614 msn_message_set_receiver(msg, user);
615 msn_message_set_charset(msg, NULL); 625 msn_message_set_charset(msg, NULL);
616 msn_message_set_flag(msg, 'U'); 626 msn_message_set_flag(msg, 'U');
617 msn_message_set_attr(msg, "TypingUser", 627 msn_message_set_attr(msg, "TypingUser",
618 gaim_account_get_username(account)); 628 gaim_account_get_username(account));
619 msn_message_set_attr(msg, "User-Agent", NULL); 629 msn_message_set_attr(msg, "User-Agent", NULL);