[Asterisk-code-review] res pjsip outbound registration: Make contact scheme follow ... (asterisk[master])

George Joseph asteriskteam at digium.com
Sat May 7 17:39:04 CDT 2016


George Joseph has uploaded a new change for review.

  https://gerrit.asterisk.org/2785

Change subject: res_pjsip_outbound_registration: Make contact scheme follow client_uri
......................................................................

res_pjsip_outbound_registration: Make contact scheme follow client_uri

The contact scheme for an outbound register was being forced to sips if the
transport was secure, even if the client uri scheme was set to sip.  This was
causing call failures with some servers/proxies that may (only) accept the
sip scheme over TLS.

The scheme used for the contact is now the same as the scheme specified on
the client_uri regardless of transport type.

ASTERISK-25990 #close
Reported-by: Sebastian Damm

Change-Id: I5163e9c4251e4a8479ebc462b51018d19ed0a6be
---
M res/res_pjsip_outbound_registration.c
1 file changed, 8 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/85/2785/1

diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index f85996e..3ba464b 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -1050,8 +1050,9 @@
 }
 
 /*! \brief Helper function which populates a pj_str_t with a contact header */
-static int sip_dialog_create_contact(pj_pool_t *pool, pj_str_t *contact, const char *user,
-	const pj_str_t *target, pjsip_tpselector *selector, const char *line)
+static int sip_dialog_create_contact(pj_pool_t *pool, pj_str_t *contact,
+	const pj_str_t *contact_scheme, const char *user,	const pj_str_t *target,
+	pjsip_tpselector *selector, const char *line)
 {
 	pj_str_t tmp, local_addr;
 	pjsip_uri *uri;
@@ -1096,7 +1097,8 @@
 	contact->ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
 	contact->slen = pj_ansi_snprintf(contact->ptr, PJSIP_MAX_URL_SIZE,
 		"<%s:%s@%s%.*s%s:%d%s%s%s%s>",
-		(pjsip_transport_get_flag_from_type(type) & PJSIP_TRANSPORT_SECURE) ? "sips" : "sip",
+		contact_scheme->slen ? strndupa(contact_scheme->ptr, contact_scheme->slen) :
+			(pjsip_transport_get_flag_from_type(type) & PJSIP_TRANSPORT_SECURE) ? "sips" : "sip",
 		user,
 		(type & PJSIP_TRANSPORT_IPV6) ? "[" : "",
 		(int)local_addr.slen,
@@ -1153,6 +1155,7 @@
 	pj_pool_t *pool;
 	pj_str_t tmp;
 	pjsip_uri *uri;
+	const pj_str_t *client_scheme;
 	pj_str_t server_uri, client_uri, contact_uri;
 	pjsip_tpselector selector = { .type = PJSIP_TPSELECTOR_NONE, };
 
@@ -1180,9 +1183,9 @@
 		pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
 		return -1;
 	}
+	client_scheme = pjsip_uri_get_scheme(uri);
 
 	pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
-
 
 	ast_assert(state->client_state->client == NULL);
 	if (pjsip_regc_create(ast_sip_get_pjsip_endpoint(), state->client_state,
@@ -1221,7 +1224,7 @@
 
 
 	if (sip_dialog_create_contact(pjsip_regc_get_pool(state->client_state->client),
-		&contact_uri, S_OR(registration->contact_user, "s"), &server_uri, &selector,
+		&contact_uri, client_scheme, S_OR(registration->contact_user, "s"), &server_uri, &selector,
 		state->client_state->line)) {
 		return -1;
 	}

-- 
To view, visit https://gerrit.asterisk.org/2785
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5163e9c4251e4a8479ebc462b51018d19ed0a6be
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: George Joseph <gjoseph at digium.com>



More information about the asterisk-code-review mailing list