[asterisk-commits] mmichelson: branch mmichelson/subscription_abstraction r416642 - in /team/mmi...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jun 18 13:19:15 CDT 2014


Author: mmichelson
Date: Wed Jun 18 13:19:12 2014
New Revision: 416642

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=416642
Log:
Reinstate user-agent gathering in res_pjsip_exten_state.

In an effort to not make this too terrible, the pubsub
API now offers a way to get SIP headers from the initial
SUBSCRIBE request. This way, there's not a single
seemingly-random API call to get the User-Agent. Other
headers can be grabbed if necessary.


Modified:
    team/mmichelson/subscription_abstraction/include/asterisk/res_pjsip_pubsub.h
    team/mmichelson/subscription_abstraction/res/res_pjsip_exten_state.c
    team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.c
    team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.exports.in

Modified: team/mmichelson/subscription_abstraction/include/asterisk/res_pjsip_pubsub.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/subscription_abstraction/include/asterisk/res_pjsip_pubsub.h?view=diff&rev=416642&r1=416641&r2=416642
==============================================================================
--- team/mmichelson/subscription_abstraction/include/asterisk/res_pjsip_pubsub.h (original)
+++ team/mmichelson/subscription_abstraction/include/asterisk/res_pjsip_pubsub.h Wed Jun 18 13:19:12 2014
@@ -349,6 +349,8 @@
 
 const char *ast_sip_subscription_get_resource_name(struct ast_sip_subscription *sub);
 
+void *ast_sip_subscription_get_header(const struct ast_sip_subscription *sub, const char *header);
+
 /*!
  * \brief Send a request created via a PJSIP evsub method
  *

Modified: team/mmichelson/subscription_abstraction/res/res_pjsip_exten_state.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/subscription_abstraction/res/res_pjsip_exten_state.c?view=diff&rev=416642&r1=416641&r2=416642
==============================================================================
--- team/mmichelson/subscription_abstraction/res/res_pjsip_exten_state.c (original)
+++ team/mmichelson/subscription_abstraction/res/res_pjsip_exten_state.c Wed Jun 18 13:19:12 2014
@@ -96,6 +96,23 @@
 	ao2_cleanup(sub->sip_sub);
 }
 
+static char *get_user_agent(const struct ast_sip_subscription *sip_sub)
+{
+	size_t size;
+	char *user_agent = NULL;
+	pjsip_user_agent_hdr *user_agent_hdr = ast_sip_subscription_get_header(
+			sip_sub, "User-Agent");
+
+	if (!user_agent_hdr) {
+		return NULL;
+	}
+
+	size = pj_strlen(&user_agent_hdr->hvalue) + 1;
+	user_agent = ast_malloc(size);
+	ast_copy_pj_str(user_agent, &user_agent_hdr->hvalue, size);
+	return ast_str_to_lower(user_agent);
+}
+
 /*!
  * \internal
  * \brief Initialize the last extension state to something outside
@@ -123,13 +140,7 @@
 	exten_state_sub->sip_sub = ao2_bump(sip_sub);
 	exten_state_sub->last_exten_state = INITIAL_LAST_EXTEN_STATE;
 	exten_state_sub->last_presence_state = AST_PRESENCE_NOT_SET;
-	/* XXX TODO Previously, user agent was reaped from the rdata here and stored on the
-	 * exten_state_sub. This was useful for determining if the phone being communicated with
-	 * is a Digium phone.
-	 *
-	 * This needs to be made available somehow. Maybe it could just be on the base
-	 * ast_sip_subscription structure? Seems a bit specialized though.
-	 */
+	exten_state_sub->user_agent = get_user_agent(sip_sub);
 	return exten_state_sub;
 }
 

Modified: team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.c?view=diff&rev=416642&r1=416641&r2=416642
==============================================================================
--- team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.c (original)
+++ team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.c Wed Jun 18 13:19:12 2014
@@ -121,6 +121,7 @@
 };
 
 #define MOD_DATA_PERSISTENCE "sub_persistence"
+#define MOD_DATA_MSG "sub_msg"
 
 static const pj_str_t str_event_name = { "Event", 5 };
 
@@ -835,8 +836,22 @@
 	pjsip_evsub_create_uas(dlg, &pubsub_cb, rdata, 0, &sub->reality.real.evsub);
 	subscription_setup_dialog(sub, dlg);
 
+	ast_sip_mod_data_set(dlg->pool, dlg->mod_data, pubsub_module.id, MOD_DATA_MSG,
+			pjsip_msg_clone(dlg->pool, rdata->msg_info.msg));
+
 	add_subscription(sub);
 	return sub;
+}
+
+void *ast_sip_subscription_get_header(const struct ast_sip_subscription *sub, const char *header)
+{
+	pjsip_dialog *dlg = sip_subscription_get_dlg(sub);
+	pjsip_msg *msg = ast_sip_mod_data_get(dlg->mod_data, pubsub_module.id, MOD_DATA_MSG);
+	pj_str_t name;
+
+	pj_cstr(&name, header);
+
+	return pjsip_msg_find_hdr_by_name(msg, &name, NULL);
 }
 
 struct ast_sip_subscription *ast_sip_create_subscription(const struct ast_sip_subscription_handler *handler,

Modified: team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.exports.in
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.exports.in?view=diff&rev=416642&r1=416641&r2=416642
==============================================================================
--- team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.exports.in (original)
+++ team/mmichelson/subscription_abstraction/res/res_pjsip_pubsub.exports.in Wed Jun 18 13:19:12 2014
@@ -34,6 +34,7 @@
 		LINKER_SYMBOL_PREFIXast_sip_subscription_notify;
 		LINKER_SYMBOL_PREFIXast_sip_subscription_get_local_uri;
 		LINKER_SYMBOL_PREFIXast_sip_subscription_get_remote_uri;
+		LINKER_SYMBOL_PREFIXast_sip_subscription_get_header;
 	local:
 		*;
 };




More information about the asterisk-commits mailing list