[asterisk-commits] mmichelson: branch mmichelson/rls-rlmi r418255 - /team/mmichelson/rls-rlmi/res/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jul 9 16:09:01 CDT 2014


Author: mmichelson
Date: Wed Jul  9 16:08:54 2014
New Revision: 418255

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418255
Log:
Eliminate hard-coded URIs in bodies.

This changes the way that local URIs are generated.
This makes it so that embedded presence bodies generate
a URI that is local to the resource.


Modified:
    team/mmichelson/rls-rlmi/res/res_pjsip_pubsub.c

Modified: team/mmichelson/rls-rlmi/res/res_pjsip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/rls-rlmi/res/res_pjsip_pubsub.c?view=diff&rev=418255&r1=418254&r2=418255
==============================================================================
--- team/mmichelson/rls-rlmi/res/res_pjsip_pubsub.c (original)
+++ team/mmichelson/rls-rlmi/res/res_pjsip_pubsub.c Wed Jul  9 16:08:54 2014
@@ -414,6 +414,8 @@
 	unsigned int version;
 	/*! For lists, indicates if full state should always be communicated. */
 	unsigned int full_state;
+	/*! URI associated with the subscription */
+	pjsip_sip_uri *uri;
 	/*! Name of resource being subscribed to */
 	char resource[0];
 };
@@ -970,6 +972,7 @@
 		const char *resource, struct sip_subscription_tree *tree)
 {
 	struct ast_sip_subscription *sub;
+	pjsip_sip_uri *contact_uri;
 
 	sub = ao2_alloc(sizeof(*sub) + strlen(resource) + 1, subscription_destructor);
 	if (!sub) {
@@ -988,6 +991,11 @@
 		ao2_ref(sub, -1);
 		return NULL;
 	}
+
+	sub->uri = pjsip_sip_uri_create(tree->dlg->pool, PJ_FALSE);
+	contact_uri = pjsip_uri_get_uri(tree->dlg->local.contact->uri);
+	pjsip_sip_uri_assign(tree->dlg->pool, sub->uri, contact_uri);
+	pj_strdup2(tree->dlg->pool, &sub->uri->user, resource);
 
 	sub->handler = handler;
 	sub->subscription_state = PJSIP_EVSUB_STATE_ACTIVE;
@@ -1446,18 +1454,20 @@
 }
 
 static void add_rlmi_resource(pj_pool_t *pool, pj_xml_node *rlmi, const char *cid,
-		const char *resource_name, const char *resource_uri, pjsip_evsub_state state)
+		const char *resource_name, const pjsip_sip_uri *resource_uri, pjsip_evsub_state state)
 {
 	pj_xml_node *resource;
 	pj_xml_node *name;
 	pj_xml_node *instance;
 	char id[AST_UUID_STR_LEN];
+	char uri[PJSIP_MAX_URL_SIZE];
 
 	resource = ast_sip_presence_xml_create_node(pool, rlmi, "resource");
 	name = ast_sip_presence_xml_create_node(pool, resource, "name");
 	instance = ast_sip_presence_xml_create_node(pool, resource, "instance");
 
-	ast_sip_presence_xml_create_attr(pool, resource, "uri", resource_uri);
+	pjsip_uri_print(PJSIP_URI_IN_CONTACT_HDR, resource_uri, uri, sizeof(uri));
+	ast_sip_presence_xml_create_attr(pool, resource, "uri", uri);
 
 	pj_strdup2(pool, &name->content, resource_name);
 
@@ -1471,7 +1481,7 @@
 struct body_part {
 	const char *cid;
 	const char *resource;
-	const char *uri;
+	pjsip_sip_uri *uri;
 	pjsip_evsub_state state;
 	pjsip_multipart_part *part;
 };
@@ -1529,7 +1539,7 @@
 	AST_VECTOR_FREE(parts);
 }
 
-static struct body_part *allocate_body_part(const struct ast_sip_subscription *sub)
+static struct body_part *allocate_body_part(pj_pool_t *pool, const struct ast_sip_subscription *sub)
 {
 	struct body_part *bp;
 
@@ -1546,8 +1556,7 @@
 
 	bp->resource = sub->resource;
 	bp->state = sub->subscription_state;
-	/* XXX This is hardcoded */
-	bp->uri = "sip:johndoe at example.org";
+	bp->uri = sub->uri;
 
 	return bp;
 }
@@ -1577,7 +1586,7 @@
 	for (i = 0; i < AST_VECTOR_SIZE(&sub->children); ++i) {
 		/* XXX This should probably be factored into a function */
 		struct ast_sip_subscription *child = AST_VECTOR_GET(&sub->children, i);
-		struct body_part *bp = allocate_body_part(child);
+		struct body_part *bp = allocate_body_part(pool, child);
 		pjsip_generic_string_hdr *cid;
 		static const pj_str_t cid_name = { "Content-ID", 10 };
 		pjsip_msg_body *body;
@@ -1732,8 +1741,7 @@
 
 void ast_sip_subscription_get_local_uri(struct ast_sip_subscription *sub, char *buf, size_t size)
 {
-	pjsip_dialog *dlg = sub->tree->dlg;
-	ast_copy_pj_str(buf, &dlg->local.info_str, size);
+	pjsip_uri_print(PJSIP_URI_IN_CONTACT_HDR, sub->uri, buf, size);
 }
 
 void ast_sip_subscription_get_remote_uri(struct ast_sip_subscription *sub, char *buf, size_t size)




More information about the asterisk-commits mailing list