diff options
author | Mark Michelson <mmichelson@digium.com> | 2014-12-18 14:50:06 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2014-12-18 14:50:06 +0000 |
commit | cc1405bd387270a919a2534c83acb383d022848b (patch) | |
tree | 10fd87f10bcc8166f365699438b5a297126a5d43 /channels | |
parent | 18b5a336ef8e63233e80f4c86ac556fd2867dec1 (diff) |
Ensure the correct value is returned for CHANNEL(pjsip, secure)
Prior to this patch, we were using the PJSIP dialog's secure flag
to determine if a secure transport was being used. Unfortunately,
the dialog's secure flag was only set if a SIPS URI were in use,
as required by RFC 3261 sections 12.1.1 and 12.1.2. What we're interested
in is not dialog security, but transport security. This code change
switches to a model where we use the dialog's target URI to determine
what transport would be used to communicate, and then check if that
transport is secure.
AST-1450 #close
Reported by John Bigelow
Review: https://reviewboard.asterisk.org/r/4277
........
Merged revisions 429739 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429740 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/pjsip/dialplan_functions.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/channels/pjsip/dialplan_functions.c b/channels/pjsip/dialplan_functions.c index 6cc88017a..018b1e6c1 100644 --- a/channels/pjsip/dialplan_functions.c +++ b/channels/pjsip/dialplan_functions.c @@ -580,7 +580,11 @@ static int channel_read_pjsip(struct ast_channel *chan, const char *type, const dlg = channel->session->inv_session->dlg; if (!strcmp(type, "secure")) { - snprintf(buf, buflen, "%d", dlg->secure ? 1 : 0); + pjsip_host_info dest; + pj_pool_t *pool = pjsip_endpt_create_pool(ast_sip_get_pjsip_endpoint(), "secure-check", 128, 128); + pjsip_get_dest_info(dlg->target, NULL, pool, &dest); + snprintf(buf, buflen, "%d", dest.flag & PJSIP_TRANSPORT_SECURE ? 1 : 0); + pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool); } else if (!strcmp(type, "target_uri")) { pjsip_uri_print(PJSIP_URI_IN_REQ_URI, dlg->target, buf, buflen); buf_copy = ast_strdupa(buf); |