diff options
-rw-r--r-- | channels/chan_sip.c | 24 | ||||
-rw-r--r-- | include/asterisk/frame.h | 3 | ||||
-rw-r--r-- | main/frame.c | 10 |
3 files changed, 28 insertions, 9 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a5cfbfd1d..e71af5e12 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -15806,9 +15806,13 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int user->amaflags = format; } } else if (!strcasecmp(v->name, "allow")) { - ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 1); + int error = ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, TRUE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "disallow")) { - ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, 0); + int error = ast_parse_allow_disallow(&user->prefs, &user->capability, v->value, FALSE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "autoframing")) { user->autoframing = ast_true(v->value); } else if (!strcasecmp(v->name, "callingpres")) { @@ -16079,9 +16083,13 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str } else if (!strcasecmp(v->name, "pickupgroup")) { peer->pickupgroup = ast_get_group(v->value); } else if (!strcasecmp(v->name, "allow")) { - ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, 1); + int error = ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, TRUE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "disallow")) { - ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, 0); + int error = ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, FALSE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "autoframing")) { peer->autoframing = ast_true(v->value); } else if (!strcasecmp(v->name, "rtptimeout")) { @@ -16440,9 +16448,13 @@ static int reload_config(enum channelreloadreason reason) externrefresh = 10; } } else if (!strcasecmp(v->name, "allow")) { - ast_parse_allow_disallow(&default_prefs, &global_capability, v->value, 1); + int error = ast_parse_allow_disallow(&default_prefs, &global_capability, v->value, TRUE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "disallow")) { - ast_parse_allow_disallow(&default_prefs, &global_capability, v->value, 0); + int error = ast_parse_allow_disallow(&default_prefs, &global_capability, v->value, FALSE); + if (error) + ast_log(LOG_WARNING, "Codec configuration errors found in line %d : %s = %s\n", v->lineno, v->name, v->value); } else if (!strcasecmp(v->name, "autoframing")) { global_autoframing = ast_true(v->value); } else if (!strcasecmp(v->name, "allowexternaldomains")) { diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h index 49968ff36..f78a6a6be 100644 --- a/include/asterisk/frame.h +++ b/include/asterisk/frame.h @@ -533,8 +533,9 @@ struct ast_format_list ast_codec_pref_getsize(struct ast_codec_pref *pref, int f /*! \brief Parse an "allow" or "deny" line in a channel or device configuration and update the capabilities mask and pref if provided. Video codecs are not added to codec preference lists, since we can not transcode + \return Returns number of errors encountered during parsing */ -void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char *list, int allowing); +int ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char *list, int allowing); /*! \brief Dump audio codec preference list into a string */ int ast_codec_pref_string(struct ast_codec_pref *pref, char *buf, size_t size); diff --git a/main/frame.c b/main/frame.c index a6fd97ac9..ba796d174 100644 --- a/main/frame.c +++ b/main/frame.c @@ -1143,8 +1143,9 @@ int ast_codec_choose(struct ast_codec_pref *pref, int formats, int find_best) return find_best ? ast_best_codec(formats) : 0; } -void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char *list, int allowing) +int ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char *list, int allowing) { + int errors = 0; char *parse = NULL, *this = NULL, *psize = NULL; int format = 0, framems = 0; @@ -1156,11 +1157,15 @@ void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char if (option_debug) ast_log(LOG_DEBUG,"Packetization for codec: %s is %s\n", this, psize); framems = atoi(psize); - if (framems < 0) + if (framems < 0) { framems = 0; + errors++; + ast_log(LOG_WARNING, "Bad packetization value for codec %s\n", this); + } } if (!(format = ast_getformatbyname(this))) { ast_log(LOG_WARNING, "Cannot %s unknown format '%s'\n", allowing ? "allow" : "disallow", this); + errors++; continue; } @@ -1187,6 +1192,7 @@ void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char } } } + return errors; } static int g723_len(unsigned char buf) |