summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorMatt Jordan <mjordan@digium.com>2015-07-08 16:21:09 -0500
committerMatt Jordan <mjordan@digium.com>2015-07-12 17:54:48 -0500
commit5f13c2226a35f465ab70c8e25a885f1f3cdaa1c5 (patch)
treea8d3e52f08b4d57daa1f7c6dbbf26ab2c3fb2014 /main
parent5c491a629586ab7036107ae79935a39bcf793a0a (diff)
main/format_cap: Parse capabilities generated by ast_format_cap_get_names
We have a strange relationship between the parsing of format capabilities from a string and their representation as a string. We expect the format capabilities to be expressed as a string in the following format: allow = !all,ulaw,alaw disallow = g722 While we would generate the string representation of those formats as: allow = (ulaw|alaw) disallow = (ulaw|alaw|g729...) When the configuration framework needs to store values as a string, it generates the format capabilities using the second representation; this representation however cannot be parsed when the entry is rehydrated. This patch fixes that by updating ast_format_cap_update_by_allow_disallow to parse an entry as if it were in the generated format if it has a leading '(' and a trailing ')'. ASTERISK-25238 Change-Id: I904d43caf4cf45af06f6aee0c9e58556eb91d6ca
Diffstat (limited to 'main')
-rw-r--r--main/format_cap.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/main/format_cap.c b/main/format_cap.c
index cefad1316..b344f846e 100644
--- a/main/format_cap.c
+++ b/main/format_cap.c
@@ -324,7 +324,24 @@ int ast_format_cap_update_by_allow_disallow(struct ast_format_cap *cap, const ch
}
parse = ast_strdupa(list);
- while ((this = strsep(&parse, ","))) {
+
+ /* If the list is being fed to us as a result of ast_format_cap_get_names,
+ * strip off the paranthesis and immediately apply the inverse of the
+ * allowing option
+ */
+ if (parse[0] == '(' && parse[strlen(parse) - 1] == ')') {
+ parse++;
+ parse[strlen(parse) - 1] = '\0';
+
+ if (allowing) {
+ ast_format_cap_remove_by_type(cap, AST_MEDIA_TYPE_UNKNOWN);
+ } else {
+ ast_format_cap_append_by_type(cap, AST_MEDIA_TYPE_UNKNOWN);
+ }
+ }
+
+
+ while ((this = strsep(&parse, ",|"))) {
int framems = 0;
struct ast_format *format = NULL;