Merge "chan_sip: Optionally supply fromuser/fromdomain in SIP dial string."

This commit is contained in:
zuul
2016-02-25 17:56:42 -06:00
committed by Gerrit Code Review
4 changed files with 63 additions and 3 deletions

View File

@@ -81,6 +81,11 @@ chan_sip
* DTLS related configuration options can now be set at a general level. * DTLS related configuration options can now be set at a general level.
Enabling DTLS support, though, requires enabling it at the user Enabling DTLS support, though, requires enabling it at the user
or peer level. or peer level.
* Added the possibility to set the From: header through the the SIP dial
string (populating the fromuser/fromdomain fields), complementing the
[!dnid] option for the To: header that has existed since 1.6.0 (1d6b192).
NOTE: This is again separated by an exclamation mark, so the To: header may
not contain one of those.
chan_pjsip chan_pjsip
------------------ ------------------

View File

@@ -31,6 +31,11 @@ chan_dahdi:
ring-ring-ring pattern would exceed the pattern limits and stop ring-ring-ring pattern would exceed the pattern limits and stop
Caller-ID detection. Caller-ID detection.
chan_sip:
- The SIP dial string has been extended past the [!dnid] option by another
exclamation mark: [!dnid[!fromuri]. An exclamation mark in the To-URI
will now mean changes to the From-URI.
Core: Core:
- The REF_DEBUG compiler flag is now used to enable refdebug by default. - The REF_DEBUG compiler flag is now used to enable refdebug by default.
The setting can be overridden in asterisk.conf by setting refdebug in The setting can be overridden in asterisk.conf by setting refdebug in

View File

@@ -29680,7 +29680,8 @@ static int sip_devicestate(const char *data)
* or SIP/devicename/extension/IPorHost * or SIP/devicename/extension/IPorHost
* or SIP/username@domain//IPorHost * or SIP/username@domain//IPorHost
* and there is an optional [!dnid] argument you can append to alter the * and there is an optional [!dnid] argument you can append to alter the
* To: header. * To: header. And after that, a [![fromuser][@fromdomain]] argument.
* Leave those blank to use the defaults.
* \endverbatim * \endverbatim
*/ */
static struct ast_channel *sip_request_call(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *dest, int *cause) static struct ast_channel *sip_request_call(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *dest, int *cause)
@@ -29752,11 +29753,49 @@ static struct ast_channel *sip_request_call(const char *type, struct ast_format_
/* Save the destination, the SIP dial string */ /* Save the destination, the SIP dial string */
ast_copy_string(tmp, dest, sizeof(tmp)); ast_copy_string(tmp, dest, sizeof(tmp));
/* Find DNID and take it away */ /* Find optional DNID (SIP to-uri) and From-CLI (SIP from-uri)
* and strip it from the dial string:
* [!touser[@todomain][![fromuser][@fromdomain]]]
* For historical reasons, the touser@todomain is passed as dnid
* while fromuser@fromdomain are split immediately. Passing a
* todomain without touser will create an invalid SIP message. */
dnid = strchr(tmp, '!'); dnid = strchr(tmp, '!');
if (dnid != NULL) { if (dnid != NULL) {
char *fromuser_and_domain;
*dnid++ = '\0'; *dnid++ = '\0';
ast_string_field_set(p, todnid, dnid); if ((fromuser_and_domain = strchr(dnid, '!'))) {
char *forward_compat;
char *fromdomain;
*fromuser_and_domain++ = '\0';
/* Cut it at a trailing NUL or trailing '!' for
* forward compatibility with extra arguments
* in the future. */
if ((forward_compat = strchr(fromuser_and_domain, '!'))) {
/* Ignore the rest.. */
*forward_compat = '\0';
}
if ((fromdomain = strchr(fromuser_and_domain, '@'))) {
*fromdomain++ = '\0';
/* Set fromdomain. */
if (!ast_strlen_zero(fromdomain)) {
ast_string_field_set(p, fromdomain, fromdomain);
}
}
/* Set fromuser. */
if (!ast_strlen_zero(fromuser_and_domain)) {
ast_string_field_set(p, fromuser, fromuser_and_domain);
}
}
/* Set DNID (touser/todomain). */
if (!ast_strlen_zero(dnid)) {
ast_string_field_set(p, todnid, dnid);
}
} }
/* Divvy up the items separated by slashes */ /* Divvy up the items separated by slashes */

View File

@@ -24,6 +24,9 @@
; SIP/devicename/extension ; SIP/devicename/extension
; SIP/devicename/extension/IPorHost ; SIP/devicename/extension/IPorHost
; SIP/username@domain//IPorHost ; SIP/username@domain//IPorHost
; And to alter the To: or the From: header, you can additionally append
; the following to any of the above strings:
; [![touser[@todomain]][![fromuser][@fromdomain]]]
; ;
; ;
; Devicename ; Devicename
@@ -57,6 +60,14 @@
; ;
; SIP/sales@mysipproxy!sales@edvina.net ; SIP/sales@mysipproxy!sales@edvina.net
; ;
; (Specifying only @todomain without touser will create an invalid SIP
; request.)
;
; Similarly, you can specify the From header as well, after a second
; exclamation mark:
;
; SIP/customer@mysipproxy!!customersupport@wearespindle.com
;
; A new feature for 1.8 allows one to specify a host or IP address to use ; A new feature for 1.8 allows one to specify a host or IP address to use
; when routing the call. This is typically used in tandem with func_srv if ; when routing the call. This is typically used in tandem with func_srv if
; multiple methods of reaching the same domain exist. The host or IP address ; multiple methods of reaching the same domain exist. The host or IP address