Revision
14829
Author
mrene
Date
2009-09-11 11:03:52 -0500 (Fri, 11 Sep 2009)

Log Message

mod_limit: fix counter-only mode in limit_hash_execute

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (14828 => 14829)


--- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c	2009-09-11 15:45:29 UTC (rev 14828)
+++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c	2009-09-11 16:03:52 UTC (rev 14829)
@@ -1059,7 +1059,6 @@
 	char *xfer_exten = NULL;
 	int max = -1;
 	int interval = 0;
-	char *szinterval = NULL;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
 	/* Parse application data  */
@@ -1078,6 +1077,7 @@
 	
 	/* If max is omitted, only act as a counter and skip maximum checks */
 	if (argc > 2) {
+		char *szinterval = NULL;
 		if ((szinterval = strchr(argv[2], '/')))
 		{
 			*szinterval++ = '\0';
@@ -1121,7 +1121,6 @@
 	char *app_arg = NULL;
 	int max = -1;
 	int interval = 0;
-	char *szinterval = NULL;
 
 	/* Parse application data  */
 	if (!switch_strlen_zero(data)) {
@@ -1129,7 +1128,7 @@
 		argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
 	}
 	
-	if (argc < 2) {
+	if (argc < 5) {
 		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "USAGE: limit_hash_execute %s\n", LIMITHASHEXECUTE_USAGE);
 		return;
 	}
@@ -1137,22 +1136,25 @@
 	realm = argv[0];
 	id = argv[1];
 	
-	/* If max is omitted, only act as a counter and skip maximum checks */
-	if (argc > 2) {
+	/* Accept '-' as unlimited (act as counter)*/
+	if (argv[2][0] == '-') {
+		max = -1;
+	} else {
+		char *szinterval = NULL;
+
 		if ((szinterval = strchr(argv[2], '/')))
 		{
 			*szinterval++ = '\0';
 			interval = atoi(szinterval);
 		}
-		
+
 		max = atoi(argv[2]);
-		
+
 		if (max < 0) {
 			max = 0;
-		}
+		}	
 	}
-
-
+	
 	app = argv[3];
 	app_arg = argv[4];