comparison src/protocols/msn/msg.c @ 6800:8f228a7d5076

[gaim-migrate @ 7340] Added what I have of MSNSLP in my tree. It's broken, and therefore disabled, but I need to get this out so I can do other stuff too, and have something to revert back to if I break something :) committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Wed, 10 Sep 2003 00:24:48 +0000
parents 8efafdc38718
children 2adf21e70601
comparison
equal deleted inserted replaced
6799:fac483a95584 6800:8f228a7d5076
67 67
68 return msg; 68 return msg;
69 } 69 }
70 70
71 MsnMessage * 71 MsnMessage *
72 msn_message_new_msnslp(void)
73 {
74 MsnMessage *msg;
75
76 msg = msn_message_new();
77
78 msn_message_set_attr(msg, "User-Agent", NULL);
79
80 msg->msnslp_message = TRUE;
81 msg->size += 52;
82
83 return msg;
84 }
85
86 MsnMessage *
72 msn_message_new_from_str(MsnSession *session, const char *str) 87 msn_message_new_from_str(MsnSession *session, const char *str)
73 { 88 {
74 MsnMessage *msg; 89 MsnMessage *msg;
75 char *tmp_base, *msg_base, *tmp, *field1, *field2, *c; 90 char *tmp_base, *msg_base, *tmp, *field1, *field2, *c;
76 91
355 char *c; 370 char *c;
356 char blank[4]; 371 char blank[4];
357 long session_id, id, offset, total_size, length, flags; 372 long session_id, id, offset, total_size, length, flags;
358 long ack_session_id, ack_unique_id, ack_length; 373 long ack_session_id, ack_unique_id, ack_length;
359 374
360 memcpy(blank, 0, 4); 375 blank[0] = blank[1] = blank[2] = blank[3] = 0;
376
377 g_strlcat(str, "\r\n", 3);
361 378
362 c = str + strlen(str); 379 c = str + strlen(str);
363 380
364 session_id = htonl(msg->msnslp_header.session_id); 381 session_id = htonl(msg->msnslp_header.session_id);
365 id = htonl(msg->msnslp_header.id); 382 id = htonl(msg->msnslp_header.id);
386 403
387 strncpy(c, msn_message_get_body(msg), len); 404 strncpy(c, msn_message_get_body(msg), len);
388 405
389 c += strlen(msn_message_get_body(msg)); 406 c += strlen(msn_message_get_body(msg));
390 407
391 memcpy(c, blank, 1); c++; 408 if (strlen(msn_message_get_body(msg)) > 0)
409 *c++ = '\0';
410
392 memcpy(c, &msg->msnslp_footer.app_id, 4); c += 4; 411 memcpy(c, &msg->msnslp_footer.app_id, 4); c += 4;
412 *c = '\0';
413
414 gaim_debug_misc("msn", "cur size = %d\n", (c - str));
415 gaim_debug_misc("msn", "msg->size = %d\n", msg->size);
416
417 if (msg->size != (c - str))
418 {
419 gaim_debug(GAIM_DEBUG_ERROR, "msn",
420 "Outgoing message size (%d) and string length (%d) "
421 "do not match!\n", msg->size, (c - str));
422 }
393 } 423 }
394 else 424 else
395 { 425 {
396 g_snprintf(buf, sizeof(buf), "\r\n%s", msn_message_get_body(msg)); 426 g_snprintf(buf, sizeof(buf), "\r\n%s", msn_message_get_body(msg));
397 427
398 g_strlcat(str, buf, len); 428 g_strlcat(str, buf, len);
399 } 429
400 430 if (msg->size != strlen(msg_start)) {
401 if (msg->size != strlen(msg_start)) { 431 gaim_debug(GAIM_DEBUG_ERROR, "msn",
402 gaim_debug(GAIM_DEBUG_ERROR, "msn", 432 "Outgoing message size (%d) and string length (%d) "
403 "Outgoing message size (%d) and string length (%d) " 433 "do not match!\n", msg->size, strlen(msg_start));
404 "do not match!\n", msg->size, strlen(msg_start)); 434 }
405 } 435 }
406 436
407 return str; 437 return str;
408 } 438 }
409 439
428 { 458 {
429 g_return_if_fail(msg != NULL); 459 g_return_if_fail(msg != NULL);
430 g_return_if_fail(user != NULL); 460 g_return_if_fail(user != NULL);
431 461
432 msg->sender = user; 462 msg->sender = user;
433 463
434 msn_user_ref(msg->sender); 464 msn_user_ref(msg->sender);
435 } 465 }
436 466
437 MsnUser * 467 MsnUser *
438 msn_message_get_sender(const MsnMessage *msg) 468 msn_message_get_sender(const MsnMessage *msg)
447 { 477 {
448 g_return_if_fail(msg != NULL); 478 g_return_if_fail(msg != NULL);
449 g_return_if_fail(user != NULL); 479 g_return_if_fail(user != NULL);
450 480
451 msg->receiver = user; 481 msg->receiver = user;
452 482
453 msn_user_ref(msg->receiver); 483 msn_user_ref(msg->receiver);
454 } 484 }
455 485
456 MsnUser * 486 MsnUser *
457 msn_message_get_receiver(const MsnMessage *msg) 487 msn_message_get_receiver(const MsnMessage *msg)
507 g_return_if_fail(body != NULL); 537 g_return_if_fail(body != NULL);
508 538
509 if (msg->body != NULL) { 539 if (msg->body != NULL) {
510 msg->size -= strlen(msg->body); 540 msg->size -= strlen(msg->body);
511 g_free(msg->body); 541 g_free(msg->body);
542
543 if (msg->msnslp_message)
544 msg->size--;
512 } 545 }
513 546
514 for (c = body; *c != '\0'; c++) { 547 for (c = body; *c != '\0'; c++) {
515 if (*c == '\n' && (c == body || *(c - 1) != '\r')) 548 if (*c == '\n' && (c == body || *(c - 1) != '\r'))
516 newline_count++; 549 newline_count++;
530 } 563 }
531 564
532 msg->body = buf; 565 msg->body = buf;
533 566
534 msg->size += new_len; 567 msg->size += new_len;
568
569 if (msg->msnslp_message)
570 msg->size++;
535 } 571 }
536 572
537 const char * 573 const char *
538 msn_message_get_body(const MsnMessage *msg) 574 msn_message_get_body(const MsnMessage *msg)
539 { 575 {