[asterisk-commits] rmudgett: branch rmudgett/parking r331137 - /team/rmudgett/parking/main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Aug 9 10:37:46 CDT 2011


Author: rmudgett
Date: Tue Aug  9 10:37:42 2011
New Revision: 331137

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=331137
Log:
Reimplement parking findslot option broken since -r114655.

Modified:
    team/rmudgett/parking/main/features.c

Modified: team/rmudgett/parking/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/parking/main/features.c?view=diff&rev=331137&r1=331136&r2=331137
==============================================================================
--- team/rmudgett/parking/main/features.c (original)
+++ team/rmudgett/parking/main/features.c Tue Aug  9 10:37:42 2011
@@ -476,7 +476,6 @@
 
 /*! Parking lot configuration options. */
 struct parkinglot_cfg {
-/* BUGBUG need to reimplement parking findslot option.  Broken since -r114655 */
 	/*! Music class used for parking */
 	char mohclass[MAX_MUSICCLASS];
 	/*! Extension to park calls in this parking lot. */
@@ -530,6 +529,8 @@
 	 */
 	int parkedcallrecording;
 
+	/*! TRUE if findslot is set to next */
+	unsigned int parkfindnext:1;
 	/*! TRUE if the parking lot is exclusively accessed by parkext */
 	unsigned int parkext_exclusive:1;
 	/*! Add parking hints automatically */
@@ -544,6 +545,9 @@
 	char name[AST_MAX_CONTEXT];
 	/*! Parking lot user configuration. */
 	struct parkinglot_cfg cfg;
+
+	/*! Parking space to start next park search. */
+	int next_parking_space;
 
 	/*! That which bears the_mark shall be deleted if parking lot empty! (Used during reloads.) */
 	unsigned int the_mark:1;
@@ -1225,9 +1229,9 @@
 		if (parking_space < parkinglot->cfg.parking_start
 			|| parkinglot->cfg.parking_stop < parking_space) {
 			/*
-			 * Cannot allow park because parkinglot not setup for spaces
-			 * outside of lot.  (Things like dialplan hints don't exist for
-			 * outside lot space.)
+			 * Cannot allow park because parking lots are not setup for
+			 * spaces outside of the lot.  (Things like dialplan hints don't
+			 * exist for outside lot space.)
 			 */
 			ast_log(LOG_WARNING, "PARKINGEXTEN=%d is not in %s (%d-%d).\n",
 				parking_space, parkinglot->name, parkinglot->cfg.parking_start,
@@ -1258,7 +1262,13 @@
 		if (ast_test_flag(args, AST_PARK_OPT_RANDOMIZE)) {
 			start = ast_random() % (parkinglot->cfg.parking_stop - parkinglot->cfg.parking_start + 1);
 			start += parkinglot->cfg.parking_start;
-		} else { /* Otherwise, just set it to the start position. */
+		} else if (parkinglot->cfg.parkfindnext
+			&& parkinglot->cfg.parking_start <= parkinglot->next_parking_space
+			&& parkinglot->next_parking_space <= parkinglot->cfg.parking_stop) {
+			/* Start looking with the next parking space in the lot. */
+			start = parkinglot->next_parking_space;
+		} else {
+			/* Otherwise, just set it to the start position. */
 			start = parkinglot->cfg.parking_start;
 		}
 
@@ -1300,6 +1310,9 @@
 			return NULL;
 		}
 	}
+
+	/* Prepare for next parking space search. */
+	parkinglot->next_parking_space = parking_space + 1;
 
 	snprintf(pu->parkingexten, sizeof(pu->parkingexten), "%d", parking_space);
 	pu->notquiteyet = 1;
@@ -5163,6 +5176,8 @@
 				cfg->parking_start = start;
 				cfg->parking_stop = end;
 			}
+		} else if (!strcasecmp(var->name, "findslot")) {
+			cfg->parkfindnext = (!strcasecmp(var->value, "next"));
 		} else if (!strcasecmp(var->name, "parkedcalltransfers")) {
 			parkinglot_feature_flag_cfg(pl_name, &cfg->parkedcalltransfers, var);
 		} else if (!strcasecmp(var->name, "parkedcallreparking")) {




More information about the asterisk-commits mailing list