mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-22 13:25:17 +00:00
Implement the '!' negation element to negate codecs directly in the allow keyword.
This permits the list of codecs to be specified in one configuration line, instead of two or more, generally with the aim of either allowing all codecs with the exception of a few or disallowing most but permitting a few. Review: https://reviewboard.asterisk.org/r/1411/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@334574 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
7
CHANGES
7
CHANGES
@@ -24,6 +24,13 @@ Chan_local changes
|
|||||||
* Added a manager event "LocalBridge" for local channel call bridges between
|
* Added a manager event "LocalBridge" for local channel call bridges between
|
||||||
the two pseudo-channels created.
|
the two pseudo-channels created.
|
||||||
|
|
||||||
|
Codec changes
|
||||||
|
-------------
|
||||||
|
* Codec lists may now be modified by the '!' character, to allow succinct
|
||||||
|
specification of a list of codecs allowed and disallowed, without the
|
||||||
|
requirement to use two different keywords. For example, to specify all
|
||||||
|
codecs except g729 and g723, one need only specify allow=all,!g729,!g723.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 1.8 to Asterisk 10 -------------------
|
--- Functionality changes from Asterisk 1.8 to Asterisk 10 -------------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@@ -1216,10 +1216,14 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
|
|||||||
allow=gsm
|
allow=gsm
|
||||||
allow=g723
|
allow=g723
|
||||||
allow=ulaw
|
allow=ulaw
|
||||||
|
; Or, more simply:
|
||||||
|
;allow=!all,ilbc,g729,gsm,g723,ulaw
|
||||||
|
|
||||||
[ulaw-phone](!) ; and another one for ulaw-only
|
[ulaw-phone](!) ; and another one for ulaw-only
|
||||||
disallow=all
|
disallow=all
|
||||||
allow=ulaw
|
allow=ulaw
|
||||||
|
; Again, more simply:
|
||||||
|
;allow=!all,ulaw
|
||||||
|
|
||||||
; and finally instantiate a few phones
|
; and finally instantiate a few phones
|
||||||
;
|
;
|
||||||
|
@@ -37,8 +37,7 @@ CREATE TABLE `iaxfriends` (
|
|||||||
`transfer` varchar(10) NULL, -- mediaonly/yes/no
|
`transfer` varchar(10) NULL, -- mediaonly/yes/no
|
||||||
`jitterbuffer` varchar(3) NULL, -- yes/no
|
`jitterbuffer` varchar(3) NULL, -- yes/no
|
||||||
`forcejitterbuffer` varchar(3) NULL, -- yes/no
|
`forcejitterbuffer` varchar(3) NULL, -- yes/no
|
||||||
`disallow` varchar(40) NULL, -- all/{list-of-codecs}
|
`allow` varchar(200) NULL, -- all/{list-of-codecs}
|
||||||
`allow` varchar(40) NULL, -- all/{list-of-codecs}
|
|
||||||
`codecpriority` varchar(40) NULL,
|
`codecpriority` varchar(40) NULL,
|
||||||
`qualify` varchar(10) NULL, -- yes/no/{number of milliseconds}
|
`qualify` varchar(10) NULL, -- yes/no/{number of milliseconds}
|
||||||
`qualifysmoothing` varchar(10) NULL, -- yes/no
|
`qualifysmoothing` varchar(10) NULL, -- yes/no
|
||||||
|
@@ -28,8 +28,7 @@ CREATE TABLE IF NOT EXISTS `sipfriends` (
|
|||||||
`callgroup` varchar(40) DEFAULT NULL,
|
`callgroup` varchar(40) DEFAULT NULL,
|
||||||
`pickupgroup` varchar(40) DEFAULT NULL,
|
`pickupgroup` varchar(40) DEFAULT NULL,
|
||||||
`language` varchar(40) DEFAULT NULL,
|
`language` varchar(40) DEFAULT NULL,
|
||||||
`allow` varchar(40) DEFAULT NULL,
|
`allow` varchar(200) DEFAULT NULL,
|
||||||
`disallow` varchar(40) DEFAULT NULL,
|
|
||||||
`insecure` varchar(40) DEFAULT NULL,
|
`insecure` varchar(40) DEFAULT NULL,
|
||||||
`trustrpid` enum('yes','no') DEFAULT NULL,
|
`trustrpid` enum('yes','no') DEFAULT NULL,
|
||||||
`progressinband` enum('yes','no','never') DEFAULT NULL,
|
`progressinband` enum('yes','no','never') DEFAULT NULL,
|
||||||
|
@@ -61,8 +61,7 @@ rtpholdtimeout character varying(3),
|
|||||||
secret character varying(80),
|
secret character varying(80),
|
||||||
"type" character varying DEFAULT 'friend' NOT NULL,
|
"type" character varying DEFAULT 'friend' NOT NULL,
|
||||||
username character varying(80) DEFAULT '' NOT NULL,
|
username character varying(80) DEFAULT '' NOT NULL,
|
||||||
disallow character varying(100) DEFAULT 'all',
|
allow character varying(200) DEFAULT '!all,g729,ilbc,gsm,ulaw,alaw',
|
||||||
allow character varying(100) DEFAULT 'g729;ilbc;gsm;ulaw;alaw',
|
|
||||||
musiconhold character varying(100),
|
musiconhold character varying(100),
|
||||||
regseconds bigint DEFAULT 0::bigint NOT NULL,
|
regseconds bigint DEFAULT 0::bigint NOT NULL,
|
||||||
ipaddr character varying(40) DEFAULT '' NOT NULL,
|
ipaddr character varying(40) DEFAULT '' NOT NULL,
|
||||||
|
15
main/frame.c
15
main/frame.c
@@ -730,13 +730,18 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
|||||||
|
|
||||||
int ast_parse_allow_disallow(struct ast_codec_pref *pref, struct ast_format_cap *cap, const char *list, int allowing)
|
int ast_parse_allow_disallow(struct ast_codec_pref *pref, struct ast_format_cap *cap, const char *list, int allowing)
|
||||||
{
|
{
|
||||||
int errors = 0, framems = 0, all = 0;
|
int errors = 0, framems = 0, all = 0, iter_allowing;
|
||||||
char *parse = NULL, *this = NULL, *psize = NULL;
|
char *parse = NULL, *this = NULL, *psize = NULL;
|
||||||
struct ast_format format;
|
struct ast_format format;
|
||||||
|
|
||||||
parse = ast_strdupa(list);
|
parse = ast_strdupa(list);
|
||||||
while ((this = strsep(&parse, ","))) {
|
while ((this = strsep(&parse, ","))) {
|
||||||
|
iter_allowing = allowing;
|
||||||
framems = 0;
|
framems = 0;
|
||||||
|
if (*this == '!') {
|
||||||
|
this++;
|
||||||
|
iter_allowing = !allowing;
|
||||||
|
}
|
||||||
if ((psize = strrchr(this, ':'))) {
|
if ((psize = strrchr(this, ':'))) {
|
||||||
*psize++ = '\0';
|
*psize++ = '\0';
|
||||||
ast_debug(1, "Packetization for codec: %s is %s\n", this, psize);
|
ast_debug(1, "Packetization for codec: %s is %s\n", this, psize);
|
||||||
@@ -750,13 +755,13 @@ int ast_parse_allow_disallow(struct ast_codec_pref *pref, struct ast_format_cap
|
|||||||
all = strcasecmp(this, "all") ? 0 : 1;
|
all = strcasecmp(this, "all") ? 0 : 1;
|
||||||
|
|
||||||
if (!all && !ast_getformatbyname(this, &format)) {
|
if (!all && !ast_getformatbyname(this, &format)) {
|
||||||
ast_log(LOG_WARNING, "Cannot %s unknown format '%s'\n", allowing ? "allow" : "disallow", this);
|
ast_log(LOG_WARNING, "Cannot %s unknown format '%s'\n", iter_allowing ? "allow" : "disallow", this);
|
||||||
errors++;
|
errors++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cap) {
|
if (cap) {
|
||||||
if (allowing) {
|
if (iter_allowing) {
|
||||||
if (all) {
|
if (all) {
|
||||||
ast_format_cap_add_all(cap);
|
ast_format_cap_add_all(cap);
|
||||||
} else {
|
} else {
|
||||||
@@ -773,13 +778,13 @@ int ast_parse_allow_disallow(struct ast_codec_pref *pref, struct ast_format_cap
|
|||||||
|
|
||||||
if (pref) {
|
if (pref) {
|
||||||
if (!all) {
|
if (!all) {
|
||||||
if (allowing) {
|
if (iter_allowing) {
|
||||||
ast_codec_pref_append(pref, &format);
|
ast_codec_pref_append(pref, &format);
|
||||||
ast_codec_pref_setsize(pref, &format, framems);
|
ast_codec_pref_setsize(pref, &format, framems);
|
||||||
} else {
|
} else {
|
||||||
ast_codec_pref_remove(pref, &format);
|
ast_codec_pref_remove(pref, &format);
|
||||||
}
|
}
|
||||||
} else if (!allowing) {
|
} else if (!iter_allowing) {
|
||||||
memset(pref, 0, sizeof(*pref));
|
memset(pref, 0, sizeof(*pref));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user