[asterisk-commits] oej: trunk r49093 - in /trunk: channels/ include/asterisk/ main/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon Jan 1 12:48:32 MST 2007


Author: oej
Date: Mon Jan  1 13:48:31 2007
New Revision: 49093

URL: http://svn.digium.com/view/asterisk?view=rev&rev=49093
Log:
- Add error handling to ast_parse_allow_disallow
- Use this in chan_sip configuration parsing

Modified:
    trunk/channels/chan_sip.c
    trunk/include/asterisk/frame.h
    trunk/main/frame.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=49093&r1=49092&r2=49093
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Mon Jan  1 13:48:31 2007
@@ -15806,9 +15806,13 @@
 				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 @@
 		} 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 @@
 				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")) {

Modified: trunk/include/asterisk/frame.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/frame.h?view=diff&rev=49093&r1=49092&r2=49093
==============================================================================
--- trunk/include/asterisk/frame.h (original)
+++ trunk/include/asterisk/frame.h Mon Jan  1 13:48:31 2007
@@ -533,8 +533,9 @@
 /*! \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
- */
-void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, const char *list, int allowing);
+	\return Returns number of errors encountered during parsing
+ */
+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);

Modified: trunk/main/frame.c
URL: http://svn.digium.com/view/asterisk/trunk/main/frame.c?view=diff&rev=49093&r1=49092&r2=49093
==============================================================================
--- trunk/main/frame.c (original)
+++ trunk/main/frame.c Mon Jan  1 13:48:31 2007
@@ -1143,8 +1143,9 @@
    	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 @@
 			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 @@
 			}
 		}
 	}
+	return errors;
 }
 
 static int g723_len(unsigned char buf)



More information about the asterisk-commits mailing list