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