[asterisk-commits] mmichelson: branch 12 r406295 - /branches/12/res/res_pjsip_pidf.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jan 23 15:09:37 CST 2014


Author: mmichelson
Date: Thu Jan 23 15:09:35 2014
New Revision: 406295

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=406295
Log:
Fix presence body errors found during testing:

* PIDF bodies were reporting an "open" state in many cases where
  it should have been reporting "closed"
* XPIDF bodies had XML nodes placed incorrectly within the hierarchy.
* SIP URIs in XPIDF bodies did not go through XML sanitization
* XML sanitization had some errors:
    * Right angle bracket was being replaced with "&rt;" instead of ">"
	* Double quote, apostrophe, and ampersand were not being escaped.


Modified:
    branches/12/res/res_pjsip_pidf.c

Modified: branches/12/res/res_pjsip_pidf.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/res/res_pjsip_pidf.c?view=diff&rev=406295&r1=406294&r2=406295
==============================================================================
--- branches/12/res/res_pjsip_pidf.c (original)
+++ branches/12/res/res_pjsip_pidf.c Thu Jan 23 15:09:35 2014
@@ -115,22 +115,19 @@
 	return node;
 }
 
-static pj_xml_attr *find_node_attr(pj_pool_t* pool, pj_xml_node *parent,
-				   const char *node_name, const char *attr_name)
+static void find_node_attr(pj_pool_t* pool, pj_xml_node *parent,
+				   const char *node_name, const char *attr_name,
+				   pj_xml_node **node, pj_xml_attr **attr)
 {
 	pj_str_t name;
-	pj_xml_node *node;
-	pj_xml_attr *attr;
-
-	if (!(node = pj_xml_find_node(parent, pj_cstr(&name, node_name)))) {
-		node = create_node(pool, parent, node_name);
-	}
-
-	if (!(attr = pj_xml_find_attr(node, pj_cstr(&name, attr_name), NULL))) {
-		attr = create_attr(pool, node, attr_name, "");
-	}
-
-	return attr;
+
+	if (!(*node = pj_xml_find_node(parent, pj_cstr(&name, node_name)))) {
+		*node = create_node(pool, parent, node_name);
+	}
+
+	if (!(*attr = pj_xml_find_attr(*node, pj_cstr(&name, attr_name), NULL))) {
+		*attr = create_attr(pool, *node, attr_name, "");
+	}
 }
 
 /*!
@@ -312,32 +309,28 @@
 		return -1;
 	}
 
-	ast_sip_presence_xml_find_node_attr(state_data->pool, pres, "atom", "id", 
-			&atom, &attr);
-	pj_strdup2(state_data->pool, &attr->value, state_data->exten);
-
-	ast_sip_presence_xml_find_node_attr(state_data->pool, atom, "address",
-			"uri", &address, &attr);
-
-	ast_sip_sanitize_xml(state_data->remote, sanitized, sizeof(sanitized));
-
-	uri.ptr = (char*) pj_pool_alloc(state_data->pool,
-			strlen(sanitized) + STR_ADDR_PARAM.slen);
+	find_node_attr(pool, pres, "atom", "id", &atom, &attr);
+	pj_strdup2(pool, &attr->value, data->exten);
+
+	find_node_attr(pool, atom, "address", "uri", &address, &attr);
+
+	sanitize_xml(remote, sanitized, sizeof(sanitized));
+
+	uri.ptr = (char*) pj_pool_alloc(pool, strlen(sanitized) + STR_ADDR_PARAM.slen);
 	pj_strcpy2( &uri, sanitized);
+
 	pj_strcat( &uri, &STR_ADDR_PARAM);
 	pj_strdup(state_data->pool, &attr->value, &uri);
 
-	ast_sip_presence_xml_create_attr(state_data->pool, address, "priority", "0.80000");
-
-	ast_sip_presence_xml_find_node_attr(state_data->pool, address,
-			"status", "status", &status, &attr);
-	pj_strdup2(state_data->pool, &attr->value,
+	create_attr(pool, address, "priority", "0.80000");
+
+	find_node_attr(pool, address, "status", "status", &status, &attr);
+	pj_strdup2(pool, &attr->value,
 		   (local_state ==  NOTIFY_OPEN) ? "open" :
 		   (local_state == NOTIFY_INUSE) ? "inuse" : "closed");
 
-	ast_sip_presence_xml_find_node_attr(state_data->pool, address,
-			"msnsubstatus", "substatus", &msnsubstatus, &attr);
-	pj_strdup2(state_data->pool, &attr->value,
+	find_node_attr(pool, address, "msnsubstatus", "substatus", &msnsubstatus, &attr);
+	pj_strdup2(pool, &attr->value,
 		   (local_state == NOTIFY_OPEN) ? "online" :
 		   (local_state == NOTIFY_INUSE) ? "onthephone" : "offline");
 




More information about the asterisk-commits mailing list