- Timestamp:
- 2010-08-14T21:33:33Z (14 years ago)
- Branches:
- master
- Children:
- d912fe4
- Parents:
- 6ddb223
- Location:
- protocols/msn
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/msn/msn_util.c
r6ddb223 r4fc95c5 74 74 } 75 75 76 int msn_buddy_list_add( struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname _, const char *group )76 int msn_buddy_list_add( struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname, const char *group ) 77 77 { 78 78 struct msn_data *md = ic->proto_data; … … 131 131 #endif 132 132 133 if( !( bu = bee_user_by_handle( ic->bee, ic, who ) ) || 133 if( !( ( bu = bee_user_by_handle( ic->bee, ic, who ) ) || 134 ( bu = bee_user_new( ic->bee, ic, who, 0 ) ) ) || 134 135 !( bd = bu->data ) || bd->flags & list ) 135 136 return 1; … … 137 138 bd->flags |= list; 138 139 139 msn_soap_memlist_edit( ic, who, TRUE, list ); 140 if( list == MSN_BUDDY_FL ) 141 msn_soap_ab_contact_add( ic, bu ); 142 else 143 msn_soap_memlist_edit( ic, who, TRUE, list ); 140 144 141 145 if( ( adl = adlrml_entry( who, list ) ) ) … … 179 183 bd->flags &= ~list; 180 184 181 msn_soap_memlist_edit( ic, who, FALSE, list ); 185 if( list == MSN_BUDDY_FL ) 186 msn_soap_ab_contact_del( ic, bu ); 187 else 188 msn_soap_memlist_edit( ic, who, FALSE, list ); 182 189 183 190 if( ( adl = adlrml_entry( who, list ) ) ) -
protocols/msn/soap.c
r6ddb223 r4fc95c5 750 750 msn_soap_ab_namechange_free_data ); 751 751 } 752 753 /* Add a contact. */ 754 static int msn_soap_ab_contact_add_build_request( struct msn_soap_req_data *soap_req ) 755 { 756 struct msn_data *md = soap_req->ic->proto_data; 757 bee_user_t *bu = soap_req->data; 758 759 soap_req->url = g_strdup( SOAP_ADDRESSBOOK_URL ); 760 soap_req->action = g_strdup( SOAP_AB_CONTACT_ADD_ACTION ); 761 soap_req->payload = msn_soap_abservice_build( SOAP_AB_CONTACT_ADD_PAYLOAD, 762 "ContactSave", md->tokens[1], bu->handle, bu->fullname ? bu->fullname : bu->handle ); 763 764 return 1; 765 } 766 767 static xt_status msn_soap_ab_contact_add_cid( struct xt_node *node, gpointer data ) 768 { 769 struct msn_soap_req_data *soap_req = data; 770 bee_user_t *bu = soap_req->data; 771 struct msn_buddy_data *bd = bu->data; 772 773 g_free( bd->cid ); 774 bd->cid = g_strdup( node->text ); 775 776 return XT_HANDLED; 777 } 778 779 static const struct xt_handler_entry msn_soap_ab_contact_add_parser[] = { 780 { "guid", "ABContactAddResult", msn_soap_ab_contact_add_cid }, 781 { NULL, NULL, NULL } 782 }; 783 784 static int msn_soap_ab_contact_add_handle_response( struct msn_soap_req_data *soap_req ) 785 { 786 /* TODO: Ack the change? Not sure what the NAKs look like.. */ 787 return MSN_SOAP_OK; 788 } 789 790 static int msn_soap_ab_contact_add_free_data( struct msn_soap_req_data *soap_req ) 791 { 792 return 0; 793 } 794 795 int msn_soap_ab_contact_add( struct im_connection *ic, bee_user_t *bu ) 796 { 797 return msn_soap_start( ic, bu, 798 msn_soap_ab_contact_add_build_request, 799 msn_soap_ab_contact_add_parser, 800 msn_soap_ab_contact_add_handle_response, 801 msn_soap_ab_contact_add_free_data ); 802 } 803 804 /* Remove a contact. */ 805 static int msn_soap_ab_contact_del_build_request( struct msn_soap_req_data *soap_req ) 806 { 807 struct msn_data *md = soap_req->ic->proto_data; 808 bee_user_t *bu = soap_req->data; 809 struct msn_buddy_data *bd = bu->data; 810 811 soap_req->url = g_strdup( SOAP_ADDRESSBOOK_URL ); 812 soap_req->action = g_strdup( SOAP_AB_CONTACT_DEL_ACTION ); 813 soap_req->payload = msn_soap_abservice_build( SOAP_AB_CONTACT_DEL_PAYLOAD, 814 "Timer", md->tokens[1], bd->cid ); 815 816 return 1; 817 } 818 819 static int msn_soap_ab_contact_del_handle_response( struct msn_soap_req_data *soap_req ) 820 { 821 /* TODO: Ack the change? Not sure what the NAKs look like.. */ 822 return MSN_SOAP_OK; 823 } 824 825 static int msn_soap_ab_contact_del_free_data( struct msn_soap_req_data *soap_req ) 826 { 827 return 0; 828 } 829 830 int msn_soap_ab_contact_del( struct im_connection *ic, bee_user_t *bu ) 831 { 832 return msn_soap_start( ic, bu, 833 msn_soap_ab_contact_del_build_request, 834 NULL, 835 msn_soap_ab_contact_del_handle_response, 836 msn_soap_ab_contact_del_free_data ); 837 } -
protocols/msn/soap.h
r6ddb223 r4fc95c5 248 248 "</ABContactUpdate>" 249 249 250 #define SOAP_AB_CONTACT_ADD_ACTION "http://www.msn.com/webservices/AddressBook/ABContactAdd" 251 252 #define SOAP_AB_CONTACT_ADD_PAYLOAD \ 253 "<ABContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">" \ 254 "<abId>00000000-0000-0000-0000-000000000000</abId>" \ 255 "<contacts>" \ 256 "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">" \ 257 "<contactInfo>" \ 258 "<contactType>LivePending</contactType>" \ 259 "<passportName>%s</passportName>" \ 260 "<isMessengerUser>true</isMessengerUser>" \ 261 "<MessengerMemberInfo>" \ 262 "<DisplayName>%s</DisplayName>" \ 263 "</MessengerMemberInfo>" \ 264 "</contactInfo>" \ 265 "</Contact>" \ 266 "</contacts>" \ 267 "<options>" \ 268 "<EnableAllowListManagement>true</EnableAllowListManagement>" \ 269 "</options>" \ 270 "</ABContactAdd>" 271 272 #define SOAP_AB_CONTACT_DEL_ACTION "http://www.msn.com/webservices/AddressBook/ABContactDelete" 273 274 #define SOAP_AB_CONTACT_DEL_PAYLOAD \ 275 "<ABContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">" \ 276 "<abId>00000000-0000-0000-0000-000000000000</abId>" \ 277 "<contacts>" \ 278 "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">" \ 279 "<contactId>%s</contactId>" \ 280 "</Contact>" \ 281 "</contacts>" \ 282 "</ABContactDelete>" 283 250 284 int msn_soap_addressbook_request( struct im_connection *ic ); 251 285 int msn_soap_addressbook_set_display_name( struct im_connection *ic, const char *new ); 252 286 int msn_soap_ab_contact_add( struct im_connection *ic, bee_user_t *bu ); 287 int msn_soap_ab_contact_del( struct im_connection *ic, bee_user_t *bu ); 253 288 254 289 #endif /* __SOAP_H__ */ -
protocols/msn/tables.c
r6ddb223 r4fc95c5 83 83 { 230, "Cannot remove that group", 0 }, 84 84 { 231, "Invalid group", 0 }, 85 { 240, "ADL/RML command with corrupted payload", STATUS_FATAL }, 86 { 241, "ADL/RML command with invalid modification", STATUS_FATAL }, 85 87 { 280, "Switchboard failed", STATUS_SB_FATAL }, 86 88 { 281, "Transfer to switchboard failed", 0 },
Note: See TracChangeset
for help on using the changeset viewer.