diff src/protocols/msn/soap.c @ 19809:b488205ad0bc

[gaim-migrate @ 16884] chat function ok debugging the multiple soap request in one ssl connection not stable. comitted by MaYuan<mayuan2006@gmail.com> committer: Ethan Blanton <elb@pidgin.im>
author Ma Yuan <mayuan2006@gmail.com>
date Sat, 19 Aug 2006 14:12:41 +0000
parents 75ecc42d3e8d
children da1075366756
line wrap: on
line diff
--- a/src/protocols/msn/soap.c	Sat Aug 19 11:46:33 2006 +0000
+++ b/src/protocols/msn/soap.c	Sat Aug 19 14:12:41 2006 +0000
@@ -119,6 +119,7 @@
 				soapconn);
 	}else{
 	}
+	msn_soap_set_process_step(soapconn,MSN_SOAP_CONNECTING);
 }
 
 /*close the soap connection*/
@@ -185,14 +186,16 @@
 static gssize
 msn_soap_read(MsnSoapConn *soapconn)
 {
-	gssize len;
+	gssize len,requested_len;
 	gssize total_len = 0;
 	char temp_buf[MSN_SOAP_READ_BUFF_SIZE];
 
+//	requested_len = (soapconn->need_to_read > 0) ? soapconn->need_to_read : MSN_SOAP_READ_BUFF_SIZE;
+	requested_len = MSN_SOAP_READ_BUFF_SIZE;
 	if(soapconn->ssl_conn){
-		len = gaim_ssl_read(soapconn->gsc, temp_buf,MSN_SOAP_READ_BUFF_SIZE);
+		len = gaim_ssl_read(soapconn->gsc, temp_buf,requested_len);
 	}else{
-		len = read(soapconn->fd, temp_buf,MSN_SOAP_READ_BUFF_SIZE);
+		len = read(soapconn->fd, temp_buf,requested_len);
 	}
 	if(len >0){
 		total_len += len;
@@ -330,7 +333,9 @@
 			soapconn->body_len	= atoi(body_len);
 			gaim_debug_misc("MaYuan","SOAP Read length :%d,body len:%d\n",soapconn->read_len,soapconn->body_len);
 
+			soapconn->need_to_read = (body_start - soapconn->read_buf +soapconn->body_len) - soapconn->read_len;
 			if(soapconn->read_len < body_start - soapconn->read_buf + soapconn->body_len){
+//			if(soapconn->need_to_read >0){
 				return;
 			}
 			g_free(body_len);
@@ -370,6 +375,7 @@
 	}
 	soapconn->read_buf = NULL;
 	soapconn->read_len = 0;
+	soapconn->need_to_read = 0;
 }
 
 void
@@ -506,7 +512,7 @@
 				MsnSoapConnectInitFunction msn_soap_init_func)
 {
 	g_queue_push_tail(soapconn->soap_queue, request);
-	if(!msn_soap_connected(soapconn)){
+	if(!msn_soap_connected(soapconn)&&(soapconn->step == MSN_SOAP_UNCONNECTED)){
 		/*not connected?connect it first*/
 		gaim_debug_info("Ma Yuan","soap is not connected!\n");
 		msn_soap_init_func(soapconn);