Mercurial > pidgin.yaz
diff src/protocols/msn/oim.c @ 19742:8b4653986e8e
[gaim-migrate @ 16600]
change to add SOAP HTTP header retrieve
Now Can do the OIM Message XML process
submitted by Ma Yuan<mayuan2006@gmail.com>
committer: Ethan Blanton <elb@pidgin.im>
author | Ma Yuan <mayuan2006@gmail.com> |
---|---|
date | Sun, 30 Jul 2006 13:44:34 +0000 |
parents | 852b32710df0 |
children | 7e36832172a9 |
line wrap: on
line diff
--- a/src/protocols/msn/oim.c Sun Jul 23 12:19:10 2006 +0000 +++ b/src/protocols/msn/oim.c Sun Jul 30 13:44:34 2006 +0000 @@ -79,7 +79,7 @@ g_return_if_fail(session != NULL); } -void msn_oim_send_msg(MsnOim *oim,char * msg) +void msn_oim_send_msg(MsnOim *oim,char *msg) { if(msn_soap_connected(oim->sendconn) == -1){ msn_soap_init(oim->sendconn,MSN_OIM_SEND_HOST,1, @@ -89,6 +89,108 @@ } +static void +msn_oim_get_read_cb(gpointer data, GaimSslConnection *gsc, + GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + MsnOim * msnoim; + + gaim_debug_info("MaYuan","read buffer:{%s}\n",soapconn->body); +} + +static void +msn_oim_get_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + soapconn->read_cb = msn_oim_get_read_cb; + msn_soap_read_cb(data,source,cond); +} +/* +static void +msn_oim_login_connect_cb(gpointer data, GaimSslConnection *gsc, + GaimInputCondition cond) +{ + +}*/ + +static GaimConversation * +msn_oim_get_conv(MsnOim *oim,char *passport) +{ + GaimAccount *account; + GaimConversation * conv; + + g_return_val_if_fail(oim != NULL, NULL); + account = oim->session->account; + + conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, + passport, account); + if(conv == NULL){ + conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, passport); + } + return conv; +} + +void +msn_oim_report_user(MsnOim *oim,const char *passport,char *msg) +{ + GaimConversation * conv; + + if ((conv = msn_oim_get_conv(oim,passport)) != NULL){ + gaim_conversation_write(conv, NULL, msg, GAIM_MESSAGE_SYSTEM, time(NULL)); + } + +} + +void +msn_parse_oim_msg(MsnOim *oim,char *xmlmsg) +{ + xmlnode *mdNode,*mNode,*INode,*nNode,*ENode,*rtNode; + char *passport,*rTime,*msgid,*nickname; + + mdNode = xmlnode_from_str(xmlmsg, strlen(xmlmsg)); + for(mNode = xmlnode_get_child(mdNode, "M"); mNode; + mNode = xmlnode_get_next_twin(mNode)){ + INode = xmlnode_get_child(mNode,"E"); + passport = xmlnode_get_data(INode); + INode = xmlnode_get_child(mNode,"I"); + msgid = xmlnode_get_data(INode); + rtNode = xmlnode_get_child(mNode,"RT"); + rTime = xmlnode_get_data(rtNode); + nNode = xmlnode_get_child(mNode,"N"); + nickname = xmlnode_get_data(nNode); + gaim_debug_info("MaYuan","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); + msn_oim_report_user(oim,passport,"hello"); +// msn_oim_get_msg(oim,msgid); + } +} + +void msn_oim_get_msg(MsnOim *oim,char *msgid) +{ + const char *oimid ,*oimsoapbody,*t,*p; + + if(msn_soap_connected(oim->retrieveconn) == -1){ + gaim_debug_info("MaYuan","retreive OIM server not connected!\n"); + msn_soap_init(oim->retrieveconn,MSN_OIM_RETRIEVE_HOST,1, + msn_oim_login_connect_cb, + msn_oim_login_error_cb); + return; + } + + oim->retrieveconn->login_path = g_strdup(MSN_OIM_RETRIEVE__URL); + oim->retrieveconn->soap_action = g_strdup(MSN_OIM_DEL_SOAP_ACTION); + t = oim->session->passport_info.t; + p = oim->session->passport_info.p; + + oimsoapbody = g_strdup_printf(MSN_OIM_GET_TEMPLATE, + t, + p, + msgid + ); + msn_soap_post(oim->retrieveconn, oimsoapbody, msn_oim_get_written_cb); +} + /*msn oim server connect*/ void msn_oim_connect(MsnOim *oim)