[svn-commits] jpeeler: branch jpeeler/feature14882 r284471 - /team/jpeeler/feature14882/main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Aug 31 18:28:39 CDT 2010


Author: jpeeler
Date: Tue Aug 31 18:28:36 2010
New Revision: 284471

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=284471
Log:
add a callback instead of iterating manually and some other minor changes

Modified:
    team/jpeeler/feature14882/main/features.c

Modified: team/jpeeler/feature14882/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/jpeeler/feature14882/main/features.c?view=diff&rev=284471&r1=284470&r2=284471
==============================================================================
--- team/jpeeler/feature14882/main/features.c (original)
+++ team/jpeeler/feature14882/main/features.c Tue Aug 31 18:28:36 2010
@@ -289,6 +289,7 @@
  ***/
 
 #define DEFAULT_PARK_TIME 45000
+#define DEFAULT_PARK_EXTENSION "700"
 #define DEFAULT_TRANSFER_DIGIT_TIMEOUT 3000
 #define DEFAULT_FEATURE_DIGIT_TIMEOUT 1000
 #define DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER 15000
@@ -442,6 +443,18 @@
 struct ast_parkinglot *find_parkinglot(const char *name);
 static struct ast_parkinglot *create_parkinglot(const char *name);
 static struct ast_parkinglot *copy_parkinglot(const char *name, const struct ast_parkinglot *parkinglot);
+
+static int find_parkinglot_by_position_cb(void *obj, void *args, int flags)
+{
+	struct ast_parkinglot *parkinglot = obj;
+	int *parkpos = args;
+
+	if (*parkpos >= parkinglot->parking_start && *parkpos <= parkinglot->parking_stop) {
+		return CMP_MATCH | CMP_STOP;
+	}
+
+	return 0;
+}
 
 static int find_parkinglot_by_exten_cb(void *obj, void *args, int flags)
 {
@@ -4009,21 +4022,13 @@
 	struct ast_context *con;
 	int park = 0;
 	struct ast_bridge_config config;
-	struct ao2_iterator iter;
-	struct ast_parkinglot* parkinglot;
+	struct ast_parkinglot *parkinglot;
 
 	if (data) {
 		park = atoi((char *) data);	/* char to int */
 	}
 
-	iter = ao2_iterator_init(parkinglots, 0); /* searching for the proper parkinglot */
-	while ((parkinglot = ao2_iterator_next(&iter))) {
-		ao2_ref(parkinglot, -1);
-		if (park >= parkinglot->parking_start && park <= parkinglot->parking_stop) {  /* found parkinglot */
-			break;
-		}
-	}
-
+	parkinglot = ao2_callback(parkinglots, 0, find_parkinglot_by_position_cb, (void *) &park);
 	if (!parkinglot)
 		parkinglot = default_parkinglot;
 
@@ -4334,10 +4339,9 @@
 	if (parkinglot->parkingtime == 0) {
 		parkinglot->parkingtime = DEFAULT_PARK_TIME;
 	}
-	/* if there's no parkext specified - set to default */
 	if (ast_strlen_zero(parkinglot->parkext)) {
-		ast_debug(2, "no parkext specified for %s - setting it to %s\n", parkinglot->name, "700");
-		ast_copy_string(parkinglot->parkext, "700", sizeof(parkinglot->parkext));
+		ast_debug(2, "no parkext specified for %s - setting it to %s\n", parkinglot->name, DEFAULT_PARK_EXTENSION);
+		ast_copy_string(parkinglot->parkext, DEFAULT_PARK_EXTENSION, sizeof(parkinglot->parkext));
 	}
 
 	if (!var) {	/* Default parking lot */
@@ -4420,7 +4424,7 @@
 	default_parkinglot = build_parkinglot(DEFAULT_PARKINGLOT, NULL);
 	if (default_parkinglot) {
 		ao2_lock(default_parkinglot);
-		ast_copy_string(default_parkinglot->parkext,"700",sizeof(default_parkinglot->parkext));
+		ast_copy_string(default_parkinglot->parkext, DEFAULT_PARK_EXTENSION, sizeof(default_parkinglot->parkext));
 		default_parkinglot->parking_start = 701;
 		default_parkinglot->parking_stop = 750;
 		default_parkinglot->parking_offset = 0;
@@ -4437,7 +4441,7 @@
 	}
 
 	/* Reset to defaults */
-	strcpy(default_parkinglot->parkext,"700");
+	strcpy(default_parkinglot->parkext, DEFAULT_PARK_EXTENSION);
 	strcpy(pickup_ext, "*8");
 	courtesytone[0] = '\0';
 	strcpy(xfersound, "beep");
@@ -4683,8 +4687,8 @@
 	while ((ctg = ast_category_browse(cfg, ctg))) {
 		/* Is this a parkinglot definition ? */
 		if (!strncasecmp(ctg, "parkinglot_", strlen("parkinglot_"))) {
-			ast_debug(2, "Found configuration section %s, assume parking context\n", ctg); 
-			if(!build_parkinglot(ctg, ast_variable_browse(cfg, ctg))) /* Build a new parkinglot */
+			ast_debug(2, "Found configuration section %s, assume parking context\n", ctg);
+			if(!build_parkinglot(ctg, ast_variable_browse(cfg, ctg)))
 				ast_log(LOG_ERROR, "Could not build parking lot %s. Configuration error.\n", ctg);
 			else
 				ast_debug(1, "Configured parking context %s\n", ctg);
@@ -4726,11 +4730,11 @@
 		ast_log(LOG_ERROR, "Parking context '%s' does not exist and unable to create\n", default_parkinglot->parking_con);
 		return -1;
 	}
-	res = ast_add_extension2(con, 1, default_parkinglot->parkext, 1, NULL, NULL, parkcall, NULL, NULL, registrar);
+	res = ast_add_extension2(con, 1, DEFAULT_PARK_EXTENSION, 1, NULL, NULL, parkcall, NULL, NULL, registrar);
 	if (default_parkinglot->parkaddhints)
 		park_add_hints(default_parkinglot->parking_con, default_parkinglot->parking_start, default_parkinglot->parking_stop);
 	if (!res)
-		notify_metermaids(default_parkinglot->parkext, default_parkinglot->parking_con, AST_DEVICE_INUSE); 
+		notify_metermaids(DEFAULT_PARK_EXTENSION, default_parkinglot->parking_con, AST_DEVICE_INUSE); 
 	return res;
 
 }
@@ -5625,4 +5629,3 @@
 
 	return res;
 }
-




More information about the svn-commits mailing list