comparison libpurple/protocols/msn/msn.c @ 20411:ed303260e05a

propagate of im.pidgin.pidgin to im.pidgin.cpw.khc.msnp14
author Ka-Hing Cheung <khc@hxbc.us>
date Sun, 06 May 2007 02:40:23 +0000
parents 680b5910933b 7c0a2ef88018
children 522f618a44b4
comparison
equal deleted inserted replaced
16932:b668951121d8 20411:ed303260e05a
35 #include "state.h" 35 #include "state.h"
36 #include "util.h" 36 #include "util.h"
37 #include "cmds.h" 37 #include "cmds.h"
38 #include "core.h" 38 #include "core.h"
39 #include "prpl.h" 39 #include "prpl.h"
40 #include "msn-utils.h" 40 #include "msnutils.h"
41 #include "version.h" 41 #include "version.h"
42 42
43 #include "switchboard.h" 43 #include "switchboard.h"
44 #include "notification.h" 44 #include "notification.h"
45 #include "sync.h" 45 #include "sync.h"
112 purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL)); 112 purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL));
113 113
114 return PURPLE_CMD_RET_OK; 114 return PURPLE_CMD_RET_OK;
115 } 115 }
116 116
117 static void 117 void
118 msn_act_id(PurpleConnection *gc, const char *entry) 118 msn_act_id(PurpleConnection *gc, const char *entry)
119 { 119 {
120 MsnCmdProc *cmdproc; 120 MsnCmdProc *cmdproc;
121 MsnSession *session; 121 MsnSession *session;
122 PurpleAccount *account; 122 PurpleAccount *account;
123 const char *alias; 123 const char *alias;
124
125 char *soapbody;
126 MsnSoapReq *soap_request;
124 127
125 session = gc->proto_data; 128 session = gc->proto_data;
126 cmdproc = session->notification->cmdproc; 129 cmdproc = session->notification->cmdproc;
127 account = purple_connection_get_account(gc); 130 account = purple_connection_get_account(gc);
128 131
136 purple_notify_error(gc, NULL, 139 purple_notify_error(gc, NULL,
137 _("Your new MSN friendly name is too long."), NULL); 140 _("Your new MSN friendly name is too long."), NULL);
138 return; 141 return;
139 } 142 }
140 143
141 msn_cmdproc_send(cmdproc, "REA", "%s %s", 144 if (*alias == '\0') {
142 purple_account_get_username(account), 145 alias = purple_url_encode(purple_account_get_username(account));
143 alias); 146 }
147
148 msn_cmdproc_send(cmdproc, "PRP", "MFN %s", alias);
149
150 soapbody = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, alias);
151 /*build SOAP and POST it*/
152 soap_request = msn_soap_request_new(MSN_CONTACT_SERVER,
153 MSN_ADDRESS_BOOK_POST_URL,
154 MSN_CONTACT_UPDATE_SOAP_ACTION,
155 soapbody,
156 NULL,
157 NULL);
158
159 session->contact->soapconn->read_cb = NULL;
160 msn_soap_post(session->contact->soapconn,
161 soap_request,
162 msn_contact_connect_init);
163
164 g_free(soapbody);
144 } 165 }
145 166
146 static void 167 static void
147 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry) 168 msn_set_prp(PurpleConnection *gc, const char *type, const char *entry)
148 { 169 {
447 PurpleXfer *xfer; 468 PurpleXfer *xfer;
448 469
449 session = gc->proto_data; 470 session = gc->proto_data;
450 471
451 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); 472 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who);
473
452 if (xfer) 474 if (xfer)
453 { 475 {
454 slplink = msn_session_get_slplink(session, who); 476 slplink = msn_session_get_slplink(session, who);
455 477
456 xfer->data = slplink; 478 xfer->data = slplink;
498 msn_list_icon(PurpleAccount *a, PurpleBuddy *b) 520 msn_list_icon(PurpleAccount *a, PurpleBuddy *b)
499 { 521 {
500 return "msn"; 522 return "msn";
501 } 523 }
502 524
525 /*
526 * Set the User status text
527 * Add the PSM String Using "Name - PSM String" format
528 */
503 static char * 529 static char *
504 msn_status_text(PurpleBuddy *buddy) 530 msn_status_text(PurpleBuddy *buddy)
505 { 531 {
506 PurplePresence *presence; 532 PurplePresence *presence;
507 PurpleStatus *status; 533 PurpleStatus *status;
534 const char *msg, *name, *cmedia;
535 char *psm_str, *tmp2, *text;
508 536
509 presence = purple_buddy_get_presence(buddy); 537 presence = purple_buddy_get_presence(buddy);
510 status = purple_presence_get_active_status(presence); 538 status = purple_presence_get_active_status(presence);
511 539
512 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)) 540 msg = purple_status_get_attr_string(status, "message");
513 { 541 cmedia=purple_status_get_attr_string(status, "currentmedia");
514 return g_strdup(purple_status_get_name(status)); 542
543 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)){
544 name = purple_status_get_name(status);
545 }else{
546 name = NULL;
547 }
548
549 if (cmedia != NULL) {
550 if(name) {
551 tmp2 = g_strdup_printf("%s - %s", name, cmedia);
552 text = g_markup_escape_text(tmp2, -1);
553 } else {
554 text = g_markup_escape_text(cmedia, -1);
555 }
556 return text;
557 } else if (msg != NULL) {
558 tmp2 = purple_markup_strip_html(msg);
559 if (name){
560 psm_str = g_strdup_printf("%s - %s", name, tmp2);
561 g_free(tmp2);
562 }else{
563 psm_str = tmp2;
564 }
565 text = g_markup_escape_text(psm_str, -1);
566 g_free(psm_str);
567 return text;
568 } else {
569 if (!purple_presence_is_available(presence) && !purple_presence_is_idle(presence)){
570 psm_str = g_strdup(purple_status_get_name(status));
571 text = g_markup_escape_text(psm_str, -1);
572 g_free(psm_str);
573 return text;
574 }
515 } 575 }
516 576
517 return NULL; 577 return NULL;
518 } 578 }
519 579
527 user = buddy->proto_data; 587 user = buddy->proto_data;
528 588
529 589
530 if (purple_presence_is_online(presence)) 590 if (purple_presence_is_online(presence))
531 { 591 {
592 const char *psm, *currentmedia;
593 char *tmp;
594
595 psm = purple_status_get_attr_string(status, "message");
596 currentmedia = purple_status_get_attr_string(status, "currentmedia");
597
532 purple_notify_user_info_add_pair(user_info, _("Status"), 598 purple_notify_user_info_add_pair(user_info, _("Status"),
533 (purple_presence_is_idle(presence) ? _("Idle") : purple_status_get_name(status))); 599 (purple_presence_is_idle(presence) ? _("Idle") : purple_status_get_name(status)));
600 if (psm) {
601 tmp = g_markup_escape_text(psm, -1);
602 purple_notify_user_info_add_pair(user_info, _("PSM"), tmp);
603 g_free(tmp);
604 }
605 if (currentmedia) {
606 tmp = g_markup_escape_text(currentmedia, -1);
607 purple_notify_user_info_add_pair(user_info, _("Current media"), tmp);
608 g_free(tmp);
609 }
534 } 610 }
535 611
536 if (full && user) 612 if (full && user)
537 { 613 {
538 purple_notify_user_info_add_pair(user_info, _("Has you"), 614 purple_notify_user_info_add_pair(user_info, _("Has you"),
553 static GList * 629 static GList *
554 msn_status_types(PurpleAccount *account) 630 msn_status_types(PurpleAccount *account)
555 { 631 {
556 PurpleStatusType *status; 632 PurpleStatusType *status;
557 GList *types = NULL; 633 GList *types = NULL;
558 634 #if 0
559 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, 635 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE,
560 NULL, NULL, FALSE, TRUE, FALSE); 636 NULL, NULL, FALSE, TRUE, FALSE);
637 #endif
638 status = purple_status_type_new_with_attrs(
639 PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE,
640 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
641 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
642 NULL);
561 types = g_list_append(types, status); 643 types = g_list_append(types, status);
562 644
563 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, 645 status = purple_status_type_new_with_attrs(
564 NULL, NULL, FALSE, TRUE, FALSE); 646 PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE,
647 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
648 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
649 NULL);
565 types = g_list_append(types, status); 650 types = g_list_append(types, status);
566 651
567 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, 652 status = purple_status_type_new_with_attrs(
568 "brb", _("Be Right Back"), FALSE, TRUE, FALSE); 653 PURPLE_STATUS_AWAY, "brb", _("Be Right Back"), TRUE, TRUE, FALSE,
654 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
655 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
656 NULL);
569 types = g_list_append(types, status); 657 types = g_list_append(types, status);
570 658
571 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, 659 status = purple_status_type_new_with_attrs(
572 "busy", _("Busy"), FALSE, TRUE, FALSE); 660 PURPLE_STATUS_AWAY, "busy", _("Busy"), TRUE, TRUE, FALSE,
661 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
662 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
663 NULL);
573 types = g_list_append(types, status); 664 types = g_list_append(types, status);
574 665 status = purple_status_type_new_with_attrs(
575 status = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, 666 PURPLE_STATUS_AWAY, "phone", _("On the Phone"), TRUE, TRUE, FALSE,
576 "phone", _("On the Phone"), FALSE, TRUE, FALSE); 667 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
668 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
669 NULL);
577 types = g_list_append(types, status); 670 types = g_list_append(types, status);
578 671 status = purple_status_type_new_with_attrs(
579 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, 672 PURPLE_STATUS_AWAY, "lunch", _("Out to Lunch"), TRUE, TRUE, FALSE,
580 "lunch", _("Out to Lunch"), FALSE, TRUE, FALSE); 673 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
674 "currentmedia", _("Current media"), purple_value_new(PURPLE_TYPE_STRING),
675 NULL);
581 types = g_list_append(types, status); 676 types = g_list_append(types, status);
582 677
583 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, 678 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE,
584 NULL, NULL, FALSE, TRUE, FALSE); 679 NULL, NULL, FALSE, TRUE, FALSE);
585 types = g_list_append(types, status); 680 types = g_list_append(types, status);
714 _("SSL support is needed for MSN. Please install a supported " 809 _("SSL support is needed for MSN. Please install a supported "
715 "SSL library.")); 810 "SSL library."));
716 return; 811 return;
717 } 812 }
718 813
719 http_method = purple_account_get_bool(account, "http_method", FALSE); 814 if (purple_account_get_bool(account, "http_method", FALSE))
815 http_method = TRUE;
720 816
721 host = purple_account_get_string(account, "server", MSN_SERVER); 817 host = purple_account_get_string(account, "server", MSN_SERVER);
722 port = purple_account_get_int(account, "port", MSN_PORT); 818 port = purple_account_get_int(account, "port", MSN_PORT);
723 819
724 session = msn_session_new(account); 820 session = msn_session_new(account);
761 PurpleBuddy *buddy = purple_find_buddy(gc->account, who); 857 PurpleBuddy *buddy = purple_find_buddy(gc->account, who);
762 MsnMessage *msg; 858 MsnMessage *msg;
763 char *msgformat; 859 char *msgformat;
764 char *msgtext; 860 char *msgtext;
765 861
862 purple_debug_info("MaYuan","send IM {%s} to %s\n",message,who);
766 account = purple_connection_get_account(gc); 863 account = purple_connection_get_account(gc);
767 864
768 if (buddy) { 865 if (buddy) {
769 PurplePresence *p = purple_buddy_get_presence(buddy); 866 PurplePresence *p = purple_buddy_get_presence(buddy);
770 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { 867 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) {
774 return 1; 871 return 1;
775 } 872 }
776 } 873 }
777 874
778 msn_import_html(message, &msgformat, &msgtext); 875 msn_import_html(message, &msgformat, &msgtext);
779 876 if(msn_user_is_online(account, who)||
780 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564) 877 msn_user_is_yahoo(account, who)){
781 { 878 /*User online,then send Online Instant Message*/
879
880 if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
881 {
882 g_free(msgformat);
883 g_free(msgtext);
884
885 return -E2BIG;
886 }
887
888 msg = msn_message_new_plain(msgtext);
889 msg->remote_user = g_strdup(who);
890 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
891
782 g_free(msgformat); 892 g_free(msgformat);
783 g_free(msgtext); 893 g_free(msgtext);
784 894
785 return -E2BIG; 895 purple_debug_info("MaYuan","prepare to send online Message\n");
786 } 896 if (g_ascii_strcasecmp(who, purple_account_get_username(account)))
787 897 {
788 msg = msn_message_new_plain(msgtext); 898 MsnSession *session;
789 msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat); 899 MsnSwitchBoard *swboard;
790 900
791 g_free(msgformat); 901 session = gc->proto_data;
792 g_free(msgtext); 902 if(msn_user_is_yahoo(account,who)){
793 903 /*we send the online and offline Message to Yahoo User via UBM*/
794 if (g_ascii_strcasecmp(who, purple_account_get_username(account))) 904 purple_debug_info("MaYuan","send to Yahoo User\n");
795 { 905 uum_send_msg(session,msg);
906 }else{
907 purple_debug_info("MaYuan","send via switchboard\n");
908 swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM);
909 msn_switchboard_send_msg(swboard, msg, TRUE);
910 }
911 }
912 else
913 {
914 char *body_str, *body_enc, *pre, *post;
915 const char *format;
916 /*
917 * In MSN, you can't send messages to yourself, so
918 * we'll fake like we received it ;)
919 */
920 body_str = msn_message_to_string(msg);
921 body_enc = g_markup_escape_text(body_str, -1);
922 g_free(body_str);
923
924 format = msn_message_get_attr(msg, "X-MMS-IM-Format");
925 msn_parse_format(format, &pre, &post);
926 body_str = g_strdup_printf("%s%s%s", pre ? pre : "",
927 body_enc ? body_enc : "", post ? post : "");
928 g_free(body_enc);
929 g_free(pre);
930 g_free(post);
931
932 serv_got_typing_stopped(gc, who);
933 serv_got_im(gc, who, body_str, flags, time(NULL));
934 g_free(body_str);
935 }
936
937 msn_message_destroy(msg);
938 }else {
939 /*send Offline Instant Message,only to MSN Passport User*/
796 MsnSession *session; 940 MsnSession *session;
797 MsnSwitchBoard *swboard; 941 MsnOim *oim;
798 942 char *friendname;
943
944 purple_debug_info("MaYuan","prepare to send offline Message\n");
799 session = gc->proto_data; 945 session = gc->proto_data;
800 swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM); 946 /* XXX/khc: hack */
801 947 if (!session->oim)
802 msn_switchboard_send_msg(swboard, msg, TRUE); 948 session->oim = msn_oim_new(session);
803 } 949
804 else 950 oim = session->oim;
805 { 951 friendname = msn_encode_mime(account->username);
806 char *body_str, *body_enc, *pre, *post; 952 msn_oim_prep_send_msg_info(oim, purple_account_get_username(account),
807 const char *format; 953 friendname, who, message);
808 /* 954 msn_oim_send_msg(oim);
809 * In MSN, you can't send messages to yourself, so 955 }
810 * we'll fake like we received it ;)
811 */
812 body_str = msn_message_to_string(msg);
813 body_enc = g_markup_escape_text(body_str, -1);
814 g_free(body_str);
815
816 format = msn_message_get_attr(msg, "X-MMS-IM-Format");
817 msn_parse_format(format, &pre, &post);
818 body_str = g_strdup_printf("%s%s%s", pre ? pre : "",
819 body_enc ? body_enc : "", post ? post : "");
820 g_free(body_enc);
821 g_free(pre);
822 g_free(post);
823
824 serv_got_typing_stopped(gc, who);
825 serv_got_im(gc, who, body_str, flags, time(NULL));
826 g_free(body_str);
827 }
828
829 msn_message_destroy(msg);
830
831 return 1; 956 return 1;
832 } 957 }
833 958
834 static unsigned int 959 static unsigned int
835 msn_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state) 960 msn_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state)
885 PurpleConnection *gc; 1010 PurpleConnection *gc;
886 MsnSession *session; 1011 MsnSession *session;
887 1012
888 gc = purple_account_get_connection(account); 1013 gc = purple_account_get_connection(account);
889 1014
890 if (gc != NULL) 1015 if (gc != NULL){
891 {
892 session = gc->proto_data; 1016 session = gc->proto_data;
893 msn_change_status(session); 1017 msn_change_status(session);
894 } 1018 }
895 } 1019 }
896 1020
963 1087
964 session = gc->proto_data; 1088 session = gc->proto_data;
965 userlist = session->userlist; 1089 userlist = session->userlist;
966 who = msn_normalize(gc->account, buddy->name); 1090 who = msn_normalize(gc->account, buddy->name);
967 1091
1092 purple_debug_info("MaYuan","add user:{%s} to group:{%s}\n",who,group->name);
968 if (!session->logged_in) 1093 if (!session->logged_in)
969 { 1094 {
970 #if 0 1095 #if 0
971 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, 1096 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL,
972 group ? group->name : NULL); 1097 group ? group->name : NULL);
1110 account = purple_connection_get_account(gc); 1235 account = purple_connection_get_account(gc);
1111 session = gc->proto_data; 1236 session = gc->proto_data;
1112 cmdproc = session->notification->cmdproc; 1237 cmdproc = session->notification->cmdproc;
1113 1238
1114 if (account->perm_deny == PURPLE_PRIVACY_ALLOW_ALL || 1239 if (account->perm_deny == PURPLE_PRIVACY_ALLOW_ALL ||
1115 account->perm_deny == PURPLE_PRIVACY_DENY_USERS) 1240 account->perm_deny == PURPLE_PRIVACY_DENY_USERS){
1116 {
1117 msn_cmdproc_send(cmdproc, "BLP", "%s", "AL"); 1241 msn_cmdproc_send(cmdproc, "BLP", "%s", "AL");
1118 } 1242 }else{
1119 else
1120 {
1121 msn_cmdproc_send(cmdproc, "BLP", "%s", "BL"); 1243 msn_cmdproc_send(cmdproc, "BLP", "%s", "BL");
1122 } 1244 }
1123 } 1245 }
1124 1246
1125 static void 1247 static void
1255 msn_rename_group(PurpleConnection *gc, const char *old_name, 1377 msn_rename_group(PurpleConnection *gc, const char *old_name,
1256 PurpleGroup *group, GList *moved_buddies) 1378 PurpleGroup *group, GList *moved_buddies)
1257 { 1379 {
1258 MsnSession *session; 1380 MsnSession *session;
1259 MsnCmdProc *cmdproc; 1381 MsnCmdProc *cmdproc;
1260 int old_gid; 1382 const char *old_gid;
1261 const char *enc_new_group_name; 1383 const char *enc_new_group_name;
1262 1384
1263 session = gc->proto_data; 1385 session = gc->proto_data;
1264 cmdproc = session->notification->cmdproc; 1386 cmdproc = session->notification->cmdproc;
1265 enc_new_group_name = purple_url_encode(group->name); 1387 enc_new_group_name = purple_url_encode(group->name);
1266 1388
1389 purple_debug_info("MaYuan","rename group:old{%s},new{%s}",old_name,enc_new_group_name);
1267 old_gid = msn_userlist_find_group_id(session->userlist, old_name); 1390 old_gid = msn_userlist_find_group_id(session->userlist, old_name);
1268 1391
1269 if (old_gid >= 0) 1392 if (old_gid != NULL){
1270 { 1393 /*find a Group*/
1271 msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid, 1394 msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid,
1272 enc_new_group_name); 1395 enc_new_group_name);
1273 } 1396 }else{
1274 else 1397 /*not found*/
1275 {
1276 msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name); 1398 msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name);
1277 } 1399 }
1278 } 1400 }
1279 1401
1280 static void 1402 static void
1326 static void 1448 static void
1327 msn_remove_group(PurpleConnection *gc, PurpleGroup *group) 1449 msn_remove_group(PurpleConnection *gc, PurpleGroup *group)
1328 { 1450 {
1329 MsnSession *session; 1451 MsnSession *session;
1330 MsnCmdProc *cmdproc; 1452 MsnCmdProc *cmdproc;
1331 int group_id; 1453 const char *group_id;
1332 1454
1333 session = gc->proto_data; 1455 session = gc->proto_data;
1334 cmdproc = session->notification->cmdproc; 1456 cmdproc = session->notification->cmdproc;
1335 1457
1336 if ((group_id = msn_userlist_find_group_id(session->userlist, group->name)) >= 0) 1458 /*we can't delete the default group*/
1337 { 1459 if(!strcmp(group->name,MSN_INDIVIDUALS_GROUP_NAME)||
1338 msn_cmdproc_send(cmdproc, "RMG", "%d", group_id); 1460 !strcmp(group->name,MSN_NON_IM_GROUP_NAME)){
1461 return ;
1462 }
1463 group_id = msn_userlist_find_group_id(session->userlist, group->name);
1464 if (group_id != NULL){
1465 msn_del_group(session,group_id);
1339 } 1466 }
1340 } 1467 }
1341 1468
1342 /** 1469 /**
1343 * Extract info text from info_data and add it to user_info 1470 * Extract info text from info_data and add it to user_info
1348 PurpleBuddy *b; 1475 PurpleBuddy *b;
1349 1476
1350 b = purple_find_buddy(purple_connection_get_account(info_data->gc), 1477 b = purple_find_buddy(purple_connection_get_account(info_data->gc),
1351 info_data->name); 1478 info_data->name);
1352 1479
1353 if (b) 1480 if (b){
1354 {
1355 char *tmp; 1481 char *tmp;
1356 1482
1357 if (b->alias && b->alias[0]) 1483 if (b->alias && b->alias[0]){
1358 {
1359 char *aliastext = g_markup_escape_text(b->alias, -1); 1484 char *aliastext = g_markup_escape_text(b->alias, -1);
1360 purple_notify_user_info_add_pair(user_info, _("Alias"), aliastext); 1485 purple_notify_user_info_add_pair(user_info, _("Alias"), aliastext);
1361 g_free(aliastext); 1486 g_free(aliastext);
1362 } 1487 }
1363 1488
1364 if (b->server_alias) 1489 if (b->server_alias){
1365 {
1366 char *nicktext = g_markup_escape_text(b->server_alias, -1); 1490 char *nicktext = g_markup_escape_text(b->server_alias, -1);
1367 tmp = g_strdup_printf("<font sml=\"msn\">%s</font><br>", nicktext); 1491 tmp = g_strdup_printf("<font sml=\"msn\">%s</font><br>", nicktext);
1368 purple_notify_user_info_add_pair(user_info, _("Nickname"), tmp); 1492 purple_notify_user_info_add_pair(user_info, _("Nickname"), tmp);
1369 g_free(tmp); 1493 g_free(tmp);
1370 g_free(nicktext); 1494 g_free(nicktext);
1384 static char * 1508 static char *
1385 msn_get_photo_url(const char *url_text) 1509 msn_get_photo_url(const char *url_text)
1386 { 1510 {
1387 char *p, *q; 1511 char *p, *q;
1388 1512
1389 if ((p = strstr(url_text, " contactparams:photopreauthurl=\"")) != NULL) 1513 if ((p = strstr(url_text, PHOTO_URL)) != NULL){
1390 { 1514 p += strlen(PHOTO_URL);
1391 p += strlen(" contactparams:photopreauthurl=\""); 1515 }
1392 } 1516 if (p && (strncmp(p, "http://",strlen("http://")) == 0) && ((q = strchr(p, '"')) != NULL))
1393
1394 if (p && (strncmp(p, "http://", 8) == 0) && ((q = strchr(p, '"')) != NULL))
1395 return g_strndup(p, q - p); 1517 return g_strndup(p, q - p);
1396 1518
1397 return NULL; 1519 return NULL;
1398 } 1520 }
1399 1521
1438 #if PHOTO_SUPPORT 1560 #if PHOTO_SUPPORT
1439 char *photo_url_text = NULL; 1561 char *photo_url_text = NULL;
1440 MsnGetInfoStepTwoData *info2_data = NULL; 1562 MsnGetInfoStepTwoData *info2_data = NULL;
1441 #endif 1563 #endif
1442 1564
1443 purple_debug_info("msn", "In msn_got_info\n"); 1565 purple_debug_info("msn", "In msn_got_info,url_text:{%s}\n",url_text);
1444 1566
1445 /* Make sure the connection is still valid */ 1567 /* Make sure the connection is still valid */
1446 if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL) 1568 if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL)
1447 { 1569 {
1448 purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n"); 1570 purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n");
1819 g_free(tmp); 1941 g_free(tmp);
1820 1942
1821 #if PHOTO_SUPPORT 1943 #if PHOTO_SUPPORT
1822 /* Find the URL to the photo; must be before the marshalling [Bug 994207] */ 1944 /* Find the URL to the photo; must be before the marshalling [Bug 994207] */
1823 photo_url_text = msn_get_photo_url(url_text); 1945 photo_url_text = msn_get_photo_url(url_text);
1946 purple_debug_info("Ma Yuan","photo url:{%s}\n",photo_url_text);
1824 1947
1825 /* Marshall the existing state */ 1948 /* Marshall the existing state */
1826 info2_data = g_malloc0(sizeof(MsnGetInfoStepTwoData)); 1949 info2_data = g_malloc0(sizeof(MsnGetInfoStepTwoData));
1827 info2_data->info_data = info_data; 1950 info2_data->info_data = info_data;
1828 info2_data->stripped = stripped; 1951 info2_data->stripped = stripped;
2043 NULL, /* remove_buddies */ 2166 NULL, /* remove_buddies */
2044 msn_add_permit, /* add_permit */ 2167 msn_add_permit, /* add_permit */
2045 msn_add_deny, /* add_deny */ 2168 msn_add_deny, /* add_deny */
2046 msn_rem_permit, /* rem_permit */ 2169 msn_rem_permit, /* rem_permit */
2047 msn_rem_deny, /* rem_deny */ 2170 msn_rem_deny, /* rem_deny */
2048 msn_set_permit_deny, /* set_permit_deny */ 2171 msn_set_permit_deny, /* set_permit_deny */
2049 NULL, /* join_chat */ 2172 NULL, /* join_chat */
2050 NULL, /* reject chat invite */ 2173 NULL, /* reject chat invite */
2051 NULL, /* get_chat_name */ 2174 NULL, /* get_chat_name */
2052 msn_chat_invite, /* chat_invite */ 2175 msn_chat_invite, /* chat_invite */
2053 msn_chat_leave, /* chat_leave */ 2176 msn_chat_leave, /* chat_leave */
2099 2222
2100 "prpl-msn", /**< id */ 2223 "prpl-msn", /**< id */
2101 "MSN", /**< name */ 2224 "MSN", /**< name */
2102 VERSION, /**< version */ 2225 VERSION, /**< version */
2103 /** summary */ 2226 /** summary */
2104 N_("MSN Protocol Plugin"), 2227 N_("Windows Live Messenger Protocol Plugin"),
2105 /** description */ 2228 /** description */
2106 N_("MSN Protocol Plugin"), 2229 N_("Windows Live Messenger Protocol Plugin"),
2107 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ 2230 "MaYuan <mayuan2006@gmail.com>", /**< author */
2108 PURPLE_WEBSITE, /**< homepage */ 2231 PURPLE_WEBSITE, /**< homepage */
2109 2232
2110 msn_load, /**< load */ 2233 msn_load, /**< load */
2111 msn_unload, /**< unload */ 2234 msn_unload, /**< unload */
2112 NULL, /**< destroy */ 2235 NULL, /**< destroy */
2127 init_plugin(PurplePlugin *plugin) 2250 init_plugin(PurplePlugin *plugin)
2128 { 2251 {
2129 PurpleAccountOption *option; 2252 PurpleAccountOption *option;
2130 2253
2131 option = purple_account_option_string_new(_("Server"), "server", 2254 option = purple_account_option_string_new(_("Server"), "server",
2132 MSN_SERVER); 2255 WLM_SERVER);
2133 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, 2256 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
2134 option); 2257 option);
2135 2258
2136 option = purple_account_option_int_new(_("Port"), "port", 1863); 2259 option = purple_account_option_int_new(_("Port"), "port", WLM_PORT);
2137 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, 2260 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
2138 option); 2261 option);
2139 2262
2140 option = purple_account_option_bool_new(_("Use HTTP Method"), 2263 option = purple_account_option_bool_new(_("Use HTTP Method"),
2141 "http_method", FALSE); 2264 "http_method", FALSE);