diff src/protocols/msn/oim.c @ 19790:4f21c73a0c48

[gaim-migrate @ 16613] add oim retrieve,can get oim message write the framework of oim send Committed by MaYuan <mayuan2006@gmail.com> committer: Ethan Blanton <elb@pidgin.im>
author Ma Yuan <mayuan2006@gmail.com>
date Wed, 02 Aug 2006 05:44:42 +0000
parents 7e36832172a9
children bddd32f36bde
line wrap: on
line diff
--- a/src/protocols/msn/oim.c	Sun Jul 30 15:55:30 2006 +0000
+++ b/src/protocols/msn/oim.c	Wed Aug 02 05:44:42 2006 +0000
@@ -27,6 +27,9 @@
 #include "soap.h"
 #include "oim.h"
 
+/*Local Function Prototype*/
+static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid);
+
 /*new a OIM object*/
 MsnOim *
 msn_oim_new(MsnSession *session)
@@ -36,6 +39,7 @@
 	oim = g_new0(MsnOim, 1);
 	oim->session = session;
 	oim->retrieveconn = msn_soap_new(session,oim,1);
+	oim->oim_list	= NULL;
 	oim->sendconn = msn_soap_new(session,oim,1);
 
 	return oim;
@@ -82,12 +86,54 @@
 	g_return_if_fail(session != NULL);
 }
 
+static void
+msn_oim_send_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_send_written_cb(gpointer data, gint source, GaimInputCondition cond)
+{
+	MsnSoapConn * soapconn = data;	
+
+	soapconn->read_cb = msn_oim_send_read_cb;
+	msn_soap_read_cb(data,source,cond);
+}
+
+/*pose single message to oim server*/
+void msn_oim_send_single_msg(MsnOim *oim,char * msg)
+{
+	const char *oimsoapbody,*t,*p;
+
+	gaim_debug_info("MaYuan","send single OIM Message\n");
+	oim->sendconn->login_path = g_strdup(MSN_OIM_SEND_URL);
+	oim->sendconn->soap_action = g_strdup(MSN_OIM_SEND_SOAP_ACTION);
+	t = oim->session->passport_info.t;
+	p = oim->session->passport_info.p;
+#if 0
+	oimsoapbody = g_strdup_printf(MSN_OIM_SEND_TEMPLATE,
+					membername,
+					friendname,
+					tomember,
+					mspauth,
+					prod_id,
+					lock_key,
+					msg_num,
+					msg
+					);
+#endif
+	msn_soap_post(oim->retrieveconn, oimsoapbody, msn_oim_send_written_cb);
+
+}
+
 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,
-					msn_oim_send_connect_cb,
-					msn_oim_send_error_cb);
 	}
 	
 }
@@ -122,6 +168,10 @@
 
 	session = oim->session;
 	g_return_if_fail(session != NULL);
+
+	gaim_debug_info("MaYuan","oim get SOAP Server connected!\n");
+	/*call to get the message*/
+	msn_oim_get_msg(oim);
 }
 
 static void
@@ -145,7 +195,7 @@
 
 /*get the conversation*/
 static GaimConversation *
-msn_oim_get_conv(MsnOim *oim,char *passport)
+msn_oim_get_conv(MsnOim *oim,const char *passport)
 {
 	GaimAccount *account;
 	GaimConversation * conv;
@@ -193,21 +243,21 @@
 		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);
+		oim->oim_list = g_list_append(oim->oim_list,msgid);
 	}
+	if(msn_soap_connected(oim->retrieveconn) == -1){
+		gaim_debug_info("MaYuan","retreive OIM server not connected! We need to connect it first\n");
+		msn_oim_connect(oim);
+		return;
+	}
+	msn_oim_get_msg(oim);
 }
 
-/*MSN OIM get SOAP request*/
-void msn_oim_get_msg(MsnOim *oim,char *msgid)
+static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid)
 {
-	const char *oimid ,*oimsoapbody,*t,*p;
+	const char *oimsoapbody,*t,*p;
 
-	if(msn_soap_connected(oim->retrieveconn) == -1){
-		gaim_debug_info("MaYuan","retreive OIM server not connected!\n");
-		return;
-	}
-
-	gaim_debug_info("MaYuan","Get OIM with SOAP \n");
+	gaim_debug_info("MaYuan","Get single OIM Message\n");
 	oim->retrieveconn->login_path = g_strdup(MSN_OIM_RETRIEVE__URL);
 	oim->retrieveconn->soap_action = g_strdup(MSN_OIM_GET_SOAP_ACTION);
 	t = oim->session->passport_info.t;
@@ -219,6 +269,20 @@
 					msgid
 					);
 	msn_soap_post(oim->retrieveconn, oimsoapbody, msn_oim_get_written_cb);
+
+}
+
+/*MSN OIM get SOAP request*/
+void msn_oim_get_msg(MsnOim *oim)
+{
+	GList *list;	
+
+	gaim_debug_info("MaYuan","Get OIM with SOAP \n");
+//	gaim_debug_info("MaYuan","oim->oim_list:%p,data:%s \n",oim->oim_list,oim->oim_list->data);
+	for(list = oim->oim_list; list!= NULL;list = g_list_next(list)){
+		msn_oim_post_single_get_msg(oim,list->data);
+		oim->oim_list = g_list_remove(oim->oim_list, list->data);
+	}
 }
 
 /*msn oim server connect*/
@@ -227,12 +291,17 @@
 {
 	gaim_debug_info("MaYuan","msn_oim_connect...\n");
 
-	msn_soap_init(oim->retrieveconn,MSN_OIM_RETRIEVE_HOST,1,
+	if(msn_soap_connected(oim->retrieveconn) == -1){
+		msn_soap_init(oim->retrieveconn,MSN_OIM_RETRIEVE_HOST,1,
 					msn_oim_get_connect_cb,
 					msn_oim_get_error_cb);
-	msn_soap_init(oim->sendconn,MSN_OIM_SEND_HOST,1,
+	}
+
+	if(msn_soap_connected(oim->sendconn) == -1){
+		msn_soap_init(oim->sendconn,MSN_OIM_SEND_HOST,1,
 					msn_oim_send_connect_cb,
 					msn_oim_send_error_cb);
+	}
 }
 
 /*endof oim.c*/