[asterisk-commits] file: branch 12 r427490 - /branches/12/res/res_pjsip/pjsip_distributor.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Nov 6 12:20:20 CST 2014


Author: file
Date: Thu Nov  6 12:20:12 2014
New Revision: 427490

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=427490
Log:
res_pjsip: Ensure in-dialog responses have an endpoint associated.

When handling incoming messages we determine if it is associated with
a dialog. If so we use that to determine what serializer and endpoint
to use for the message. Previously this would pass the endpoint to the
endpoint lookup module to actually place the endpoint completely on the
message. For in-dialog responses, however, this did not occur as
dialog processing took over and the endpoint lookup did not occur.

This change just places the endpoint in the expected spot immediately
instead of relying on the endpoint lookup module. In-dialog responses
thus have the expected endpoint.

AST-1459 #close

Review: https://reviewboard.asterisk.org/r/4146/

Modified:
    branches/12/res/res_pjsip/pjsip_distributor.c

Modified: branches/12/res/res_pjsip/pjsip_distributor.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/res/res_pjsip/pjsip_distributor.c?view=diff&rev=427490&r1=427489&r2=427490
==============================================================================
--- branches/12/res/res_pjsip/pjsip_distributor.c (original)
+++ branches/12/res/res_pjsip/pjsip_distributor.c Thu Nov  6 12:20:12 2014
@@ -153,6 +153,14 @@
 	return dlg;
 }
 
+static pj_bool_t endpoint_lookup(pjsip_rx_data *rdata);
+
+static pjsip_module endpoint_mod = {
+	.name = {"Endpoint Identifier", 19},
+	.priority = PJSIP_MOD_PRIORITY_TSX_LAYER - 3,
+	.on_rx_request = endpoint_lookup,
+};
+
 static pj_bool_t distributor(pjsip_rx_data *rdata)
 {
 	pjsip_dialog *dlg = find_dialog(rdata);
@@ -178,7 +186,7 @@
 	pjsip_rx_data_clone(rdata, 0, &clone);
 
 	if (dist) {
-		clone->endpt_info.mod_data[distributor_mod.id] = dist->endpoint;
+		clone->endpt_info.mod_data[endpoint_mod.id] = ao2_bump(dist->endpoint);
 	}
 
 	ast_sip_push_task(serializer, distribute, clone);
@@ -190,14 +198,6 @@
 
 	return PJ_TRUE;
 }
-
-static pj_bool_t endpoint_lookup(pjsip_rx_data *rdata);
-
-static pjsip_module endpoint_mod = {
-	.name = {"Endpoint Identifier", 19},
-	.priority = PJSIP_MOD_PRIORITY_TSX_LAYER - 3,
-	.on_rx_request = endpoint_lookup,
-};
 
 static struct ast_sip_auth *artificial_auth;
 
@@ -256,14 +256,12 @@
 	struct ast_sip_endpoint *endpoint;
 	int is_ack = rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD;
 
-	endpoint = rdata->endpt_info.mod_data[distributor_mod.id];
+	endpoint = rdata->endpt_info.mod_data[endpoint_mod.id];
 	if (endpoint) {
-		/* Bumping the refcount makes refcounting consistent whether an endpoint
-		 * is looked up or not */
-		ao2_ref(endpoint, +1);
-	} else {
-		endpoint = ast_sip_identify_endpoint(rdata);
-	}
+		return PJ_FALSE;
+	}
+
+	endpoint = ast_sip_identify_endpoint(rdata);
 
 	if (!endpoint && !is_ack) {
 		char name[AST_UUID_STR_LEN] = "";




More information about the asterisk-commits mailing list