diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-10-21 15:14:06 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-10-21 15:14:06 +0000 |
commit | b478513f785517f98fd55fc0f4f2d8b242b2680a (patch) | |
tree | 52bfcd1a74a193658682628d4900c9462e9edec9 | |
parent | c1d51696c64f968b101f50c84fbefcd3afbed937 (diff) |
Merged revisions 225033 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r225033 | dvossel | 2009-10-21 09:39:10 -0500 (Wed, 21 Oct 2009) | 27 lines
Merged revisions 225032 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r225032 | dvossel | 2009-10-21 09:37:04 -0500 (Wed, 21 Oct 2009) | 20 lines
IAX/SIP shrinkcallerid option
The shrinking of caller id removes '(', ' ', ')', non-trailing '.',
and '-' from the string. This means values such as 555.5555 and
test-test result in 555555 and testtest. There are instances,
such as Skype integration, where a specific value is passed via
caller id that must be preserved unmodified. This patch makes
the shrinking of caller id optional in chan_sip and chan_iax in
order to support such cases. By default this option is on to
preserve previous expected behavior.
(closes issue #15940)
Reported by: dimas
Patches:
v2-15940.patch uploaded by dimas (license 88)
15940_shrinkcallerid_trunk.c uploaded by dvossel (license 671)
Tested by: dvossel
Review: https://reviewboard.asterisk.org/r/408/
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@225035 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_iax2.c | 18 | ||||
-rw-r--r-- | channels/chan_sip.c | 16 | ||||
-rw-r--r-- | configs/iax.conf.sample | 9 | ||||
-rw-r--r-- | configs/sip.conf.sample | 9 |
4 files changed, 46 insertions, 6 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index e83a1913b..ab28c638d 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -379,6 +379,7 @@ enum iax2_flags { IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */ IAX_IMMEDIATE = (1 << 27), /*!< Allow immediate off-hook to extension s */ IAX_FORCE_ENCRYPT = (1 << 28), /*!< Forces call encryption, if encryption not possible hangup */ + IAX_SHRINKCALLERID = (1 << 29), /*!< Turn on and off caller id shrinking */ }; static int global_rtautoclear = 120; @@ -7143,7 +7144,9 @@ static int check_access(int callno, struct sockaddr_in *sin, struct iax_ies *ies if (ies->called_number) ast_string_field_set(iaxs[callno], exten, ies->called_number); if (ies->calling_number) { - ast_shrink_phone_number(ies->calling_number); + if (ast_test_flag(&globalflags, IAX_SHRINKCALLERID)) { + ast_shrink_phone_number(ies->calling_number); + } ast_string_field_set(iaxs[callno], cid_num, ies->calling_number); } if (ies->calling_name) @@ -12472,7 +12475,8 @@ static int set_config(const char *config_file, int reload) /* Reset Global Flags */ memset(&globalflags, 0, sizeof(globalflags)); ast_set_flag(&globalflags, IAX_RTUPDATE); - + ast_set_flag(&globalflags, IAX_SHRINKCALLERID); + #ifdef SO_NO_CHECK nochecksums = 0; #endif @@ -12724,10 +12728,18 @@ static int set_config(const char *config_file, int reload) if (sscanf(v->value, "%10hu", &global_maxcallno_nonval) != 1) { ast_log(LOG_WARNING, "maxcallnumbers_nonvalidated must be set to a valid number. %s is not valid at line %d.\n", v->value, v->lineno); } - } else if(!strcasecmp(v->name, "calltokenoptional")) { + } else if (!strcasecmp(v->name, "calltokenoptional")) { if (add_calltoken_ignore(v->value)) { ast_log(LOG_WARNING, "Invalid calltokenoptional address range - '%s' line %d\n", v->value, v->lineno); } + } else if (!strcasecmp(v->name, "shrinkcallerid")) { + if (ast_true(v->value)) { + ast_set_flag((&globalflags), IAX_SHRINKCALLERID); + } else if (ast_false(v->value)) { + ast_clear_flag((&globalflags), IAX_SHRINKCALLERID); + } else { + ast_log(LOG_WARNING, "shrinkcallerid value %s is not valid at line %d.\n", v->value, v->lineno); + } }/*else if (strcasecmp(v->name,"type")) */ /* ast_log(LOG_WARNING, "Ignoring %s\n", v->name); */ v = v->next; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 64ae98d1e..196eb80c0 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1087,6 +1087,7 @@ static int global_rtpholdtimeout; /*!< Time out call if no RTP during hold */ static int global_rtpkeepalive; /*!< Send RTP keepalives */ static int global_reg_timeout; static int global_regattempts_max; /*!< Registration attempts before giving up */ +static int global_shrinkcallerid; /*!< enable or disable shrinking of caller id */ static int global_callcounter; /*!< Enable call counters for all devices. This is currently enabled by setting the peer call-limit to INT_MAX. When we remove the call-limit from the code, we can make it with just a boolean flag in the device structure */ @@ -13484,7 +13485,7 @@ static void replace_cid(struct sip_pvt *p, const char *rpid_num, const char *cal char *tmp = ast_strdupa(rpid_num); /* XXX the copy can be done later */ if (!ast_strlen_zero(calleridname)) ast_string_field_set(p, cid_name, calleridname); - if (ast_is_shrinkable_phonenumber(tmp)) + if (global_shrinkcallerid && ast_is_shrinkable_phonenumber(tmp)) ast_shrink_phone_number(tmp); ast_string_field_set(p, cid_num, tmp); } @@ -13602,7 +13603,7 @@ static enum check_auth_result check_peer_ok(struct sip_pvt *p, char *of, } if (!ast_strlen_zero(peer->cid_num)) { char *tmp = ast_strdupa(peer->cid_num); - if (ast_is_shrinkable_phonenumber(tmp)) + if (global_shrinkcallerid && ast_is_shrinkable_phonenumber(tmp)) ast_shrink_phone_number(tmp); ast_string_field_set(p, cid_num, tmp); } @@ -13718,7 +13719,7 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ <sip:8164444422;phone-context=+1@1.2.3.4:5060;user=phone;tag=SDadkoa01-gK0c3bdb43> */ tmp = strsep(&tmp, ";"); - if (ast_is_shrinkable_phonenumber(tmp)) + if (global_shrinkcallerid && ast_is_shrinkable_phonenumber(tmp)) ast_shrink_phone_number(tmp); ast_string_field_set(p, cid_num, tmp); } @@ -23919,6 +23920,7 @@ static int reload_config(enum channelreloadreason reason) global_t1min = DEFAULT_T1MIN; global_qualifyfreq = DEFAULT_QUALIFYFREQ; global_t38_maxdatagram = -1; + global_shrinkcallerid = 1; sip_cfg.matchexterniplocally = DEFAULT_MATCHEXTERNIPLOCALLY; @@ -24369,6 +24371,14 @@ static int reload_config(enum channelreloadreason reason) ast_log(LOG_WARNING, "Invalid pokepeers '%s' at line %d of %s\n", v->value, v->lineno, config); global_qualify_peers = DEFAULT_QUALIFY_PEERS; } + } else if (!strcasecmp(v->name, "shrinkcallerid")) { + if (ast_true(v->value)) { + global_shrinkcallerid = 1; + } else if (ast_false(v->value)) { + global_shrinkcallerid = 0; + } else { + ast_log(LOG_WARNING, "shrinkcallerid value %s is not valid at line %d.\n", v->value, v->lineno); + } } } diff --git a/configs/iax.conf.sample b/configs/iax.conf.sample index a10db8670..55a114a08 100644 --- a/configs/iax.conf.sample +++ b/configs/iax.conf.sample @@ -381,6 +381,15 @@ autokill=yes ;10.1.2.0/255.255.255.0 = 32 ; +; The shrinkcallerid function removes '(', ' ', ')', non-trailing '.', and '-' not +; in square brackets. For example, the caller id value 555.5555 becomes 5555555 +; when this option is enabled. Disabling this option results in no modification +; of the caller id value, which is necessary when the caller id represents something +; that must be preserved. This option can only be used in the [general] section. +; By default this option is on. +; +;shrinkcallerid=yes ; on by default + ; Guest sections for unauthenticated connection attempts. Just specify an ; empty secret, or provide no secret section. ; diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index f0090b45d..ffe895635 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -297,6 +297,15 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ;contactpermit=172.16.0.0/255.255.0.0 ; restrict at what IPs your users may ; register their phones. +; The shrinkcallerid function removes '(', ' ', ')', non-trailing '.', and '-' not +; in square brackets. For example, the caller id value 555.5555 becomes 5555555 +; when this option is enabled. Disabling this option results in no modification +; of the caller id value, which is necessary when the caller id represents something +; that must be preserved. This option can only be used in the [general] section. +; By default this option is on. +; +;shrinkcallerid=yes ; on by default + ; ; If regcontext is specified, Asterisk will dynamically create and destroy a ; NoOp priority 1 extension for a given peer who registers or unregisters with |