diff --git a/CHANGES b/CHANGES index b4e0d4e91b..dc261055e9 100644 --- a/CHANGES +++ b/CHANGES @@ -98,7 +98,7 @@ chan_sip ------------------------- * TEL URI support for inbound INVITE requests has been added. chan_sip will now handle TEL schemes in the Request and From URIs. The phone-context in - the Request URI will be stored in the TELPHONECONTEXT channel variable on + the Request URI will be stored in the SIPURIPHONECONTEXT channel variable on the inbound channel. Debugging diff --git a/channels/chan_sip.c b/channels/chan_sip.c index eb0a5f2952..e63657f2c4 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8249,6 +8249,9 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *tit if (!ast_strlen_zero(i->domain)) { pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain); } + if (!ast_strlen_zero(i->tel_phone_context)) { + pbx_builtin_setvar_helper(tmp, "SIPURIPHONECONTEXT", i->tel_phone_context); + } if (!ast_strlen_zero(i->callid)) { pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid); } @@ -17694,6 +17697,12 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re extract_host_from_hostport(&domain); + if (strncasecmp(get_in_brackets(tmp), "tel:", 4)) { + ast_string_field_set(p, domain, domain); + } else { + ast_string_field_set(p, tel_phone_context, domain); + } + if (ast_strlen_zero(uri)) { /* * Either there really was no extension found or the request @@ -17703,8 +17712,6 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re uri = "s"; } - ast_string_field_set(p, domain, domain); - /* Now find the From: caller ID and name */ /* XXX Why is this done in get_destination? Isn't it already done? Needs to be checked @@ -18358,7 +18365,7 @@ static enum check_auth_result check_peer_ok(struct sip_pvt *p, char *of, if (!peer) { char *uri_tmp, *callback = NULL, *dummy; uri_tmp = ast_strdupa(uri2); - parse_uri(uri_tmp, "sip:,sips:", &callback, &dummy, &dummy, &dummy); + parse_uri(uri_tmp, "sip:,sips:,tel:", &callback, &dummy, &dummy, &dummy); if (!ast_strlen_zero(callback) && (peer = sip_find_peer_by_ip_and_exten(&p->recv, callback, p->socket.type))) { ; /* found, fall through */ } else { diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index 4ea20ea4c9..9737806e37 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -1038,6 +1038,7 @@ struct sip_pvt { AST_STRING_FIELD(last_presence_subtype); /*!< The last presence subtype sent for a subscription. */ AST_STRING_FIELD(last_presence_message); /*!< The last presence message for a subscription */ AST_STRING_FIELD(msg_body); /*!< Text for a MESSAGE body */ + AST_STRING_FIELD(tel_phone_context); /*!< The phone-context portion of a TEL URI */ ); char via[128]; /*!< Via: header */ int maxforwards; /*!< SIP Loop prevention */