Mercurial > pidgin
comparison libgaim/protocols/msn/oim.c @ 20391:0b0ecee55091
The second msn.tgz from SF Patch #1621854 from Ka-Hing Cheung.
"new version, fixes some crashes because group_id is char * but in some
places it's set to an int (!). skadotnet, I don't understand why you need
`if (!strcmp(type, "MFN")) {` in so many places, so I didn't include most
of them. I also have different versions of some of your fixes because I
already fixed them.
Group manipulations may still not work, at least it's not crashing :-)"
committer: Richard Laager <rlaager@wiktel.com>
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 15 Apr 2007 02:43:47 +0000 |
parents | d634f88e25d8 |
children | 9ba7dee775e1 |
comparison
equal
deleted
inserted
replaced
20390:d634f88e25d8 | 20391:0b0ecee55091 |
---|---|
28 #include "oim.h" | 28 #include "oim.h" |
29 #include "msn-utils.h" | 29 #include "msn-utils.h" |
30 | 30 |
31 /*Local Function Prototype*/ | 31 /*Local Function Prototype*/ |
32 static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid); | 32 static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid); |
33 void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); | 33 static MsnOimSendReq *msn_oim_new_send_req(const char *from_member, |
34 void msn_oim_send_connect_init(MsnSoapConn *soapconn); | 34 const char *friendname, |
35 void msn_oim_free_send_req(MsnOimSendReq *req); | 35 const char* to_member, |
36 gint send_seq, | |
37 const char *msg); | |
38 static void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); | |
39 static void msn_oim_send_connect_init(MsnSoapConn *soapconn); | |
40 static void msn_oim_free_send_req(MsnOimSendReq *req); | |
41 static void msn_oim_report_to_user(MsnOim *oim, char *msg_str); | |
42 static void msn_oim_get_process(MsnOim *oim, char *oim_msg); | |
43 static char *msn_oim_msg_to_str(MsnOim *oim, const char *body); | |
44 const void msn_oim_send_process(MsnOim *oim, const char *body, int len); | |
36 | 45 |
37 /*new a OIM object*/ | 46 /*new a OIM object*/ |
38 MsnOim * | 47 MsnOim * |
39 msn_oim_new(MsnSession *session) | 48 msn_oim_new(MsnSession *session) |
40 { | 49 { |
71 g_queue_free(oim->send_queue); | 80 g_queue_free(oim->send_queue); |
72 | 81 |
73 g_free(oim); | 82 g_free(oim); |
74 } | 83 } |
75 | 84 |
76 MsnOimSendReq * | 85 static MsnOimSendReq * |
77 msn_oim_new_send_req(char *from_member, | 86 msn_oim_new_send_req(const char *from_member, const char*friendname, |
78 char*friendname,char* to_member, | 87 const char* to_member, gint send_seq, |
79 gint send_seq, | 88 const char *msg) |
80 char *msg) | |
81 { | 89 { |
82 MsnOimSendReq *request; | 90 MsnOimSendReq *request; |
83 | 91 |
84 request = g_new0(MsnOimSendReq, 1); | 92 request = g_new0(MsnOimSendReq, 1); |
85 request->from_member =g_strdup(from_member); | 93 request->from_member =g_strdup(from_member); |
88 request->send_seq = send_seq; | 96 request->send_seq = send_seq; |
89 request->oim_msg = g_strdup(msg); | 97 request->oim_msg = g_strdup(msg); |
90 return request; | 98 return request; |
91 } | 99 } |
92 | 100 |
93 void | 101 static void |
94 msn_oim_free_send_req(MsnOimSendReq *req) | 102 msn_oim_free_send_req(MsnOimSendReq *req) |
95 { | 103 { |
96 g_return_if_fail(req != NULL); | 104 g_return_if_fail(req != NULL); |
97 | 105 |
98 g_free(req->from_member); | 106 g_free(req->from_member); |
105 | 113 |
106 /**************************************** | 114 /**************************************** |
107 * OIM send SOAP request | 115 * OIM send SOAP request |
108 * **************************************/ | 116 * **************************************/ |
109 /*encode the message to OIM Message Format*/ | 117 /*encode the message to OIM Message Format*/ |
110 char * | 118 static char * |
111 msn_oim_msg_to_str(MsnOim *oim,char *body) | 119 msn_oim_msg_to_str(MsnOim *oim, const char *body) |
112 { | 120 { |
113 char *oim_body,*oim_base64; | 121 char *oim_body,*oim_base64; |
114 | 122 |
115 gaim_debug_info("MaYuan","encode OIM Message...\n"); | 123 gaim_debug_info("MaYuan","encode OIM Message...\n"); |
116 oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); | 124 oim_base64 = gaim_base64_encode((const guchar *)body, strlen(body)); |
152 | 160 |
153 /* | 161 /* |
154 * Process the send return SOAP string | 162 * Process the send return SOAP string |
155 * If got SOAP Fault,get the lock key,and resend it. | 163 * If got SOAP Fault,get the lock key,and resend it. |
156 */ | 164 */ |
157 void | 165 const void |
158 msn_oim_send_process(MsnOim *oim,char *body,int len) | 166 msn_oim_send_process(MsnOim *oim, const char *body, int len) |
159 { | 167 { |
160 xmlnode *responseNode,*bodyNode; | 168 xmlnode *responseNode, *bodyNode; |
161 xmlnode *faultNode,*faultCodeNode,*faultstringNode; | 169 xmlnode *faultNode, *faultCodeNode, *faultstringNode; |
162 xmlnode *detailNode,*challengeNode; | 170 xmlnode *detailNode, *challengeNode; |
163 char *faultCodeStr,*faultstring; | 171 char *faultCodeStr, *faultstring; |
164 char *challenge; | |
165 | 172 |
166 responseNode = xmlnode_from_str(body,len); | 173 responseNode = xmlnode_from_str(body,len); |
167 g_return_if_fail(responseNode != NULL); | 174 g_return_if_fail(responseNode != NULL); |
168 bodyNode = xmlnode_get_child(responseNode,"Body"); | 175 bodyNode = xmlnode_get_child(responseNode,"Body"); |
169 faultNode = xmlnode_get_child(bodyNode,"Fault"); | 176 faultNode = xmlnode_get_child(bodyNode,"Fault"); |
243 soapconn->read_cb = msn_oim_send_read_cb; | 250 soapconn->read_cb = msn_oim_send_read_cb; |
244 // msn_soap_read_cb(data,source,cond); | 251 // msn_soap_read_cb(data,source,cond); |
245 } | 252 } |
246 | 253 |
247 void | 254 void |
248 msn_oim_prep_send_msg_info(MsnOim *oim, | 255 msn_oim_prep_send_msg_info(MsnOim *oim, const char *membername, |
249 char *membername,char*friendname,char *tomember, | 256 const char* friendname, const char *tomember, |
250 char * msg) | 257 const char * msg) |
251 { | 258 { |
252 MsnOimSendReq *request; | 259 MsnOimSendReq *request; |
253 | 260 |
254 g_return_if_fail(oim != NULL); | 261 g_return_if_fail(oim != NULL); |
255 | 262 |
322 static void | 329 static void |
323 msn_oim_delete_read_cb(gpointer data, GaimSslConnection *gsc, | 330 msn_oim_delete_read_cb(gpointer data, GaimSslConnection *gsc, |
324 GaimInputCondition cond) | 331 GaimInputCondition cond) |
325 { | 332 { |
326 MsnSoapConn * soapconn = data; | 333 MsnSoapConn * soapconn = data; |
327 MsnOim * oim = soapconn->session->oim; | |
328 | 334 |
329 gaim_debug_info("MaYuan","OIM delete read buffer:{%s}\n",soapconn->body); | 335 gaim_debug_info("MaYuan","OIM delete read buffer:{%s}\n",soapconn->body); |
330 | 336 |
331 msn_soap_free_read_buf(soapconn); | 337 msn_soap_free_read_buf(soapconn); |
332 /*get next single Offline Message*/ | 338 /*get next single Offline Message*/ |
402 | 408 |
403 gaim_debug_info("MaYuan","oim get SOAP Server connected!\n"); | 409 gaim_debug_info("MaYuan","oim get SOAP Server connected!\n"); |
404 } | 410 } |
405 | 411 |
406 /*Post the Offline Instant Message to User Conversation*/ | 412 /*Post the Offline Instant Message to User Conversation*/ |
407 void | 413 static void |
408 msn_oim_report_to_user(MsnOim *oim,char *msg_str) | 414 msn_oim_report_to_user(MsnOim *oim, char *msg_str) |
409 { | 415 { |
410 MsnMessage *message; | 416 MsnMessage *message; |
411 char *date,*from,*decode_msg; | 417 char *date,*from,*decode_msg; |
412 gsize body_len; | 418 gsize body_len; |
413 char **tokens; | 419 char **tokens; |
414 char *start,*end; | 420 char *start,*end; |
415 int has_nick = 0; | 421 int has_nick = 0; |
416 char *passport_str,*passport; | 422 char *passport_str, *passport; |
417 char *msg_id; | 423 char *msg_id; |
418 | 424 |
419 message = msn_message_new(MSN_MSG_UNKNOWN); | 425 message = msn_message_new(MSN_MSG_UNKNOWN); |
420 | 426 |
421 msn_message_parse_payload(message,msg_str,strlen(msg_str), | 427 msn_message_parse_payload(message, msg_str, strlen(msg_str), |
422 MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); | 428 MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); |
423 gaim_debug_info("MaYuan","oim body:{%s}\n",message->body); | 429 gaim_debug_info("MaYuan","oim body:{%s}\n",message->body); |
424 decode_msg = gaim_base64_decode(message->body,&body_len); | 430 decode_msg = gaim_base64_decode(message->body,&body_len); |
425 date = (char *)g_hash_table_lookup(message->attr_table, "Date"); | 431 date = (char *)g_hash_table_lookup(message->attr_table, "Date"); |
426 from = (char *)g_hash_table_lookup(message->attr_table, "From"); | 432 from = (char *)g_hash_table_lookup(message->attr_table, "From"); |
427 if(strstr(from," ")){ | 433 if(strstr(from," ")){ |
461 } | 467 } |
462 | 468 |
463 /* Parse the XML data, | 469 /* Parse the XML data, |
464 * prepare to report the OIM to user | 470 * prepare to report the OIM to user |
465 */ | 471 */ |
466 void | 472 static void |
467 msn_oim_get_process(MsnOim *oim,char *oim_msg) | 473 msn_oim_get_process(MsnOim *oim, char *oim_msg) |
468 { | 474 { |
469 xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; | 475 xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; |
470 char *msg_data,*msg_str; | 476 char *msg_data,*msg_str; |
471 | 477 |
472 oimNode = xmlnode_from_str(oim_msg, strlen(oim_msg)); | 478 oimNode = xmlnode_from_str(oim_msg, strlen(oim_msg)); |
567 msn_oim_get_written_cb); | 573 msn_oim_get_written_cb); |
568 msn_soap_post(oim->retrieveconn,soap_request,msn_oim_retrieve_connect_init); | 574 msn_soap_post(oim->retrieveconn,soap_request,msn_oim_retrieve_connect_init); |
569 } | 575 } |
570 | 576 |
571 /*msn oim retrieve server connect init */ | 577 /*msn oim retrieve server connect init */ |
572 void | 578 static void |
573 msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) | 579 msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) |
574 { | 580 { |
575 gaim_debug_info("MaYuan","msn_oim_connect...\n"); | 581 gaim_debug_info("MaYuan","msn_oim_connect...\n"); |
576 msn_soap_init(soapconn,MSN_OIM_RETRIEVE_HOST,1, | 582 msn_soap_init(soapconn,MSN_OIM_RETRIEVE_HOST,1, |
577 msn_oim_get_connect_cb, | 583 msn_oim_get_connect_cb, |
578 msn_oim_get_error_cb); | 584 msn_oim_get_error_cb); |
579 } | 585 } |
580 | 586 |
581 /*Msn OIM Send Server Connect Init Function*/ | 587 /*Msn OIM Send Server Connect Init Function*/ |
582 void msn_oim_send_connect_init(MsnSoapConn *sendconn) | 588 static void |
589 msn_oim_send_connect_init(MsnSoapConn *sendconn) | |
583 { | 590 { |
584 gaim_debug_info("MaYuan","msn oim send connect init...\n"); | 591 gaim_debug_info("MaYuan","msn oim send connect init...\n"); |
585 msn_soap_init(sendconn,MSN_OIM_SEND_HOST,1, | 592 msn_soap_init(sendconn,MSN_OIM_SEND_HOST,1, |
586 msn_oim_send_connect_cb, | 593 msn_oim_send_connect_cb, |
587 msn_oim_send_error_cb); | 594 msn_oim_send_error_cb); |