[sr-dev] git:master: pua_xmpp: fixes to SIP-XMPP presence status translations

Daniel-Constantin Mierla miconda at gmail.com
Fri Aug 12 22:55:45 CEST 2011


Module: sip-router
Branch: master
Commit: d1097d6ac9295c529ad6e682534ee4b3f0a9daae
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d1097d6ac9295c529ad6e682534ee4b3f0a9daae

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Fri Aug 12 22:51:20 2011 +0200

pua_xmpp: fixes to SIP-XMPP presence status translations

* patch by Laura Testi to fix:
- the online/offline status is ok in both direction (SIP<-->XMPP)
- other status (away/busy) is not ok from XMPP to SIP
- busy status is not ok from SIP to XMPP
- each time XMPP contact change the status, triger a new SUBSCRIBE in  xmpp
  gateway which generate multiple same subscriptions with different callid
  in both active_watchers and pua tables. This also makes multiple NOTIFY
  generation from the main Presence Server to GW when the SIP contact change
  it's status

---

 modules_k/pua_xmpp/simple2xmpp.c |   15 +++++++++----
 modules_k/pua_xmpp/xmpp2simple.c |   42 +++++++++++--------------------------
 2 files changed, 23 insertions(+), 34 deletions(-)

diff --git a/modules_k/pua_xmpp/simple2xmpp.c b/modules_k/pua_xmpp/simple2xmpp.c
index 040d36c..e041bcb 100644
--- a/modules_k/pua_xmpp/simple2xmpp.c
+++ b/modules_k/pua_xmpp/simple2xmpp.c
@@ -87,7 +87,7 @@ int Notify2Xmpp(struct sip_msg* msg, char* s1, char* s2)
 	if(msg->to->parsed != NULL)
 	{
 		pto = (struct to_body*)msg->to->parsed;
-		LM_ERR("'To' header ALREADY PARSED:<%.*s>\n",pto->uri.len,pto->uri.s);
+		LM_DBG("'To' header ALREADY PARSED:<%.*s>\n",pto->uri.len,pto->uri.s);
 	}
 	else
 	{
@@ -415,7 +415,8 @@ int build_xmpp_content(str* to_uri, str* from_uri, str* body, str* id,
 		goto error;
 	}
 
-	if(xmlStrcasecmp((unsigned char*)note, (unsigned char*)"away")== 0)
+	if((xmlStrcasecmp((unsigned char*)note, (unsigned char*)"away")== 0)||
+			(xmlStrcasecmp((unsigned char*)note, (unsigned char*)"On the phone")== 0))
 	{
 		new_node = xmlNewChild(xmpp_root, NULL, BAD_CAST "show",
 				BAD_CAST "away");
@@ -456,12 +457,14 @@ int build_xmpp_content(str* to_uri, str* from_uri, str* body, str* id,
 					LM_ERR("while adding node: idle\n");
 					goto error;
 				}	
-			}
-			else */	
+			}*/
+			else
 				if((xmlStrcasecmp((unsigned char*)note,
 					(unsigned char*)"dnd")== 0)||
 					(xmlStrcasecmp((unsigned char*)note,
-						(unsigned char*)"do not disturb")== 0))
+						(unsigned char*)"do not disturb")== 0)||
+					(xmlStrcasecmp((unsigned char*)note,
+					(unsigned char*)"Busy (DND)")== 0))
 				{
 					new_node = xmlNewChild(xmpp_root, NULL, BAD_CAST "show",
 							BAD_CAST "dnd");
@@ -471,6 +474,8 @@ int build_xmpp_content(str* to_uri, str* from_uri, str* body, str* id,
 						goto error;
 					}		
 				}
+				else
+					LM_DBG("Not Found Status\n");
 
 	
 	/* adding status node */
diff --git a/modules_k/pua_xmpp/xmpp2simple.c b/modules_k/pua_xmpp/xmpp2simple.c
index 43fa9a0..d0bdc1e 100644
--- a/modules_k/pua_xmpp/xmpp2simple.c
+++ b/modules_k/pua_xmpp/xmpp2simple.c
@@ -76,13 +76,13 @@ void pres_Xmpp2Sip(char *msg, int type, void *param)
 	{
 		LM_DBG("type attribut not present\n");
 		build_publish(pres_node, -1);
-		if(presence_subscribe(pres_node, 3600, XMPP_SUBSCRIBE)< 0)
+	/*	if(presence_subscribe(pres_node, 3600, XMPP_SUBSCRIBE)< 0)
 		{
 				LM_ERR("when sending subscribe for presence");
 				xmlFree(pres_type);
 				goto error;
 		}
-
+	*/
 
 		/* send subscribe after publish because in xmpp subscribe message
 		 * comes only when a new contact is inserted in buddy list */
@@ -91,13 +91,13 @@ void pres_Xmpp2Sip(char *msg, int type, void *param)
 	if(strcmp(pres_type, "unavailable")== 0)
 	{
 		build_publish(pres_node, 0);
-		if(presence_subscribe(pres_node, 3600, XMPP_SUBSCRIBE)< 0)
-				/* else subscribe for one hour*/
+	/*	if(presence_subscribe(pres_node, 0, XMPP_SUBSCRIBE)< 0)
 		{
 				LM_ERR("when unsubscribing for presence");
 				xmlFree(pres_type);
 				goto error;
 		}
+	*/
 
 	}		
 	else
@@ -243,13 +243,13 @@ str* build_pidf(xmlNodePtr pres_node, char* uri, char* resource)
 	if(show_cont)
 	{
 		if(strcmp(show_cont, "xa")== 0)
-			status= "not available";
+			status= "Away";
 		else
 			if(strcmp(show_cont, "chat")== 0)
-				status= "free for chat";
+			status= "Online";
 		else
 			if(strcmp(show_cont, "dnd")== 0)
-				status= "do not disturb";
+			status= "Busy (DND)";
 		else
 			status= show_cont;
 	}
@@ -264,24 +264,25 @@ str* build_pidf(xmlNodePtr pres_node, char* uri, char* resource)
 			goto error;
 		}
 		*/
-		node = xmlNewChild(root_node, NULL, BAD_CAST "note",
-				BAD_CAST status_cont);
+		node = xmlNewChild(tuple_node, NULL, BAD_CAST "note",
+				BAD_CAST status);
 		if(node== NULL)
 		{
 			LM_ERR("while adding node\n");
 			goto error;
 		}
-	}else
+	} else {
 		if(show_cont)
 		{
-			node = xmlNewChild(root_node, NULL, BAD_CAST "note", 
+			node = xmlNewChild(tuple_node, NULL, BAD_CAST "note", 
 					BAD_CAST status);
 			if(node== NULL)
 			{
 				LM_ERR("while adding node\n");
 				goto error;
 			}	
-		}	
+		}
+	}
 
 	if(show_cont)
 	{
@@ -295,23 +296,6 @@ str* build_pidf(xmlNodePtr pres_node, char* uri, char* resource)
 				goto error;
 			}
 		}
-		node=  xmlNewChild(person_node, NULL, BAD_CAST "activities", 
-				BAD_CAST 0);
-		if(node== NULL)
-		{
-			LM_ERR("while adding node\n");
-			goto error;
-		}
-
-						
-		if( xmlNewChild(person_node, NULL, BAD_CAST "note", 
-					BAD_CAST status )== NULL)
-		{
-			LM_ERR("while adding node\n");
-			goto error;
-		}
-
-
 	}
 		
 	




More information about the sr-dev mailing list