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)