mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 17:38:59 +00:00
Ringback (sponsored by Front Logic)
This addition lets you set artifical ringback on a channel that is waiting for an originated call to be answered. the syntax is <action application="set" data="ringback=[data]"/> where data is either the full path to an audio file or a teletone generation script.. syntax of teletone scripts LEGEND: 0-9,a-d,*,# (standard dtmf tones) variables: c,r,d,v,>,<,+,w,l,L,% c (channels) - Sets the number of channels. r (rate) - Sets the sample rate. d (duration) - Sets the default tone duration. v (volume) - Sets the default volume. > (decrease vol) - factor to decrease volume by per frame (0 for even decrease across duration). < (increase vol) - factor to increase volume by per frame (0 for even increase across duration). + (step) - factor to step by used by < and >. w (wait) - default silence after each tone. l (loops) - number of times to repeat each tone in the script. L (LOOPS) - number of times to repeat the the whole script. % (manual tone) - a generic tone specified by a duration, a wait and a list of frequencies. standard tones can have custom duration per use with the () modifier 7(1000, 500) to generate DTMF 7 for 1 second then pause .5 seconds EXAMPLES UK Ring Tone [400+450 hz on for 400ms off for 200ms then 400+450 hz on for 400ms off for 2200ms] %(400,200,400,450);%(400,2200,400,450) US Ring Tone [440+480 hz on for 2000ms off for 4000ms] %(2000,4000,440,480) ATT BONG [volume level 4000, even decay, step by 2, # key for 60ms with no wait, volume level 2000, 350+440hz {us dialtone} for 940ms v=4000;>=0;+=2;#(60,0);v=2000;%(940,0,350,440) SIT Tone 913.8 hz for 274 ms with no wait, 1370.6 hz for 274 ms with no wait, 1776.7 hz for 380ms with no wait %(274,0,913.8);%(274,0,1370.6);%(380,0,1776.7) ATTN TONE (phone's off the hook!) 1400+2060+2450+2600 hz for 100ms with 100ms wait %(100,100,1400,2060,2450,2600) git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3408 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -344,7 +344,7 @@ SWITCH_DECLARE(void) switch_channel_presence(switch_channel_t *channel, char *rp
|
||||
|
||||
SWITCH_DECLARE(char *) switch_channel_get_variable(switch_channel_t *channel, char *varname)
|
||||
{
|
||||
char *v;
|
||||
char *v = NULL;
|
||||
assert(channel != NULL);
|
||||
|
||||
if (!(v=switch_core_hash_find(channel->variables, varname))) {
|
||||
@@ -352,6 +352,7 @@ SWITCH_DECLARE(char *) switch_channel_get_variable(switch_channel_t *channel, ch
|
||||
if (!strcmp(varname, "base_dir")) {
|
||||
return SWITCH_GLOBAL_dirs.base_dir;
|
||||
}
|
||||
v = switch_core_get_variable(varname);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1113,7 +1114,7 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel
|
||||
{
|
||||
char *p, *c;
|
||||
char *data, *indup;
|
||||
size_t sp = 0, len = 0, olen = 0, vtype = 0, br = 0, vnamepos, vvalpos, cpos, ppos, block = 128;
|
||||
size_t sp = 0, len = 0, olen = 0, vtype = 0, br = 0, cpos, block = 128;
|
||||
char *sub_val = NULL, *func_val = NULL;
|
||||
|
||||
if (!strchr(in, '$') && !strchr(in, '&')) {
|
||||
@@ -1195,36 +1196,35 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel
|
||||
return in;
|
||||
}
|
||||
}
|
||||
nlen = strlen(sub_val);
|
||||
nlen = sub_val ? strlen(sub_val) : 0;
|
||||
|
||||
if (len + nlen >= olen) {
|
||||
olen += block;
|
||||
olen = (olen + len + nlen + block);
|
||||
cpos = c - data;
|
||||
ppos = p - data;
|
||||
vnamepos = vname - data;
|
||||
vvalpos = vval - data;
|
||||
data = realloc(data, olen);
|
||||
|
||||
c = data + cpos;
|
||||
p = data + ppos;
|
||||
vname = data + vnamepos;
|
||||
vname = data + vvalpos;
|
||||
memset(c, 0, olen - cpos);
|
||||
}
|
||||
|
||||
len += nlen;
|
||||
strcat(c, sub_val);
|
||||
c += nlen;
|
||||
|
||||
if (func_val) {
|
||||
free(func_val);
|
||||
func_val = NULL;
|
||||
if (nlen) {
|
||||
len += nlen;
|
||||
strcat(c, sub_val);
|
||||
c += nlen;
|
||||
}
|
||||
|
||||
switch_safe_free(func_val);
|
||||
}
|
||||
if (sp) {
|
||||
*c++ = ' ';
|
||||
sp = 0;
|
||||
len++;
|
||||
}
|
||||
*c++ = *p;
|
||||
len++;
|
||||
|
||||
if (*p == '$' || *p == '&') {
|
||||
p--;
|
||||
} else {
|
||||
*c++ = *p;
|
||||
len++;
|
||||
}
|
||||
}
|
||||
}
|
||||
free(indup);
|
||||
|
Reference in New Issue
Block a user