comparison libpurple/protocols/msn/msg.c @ 30785:64e2fe53acc2

Use slp parse code that was just moved to SlpMessage since it belongs there instead of the one in MsnMessage (the code was just moved). Also, a little bit more drop of MsnMessage header and footer (this is in the same commit because It's not possible to split changes in the same file).
author masca@cpw.pidgin.im
date Tue, 08 Jun 2010 21:32:12 +0000
parents fbb44d46c7a6
children 155db1253acf
comparison
equal deleted inserted replaced
30784:320c0852b5cc 30785:64e2fe53acc2
26 #include "debug.h" 26 #include "debug.h"
27 27
28 #include "msn.h" 28 #include "msn.h"
29 #include "msg.h" 29 #include "msg.h"
30 #include "msnutils.h" 30 #include "msnutils.h"
31 #include "p2p.h" 31 #include "slpmsg.h"
32 32
33 MsnMessage * 33 MsnMessage *
34 msn_message_new(MsnMsgType type) 34 msn_message_new(MsnMsgType type)
35 { 35 {
36 MsnMessage *msg; 36 MsnMessage *msg;
159 msn_message_set_bin_data(msg, "ID: 1\r\n", 7); 159 msn_message_set_bin_data(msg, "ID: 1\r\n", 7);
160 160
161 return msg; 161 return msg;
162 } 162 }
163 163
164 #if 0
164 void 165 void
165 msn_message_parse_slp_body(MsnMessage *msg, const char *body, size_t len) 166 msn_message_parse_slp_body(MsnMessage *msg, const char *body, size_t len)
166 { 167 {
167 MsnP2PHeader *header; 168 MsnP2PHeader *header;
168 MsnP2PHeader wire; 169 MsnP2PHeader wire;
195 memcpy(msg->body, tmp, msg->body_len); 196 memcpy(msg->body, tmp, msg->body_len);
196 msg->body[msg->body_len] = '\0'; 197 msg->body[msg->body_len] = '\0';
197 tmp += body_len; 198 tmp += body_len;
198 } 199 }
199 } 200 }
201 #endif
200 202
201 void 203 void
202 msn_message_parse_payload(MsnMessage *msg, 204 msn_message_parse_payload(MsnMessage *msg,
203 const char *payload, size_t payload_len, 205 const char *payload, size_t payload_len,
204 const char *line_dem,const char *body_dem) 206 const char *line_dem,const char *body_dem)
292 294
293 /* Now we *should* be at the body. */ 295 /* Now we *should* be at the body. */
294 content_type = msn_message_get_content_type(msg); 296 content_type = msn_message_get_content_type(msg);
295 297
296 if (content_type != NULL && 298 if (content_type != NULL &&
297 !strcmp(content_type, "application/x-msnmsgrp2p")) 299 !strcmp(content_type, "application/x-msnmsgrp2p")) {
300 msg->msnslp_message = TRUE;
301 msg->slpmsg = msn_slpmsg_new_from_data(tmp, payload_len - (tmp - tmp_base));
302 }
303
304 #if 0
298 { 305 {
299 MsnP2PHeader *header; 306 MsnP2PHeader *header;
300 MsnP2PHeader wire; 307 MsnP2PHeader wire;
301 MsnP2PFooter footer; 308 MsnP2PFooter footer;
302 int body_len; 309 int body_len;
337 msg->msnslp_footer.value = GUINT32_FROM_BE(footer.value); 344 msg->msnslp_footer.value = GUINT32_FROM_BE(footer.value);
338 } 345 }
339 } 346 }
340 else 347 else
341 { 348 {
349 #endif
342 if (payload_len - (tmp - tmp_base) > 0) { 350 if (payload_len - (tmp - tmp_base) > 0) {
343 msg->body_len = payload_len - (tmp - tmp_base); 351 msg->body_len = payload_len - (tmp - tmp_base);
344 g_free(msg->body); 352 g_free(msg->body);
345 msg->body = g_malloc(msg->body_len + 1); 353 msg->body = g_malloc(msg->body_len + 1);
346 memcpy(msg->body, tmp, msg->body_len); 354 memcpy(msg->body, tmp, msg->body_len);
353 "ISO-8859-1", NULL, &msg->body_len, NULL); 361 "ISO-8859-1", NULL, &msg->body_len, NULL);
354 g_free(msg->body); 362 g_free(msg->body);
355 msg->body = body; 363 msg->body = body;
356 msg->charset = g_strdup("UTF-8"); 364 msg->charset = g_strdup("UTF-8");
357 } 365 }
358 } 366 #if 0
367 }
368 #endif
359 369
360 g_free(tmp_base); 370 g_free(tmp_base);
361 } 371 }
362 372
363 MsnMessage * 373 MsnMessage *
377 } 387 }
378 388
379 char * 389 char *
380 msn_message_gen_slp_body(MsnMessage *msg, size_t *ret_size) 390 msn_message_gen_slp_body(MsnMessage *msg, size_t *ret_size)
381 { 391 {
392 #if 0
382 MsnP2PHeader *header; 393 MsnP2PHeader *header;
383 394
384 char *tmp, *base; 395 char *tmp, *base;
385 const void *body; 396 const void *body;
386 size_t len, body_len; 397 size_t len, body_len;
408 419
409 if (ret_size != NULL) 420 if (ret_size != NULL)
410 *ret_size = tmp - base; 421 *ret_size = tmp - base;
411 422
412 return base; 423 return base;
424 #endif
425 char *tmp;
426
427 tmp = msn_slpmsg_serialize(msg->slpmsg, ret_size);
428 return tmp;
413 } 429 }
414 430
415 char * 431 char *
416 msn_message_gen_payload(MsnMessage *msg, size_t *ret_size) 432 msn_message_gen_payload(MsnMessage *msg, size_t *ret_size)
417 { 433 {
462 478
463 body = msn_message_get_bin_data(msg, &body_len); 479 body = msn_message_get_bin_data(msg, &body_len);
464 480
465 if (msg->msnslp_message) 481 if (msg->msnslp_message)
466 { 482 {
483 size_t siz;
484 char *body;
485
486 body = msn_slpmsg_serialize(msg->slpmsg, &siz);
487
488 memcpy(n, body, siz);
489 n += siz;
490 #if 0
467 MsnP2PHeader *header; 491 MsnP2PHeader *header;
468 MsnP2PFooter footer; 492 MsnP2PFooter footer;
469 493
470 header = msn_p2p_header_to_wire(&(msg->msnslp_header)); 494 header = msn_p2p_header_to_wire(&(msg->msnslp_header));
471 495
483 507
484 footer.value = GUINT32_TO_BE(msg->msnslp_footer.value); 508 footer.value = GUINT32_TO_BE(msg->msnslp_footer.value);
485 509
486 memcpy(n, &footer, 4); 510 memcpy(n, &footer, 4);
487 n += 4; 511 n += 4;
512 #endif
488 } 513 }
489 else 514 else
490 { 515 {
491 if (body != NULL) 516 if (body != NULL)
492 { 517 {
742 767
743 body = msn_message_get_bin_data(msg, &body_len); 768 body = msn_message_get_bin_data(msg, &body_len);
744 769
745 if (msg->msnslp_message) 770 if (msg->msnslp_message)
746 { 771 {
747 g_string_append_printf(str, "Session ID: %u\r\n", msg->msnslp_header.session_id); 772 g_string_append_printf(str, "Session ID: %u\r\n", msg->slpmsg->header->session_id);
748 g_string_append_printf(str, "ID: %u\r\n", msg->msnslp_header.id); 773 g_string_append_printf(str, "ID: %u\r\n", msg->slpmsg->header->id);
749 g_string_append_printf(str, "Offset: %" G_GUINT64_FORMAT "\r\n", msg->msnslp_header.offset); 774 g_string_append_printf(str, "Offset: %" G_GUINT64_FORMAT "\r\n", msg->slpmsg->header->offset);
750 g_string_append_printf(str, "Total size: %" G_GUINT64_FORMAT "\r\n", msg->msnslp_header.total_size); 775 g_string_append_printf(str, "Total size: %" G_GUINT64_FORMAT "\r\n", msg->slpmsg->header->total_size);
751 g_string_append_printf(str, "Length: %u\r\n", msg->msnslp_header.length); 776 g_string_append_printf(str, "Length: %u\r\n", msg->slpmsg->header->length);
752 g_string_append_printf(str, "Flags: 0x%x\r\n", msg->msnslp_header.flags); 777 g_string_append_printf(str, "Flags: 0x%x\r\n", msg->slpmsg->header->flags);
753 g_string_append_printf(str, "ACK ID: %u\r\n", msg->msnslp_header.ack_id); 778 g_string_append_printf(str, "ACK ID: %u\r\n", msg->slpmsg->header->ack_id);
754 g_string_append_printf(str, "SUB ID: %u\r\n", msg->msnslp_header.ack_sub_id); 779 g_string_append_printf(str, "SUB ID: %u\r\n", msg->slpmsg->header->ack_sub_id);
755 g_string_append_printf(str, "ACK Size: %" G_GUINT64_FORMAT "\r\n", msg->msnslp_header.ack_size); 780 g_string_append_printf(str, "ACK Size: %" G_GUINT64_FORMAT "\r\n", msg->slpmsg->header->ack_size);
756 781
757 if (purple_debug_is_verbose() && body != NULL) 782 if (purple_debug_is_verbose() && body != NULL)
758 { 783 {
759 if (text_body) 784 if (text_body)
760 { 785 {
777 } 802 }
778 g_string_append(str, "\r\n"); 803 g_string_append(str, "\r\n");
779 } 804 }
780 } 805 }
781 806
782 g_string_append_printf(str, "Footer: %u\r\n", msg->msnslp_footer.value); 807 g_string_append_printf(str, "Footer: %u\r\n", msg->slpmsg->footer->value);
783 } 808 }
784 else 809 else
785 { 810 {
786 if (body != NULL) 811 if (body != NULL)
787 { 812 {