summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorMatt Jordan <mjordan@digium.com>2015-05-22 10:38:26 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2015-05-22 10:38:26 -0500
commit02dfb118ba39409881e237f1c33f753edb10acca (patch)
treec74113a6ba1ec9f39365f85fcdf865d9cb0f2cfd /res
parente7edb59db6dfb543300f43c8055adda4ab1fd1c9 (diff)
parent42476e66333a9b9841b56b2207760a70b1b835d1 (diff)
Merge "res_pjsip_outbound_registration: Check request URI for line." into 13
Diffstat (limited to 'res')
-rw-r--r--res/res_pjsip_outbound_registration.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index 6af8b8679..c910c9431 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -383,24 +383,29 @@ static int line_identify_relationship(void *obj, void *arg, int flags)
return !pj_strcmp2(&line->value, state->client_state->line) ? CMP_MATCH | CMP_STOP : 0;
}
+static struct pjsip_param *get_uri_option_line(const void *uri)
+{
+ pjsip_sip_uri *pjuri;
+ static const pj_str_t LINE_STR = { "line", 4 };
+
+ if (!PJSIP_URI_SCHEME_IS_SIP(uri) && !PJSIP_URI_SCHEME_IS_SIPS(uri)) {
+ return NULL;
+ }
+ pjuri = pjsip_uri_get_uri(uri);
+ return pjsip_param_find(&pjuri->other_param, &LINE_STR);
+}
+
/*! \brief Endpoint identifier which uses the 'line' parameter to establish a relationship to an outgoing registration */
static struct ast_sip_endpoint *line_identify(pjsip_rx_data *rdata)
{
- pjsip_sip_uri *uri;
- static const pj_str_t LINE_STR = { "line", 4 };
pjsip_param *line;
RAII_VAR(struct ao2_container *, states, NULL, ao2_cleanup);
RAII_VAR(struct sip_outbound_registration_state *, state, NULL, ao2_cleanup);
- if (!PJSIP_URI_SCHEME_IS_SIP(rdata->msg_info.to->uri) && !PJSIP_URI_SCHEME_IS_SIPS(rdata->msg_info.to->uri)) {
- return NULL;
- }
- uri = pjsip_uri_get_uri(rdata->msg_info.to->uri);
-
- line = pjsip_param_find(&uri->other_param, &LINE_STR);
- if (!line) {
+ if (!(line = get_uri_option_line(rdata->msg_info.to->uri))
+ && !(line = get_uri_option_line(rdata->msg_info.msg->line.req.uri))) {
return NULL;
- }
+ }
states = ao2_global_obj_ref(current_states);
if (!states) {