From: Olle Johansson Date: Mon, 1 Jan 2007 19:48:31 +0000 (+0000) Subject: - Add error handling to ast_parse_allow_disallow X-Git-Tag: 1.6.0-beta1~3^2~3587 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9074555e37710be78028b554579a039036bd9d4e;p=thirdparty%2Fasterisk.git - Add error handling to ast_parse_allow_disallow - Use this in chan_sip configuration parsing git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49093 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a5cfbfd1d3..e71af5e12c 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 49968ff36a..f78a6a6beb 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 a6fd97ac9b..ba796d1748 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)