mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-14 01:49:05 +00:00
Sofia Behaviour Modification (please document)
1) This commit adds the ability to override the To: header so you can place an outbound SIP call to a paticular destination. For instance, if you have a user registered to your machine as 'gateway' and you want to call another extension at that machine 'foo' you can now call: sofia/mydomain.com/gateway:foo@anydomain.com or if you just want to call some SIP url and put an alternate To: so you can do forwarding: sofia/mydomain.com/1000@somwhere.com:12122551234@realdest.com 2) You can add headers to outbound SIP calls by prefixing the string 'SIP_h_' to any channel variable: <action application="set" data="SIP_h_X-Answer=42"/> <action application="bridge" data="sofia/mydomain.com/1000@somehost.com"/> 3) All inbound SIP calls will install any X- headers into local variables this means in conjunction with item 2, all X- headers will pass across bridged calls auto-magicly. 4) The switch_ivr_transfer_variable function in switch_ivr.c has been modified so if the last arguement 'var' starts with a ~ it will copy anything that is prefixed with that string rather than an exact match. *NOTE* you are not required to put an X- prefix in the SIP_h_ vars but it is reccommended because most SIP devices will ignore any unknown headers that don't. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4216 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -3693,8 +3693,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_transfer_variable(switch_core_session
|
||||
switch_channel_t *chana = switch_core_session_get_channel(sessa);
|
||||
switch_channel_t *chanb = switch_core_session_get_channel(sessb);
|
||||
char *val = NULL;
|
||||
uint8_t prefix = 0;
|
||||
|
||||
if (var) {
|
||||
if (var && *var == '~') {
|
||||
var++;
|
||||
prefix = 1;
|
||||
}
|
||||
|
||||
|
||||
if (var && !prefix) {
|
||||
if ((val = switch_channel_get_variable(chana, var))) {
|
||||
switch_channel_set_variable(chanb, var, val);
|
||||
}
|
||||
@@ -3705,7 +3712,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_transfer_variable(switch_core_session
|
||||
|
||||
for (hi = switch_channel_variable_first(chana, switch_core_session_get_pool(sessa)); hi; hi = switch_hash_next(hi)) {
|
||||
switch_hash_this(hi, &vvar, NULL, &vval);
|
||||
if (vvar && vval) {
|
||||
if (vvar && vval && (!prefix || (var && !strncmp((char *)vvar, var, strlen(var))))) {
|
||||
switch_channel_set_variable(chanb, (char *) vvar, (char *) vval);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user