Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/notification.c @ 20477:9a2a4a0c0003
Add the possibility to create an Address Book, useful for newly registered MSN users.
When changing friendly name, send the new one to the SOAP server in the PRP msn command callback, with escaped html entity chars. Fixes #1294 .
Handle EBADF error sometimes received in SOAP server read callback (observed in win32).
Misc cleanups.
author | Carlos Silva <typ0@pidgin.im> |
---|---|
date | Tue, 07 Aug 2007 02:37:58 +0000 |
parents | 416ce8a7ac66 |
children | eb93710aec4d |
comparison
equal
deleted
inserted
replaced
20476:fb52154f3c70 | 20477:9a2a4a0c0003 |
---|---|
672 | 672 |
673 purple_debug_info("::","msn_notification_dump_contact()\n"); | 673 purple_debug_info("::","msn_notification_dump_contact()\n"); |
674 adl_node = xmlnode_new("ml"); | 674 adl_node = xmlnode_new("ml"); |
675 adl_node->child = NULL; | 675 adl_node->child = NULL; |
676 xmlnode_set_attrib(adl_node, "l", "1"); | 676 xmlnode_set_attrib(adl_node, "l", "1"); |
677 | 677 |
678 | |
679 if ( session->userlist->users == NULL ) { | |
680 /* we have no users yet in our contact list */ | |
681 payload = xmlnode_to_str(adl_node,&payload_len); | |
682 | |
683 msn_notification_post_adl(session->notification->cmdproc, | |
684 payload, payload_len); | |
685 | |
686 g_free(payload); | |
687 xmlnode_free(adl_node); | |
688 } | |
689 else { | |
678 /*get the userlist*/ | 690 /*get the userlist*/ |
679 for (l = session->userlist->users; l != NULL; l = l->next){ | 691 for (l = session->userlist->users; l != NULL; l = l->next){ |
680 user = l->data; | 692 user = l->data; |
681 | 693 |
682 /* skip RL & PL during initial dump */ | 694 /* skip RL & PL during initial dump */ |
701 adl_node->child = NULL; | 713 adl_node->child = NULL; |
702 xmlnode_set_attrib(adl_node, "l", "1"); | 714 xmlnode_set_attrib(adl_node, "l", "1"); |
703 } | 715 } |
704 } | 716 } |
705 } | 717 } |
706 | 718 } |
707 | 719 |
708 display_name = purple_connection_get_display_name(session->account->gc); | 720 display_name = purple_connection_get_display_name(session->account->gc); |
709 if (display_name && strcmp(display_name, | 721 if (display_name |
710 purple_account_get_username(session->account))) { | 722 && strcmp(display_name, |
723 purple_account_get_username(session->account))) { | |
711 msn_act_id(session->account->gc, display_name); | 724 msn_act_id(session->account->gc, display_name); |
712 } | 725 } |
713 | 726 |
714 } | 727 } |
715 | 728 |
744 } | 757 } |
745 | 758 |
746 static void | 759 static void |
747 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) | 760 adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
748 { | 761 { |
749 static int initial; | |
750 | |
751 purple_debug_info("MSNP14","Process ADL\n"); | 762 purple_debug_info("MSNP14","Process ADL\n"); |
752 | 763 |
753 if (!initial) | 764 msn_session_finish_login(cmdproc->session); |
754 { | 765 |
755 purple_debug_misc("MSNP14","Initial ADL received\n"); | 766 return; |
756 msn_session_finish_login(cmdproc->session); | |
757 } | |
758 } | 767 } |
759 | 768 |
760 static void | 769 static void |
761 adl_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | 770 adl_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) |
762 { | 771 { |
1134 | 1143 |
1135 static void | 1144 static void |
1136 prp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) | 1145 prp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
1137 { | 1146 { |
1138 MsnSession *session = cmdproc->session; | 1147 MsnSession *session = cmdproc->session; |
1139 const char *type, *value; | 1148 const char *type, *value, *friendlyname; |
1149 gchar *soapname, *soapbody; | |
1150 MsnSoapReq *soap_request; | |
1151 | |
1152 purple_debug_info("MSN Notification", "prp_cmd()\n"); | |
1140 | 1153 |
1141 g_return_if_fail(cmd->param_count >= 3); | 1154 g_return_if_fail(cmd->param_count >= 3); |
1142 | 1155 |
1143 type = cmd->params[2]; | 1156 type = cmd->params[2]; |
1144 | 1157 |
1161 else if (!strcmp(type, "PHM")) | 1174 else if (!strcmp(type, "PHM")) |
1162 msn_user_set_mobile_phone(session->user, NULL); | 1175 msn_user_set_mobile_phone(session->user, NULL); |
1163 else { | 1176 else { |
1164 type = cmd->params[1]; | 1177 type = cmd->params[1]; |
1165 if (!strcmp(type, "MFN")) { | 1178 if (!strcmp(type, "MFN")) { |
1166 | 1179 friendlyname = purple_url_decode(cmd->params[2]); |
1180 soapname = g_markup_escape_text(friendlyname,-1); | |
1181 soapbody = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, soapname); | |
1182 | |
1183 soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, | |
1184 MSN_ADDRESS_BOOK_POST_URL, | |
1185 MSN_CONTACT_UPDATE_SOAP_ACTION, | |
1186 soapbody, | |
1187 NULL, | |
1188 NULL); | |
1189 | |
1190 session->contact->soapconn->read_cb = NULL; | |
1191 | |
1192 msn_soap_post(session->contact->soapconn, | |
1193 soap_request, | |
1194 msn_contact_connect_init); | |
1195 | |
1196 g_free(soapbody); | |
1197 g_free(soapname); | |
1167 purple_connection_set_display_name( | 1198 purple_connection_set_display_name( |
1168 purple_account_get_connection(session->account), | 1199 purple_account_get_connection(session->account), |
1169 purple_url_decode(cmd->params[2])); | 1200 friendlyname); |
1170 } | 1201 } |
1171 } | 1202 } |
1172 } | 1203 } |
1173 } | 1204 } |
1174 | 1205 |