[asterisk-commits] branch oej/metermaids-trunk r35237 - in /team/oej/metermaids-trunk: ./ channe...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Jun 21 07:14:30 MST 2006


Author: oej
Date: Wed Jun 21 09:14:29 2006
New Revision: 35237

URL: http://svn.digium.com/view/asterisk?rev=35237&view=rev
Log:
Trying to restore status notification after Kevin's changes to chan_local
devicestate that doesn't work with metermaids. Implementing a special
option for parking by adding "/park" to the device address...


Modified:
    team/oej/metermaids-trunk/channels/chan_local.c
    team/oej/metermaids-trunk/devicestate.c
    team/oej/metermaids-trunk/res/res_features.c

Modified: team/oej/metermaids-trunk/channels/chan_local.c
URL: http://svn.digium.com/view/asterisk/team/oej/metermaids-trunk/channels/chan_local.c?rev=35237&r1=35236&r2=35237&view=diff
==============================================================================
--- team/oej/metermaids-trunk/channels/chan_local.c (original)
+++ team/oej/metermaids-trunk/channels/chan_local.c Wed Jun 21 09:14:29 2006
@@ -123,11 +123,13 @@
 {
 	char *exten;
 	char *context;
-
+	char *option;
+	int parkmode = 0;
 	int res;
 		
 	exten = ast_strdupa(data);
 	context = strchr(exten, '@');
+	option = strchr(exten, '/');	/* Find parking option */
 
 	if (!context) {
 		ast_log(LOG_WARNING, "Someone used Local/%s somewhere without a @context. This is bad.\n", exten);
@@ -135,16 +137,23 @@
 	}
 
 	*context = '\0';
-	context = context + 1;
+	context++;
+
+	if (option) {
+		*option = '\0';
+		option++;
+		if (!strcasecmp(option, "park"))
+			parkmode = 1;
+	}
 
 	if (option_debug > 2)
-		ast_log(LOG_DEBUG, "Checking if extension %s@%s exists (devicestate)\n", exten, context);
+		ast_log(LOG_DEBUG, "Checking if extension %s@%s exists (devicestate%s)\n", exten, context, parkmode ? ", parkmode" : "");
 	res = ast_exists_extension(NULL, context, exten, 1, NULL);
-	if (!res) {
-		
-		return AST_DEVICE_INVALID;
-	} else
-		return AST_DEVICE_UNKNOWN;
+
+	if (!res)
+		return parkmode ? AST_DEVICE_UNAVAILABLE : AST_DEVICE_INVALID;
+	else
+		return parkmode ? AST_DEVICE_NOT_INUSE : AST_DEVICE_UNKNOWN;
 }
 
 static int local_queue_frame(struct local_pvt *p, int isoutbound, struct ast_frame *f, struct ast_channel *us)

Modified: team/oej/metermaids-trunk/devicestate.c
URL: http://svn.digium.com/view/asterisk/team/oej/metermaids-trunk/devicestate.c?rev=35237&r1=35236&r2=35237&view=diff
==============================================================================
--- team/oej/metermaids-trunk/devicestate.c (original)
+++ team/oej/metermaids-trunk/devicestate.c Wed Jun 21 09:14:29 2006
@@ -201,9 +201,14 @@
 	char *device, *tmp;
 	struct state_change *change;
 
+	if (option_debug > 2)
+		ast_log(LOG_DEBUG, "Notification of state change to be queued on device/channel %s\n", buf);
+
 	device = buf;
 	if ((tmp = strrchr(device, '-')))
 		*tmp = '\0';
+
+	
 
 	if (change_thread == AST_PTHREADT_NULL || !(change = ast_calloc(1, sizeof(*change) + strlen(device)))) {
 		/* we could not allocate a change struct, or */

Modified: team/oej/metermaids-trunk/res/res_features.c
URL: http://svn.digium.com/view/asterisk/team/oej/metermaids-trunk/res/res_features.c?rev=35237&r1=35236&r2=35237&view=diff
==============================================================================
--- team/oej/metermaids-trunk/res/res_features.c (original)
+++ team/oej/metermaids-trunk/res/res_features.c Wed Jun 21 09:14:29 2006
@@ -450,7 +450,7 @@
 		ast_log(LOG_ERROR, "Parking context '%s' does not exist and unable to create\n", parking_con);
 	else {		/* Add extension to context */
 		snprintf(exten, sizeof(exten), "%d", x);
-		if (ast_add_extension2(con, 1, exten, 1, NULL, NULL, parkedcall, strdup(exten), FREE, registrar))
+		if (!ast_add_extension2(con, 1, exten, 1, NULL, NULL, parkedcall, strdup(exten), FREE, registrar))
 			notify_metermaids(exten, parking_con);
 	}
 	/* Tell the peer channel the number of the parking space */
@@ -2065,7 +2065,7 @@
 {
 	if (option_debug > 1)
 		ast_log(LOG_DEBUG, "Got notification of state change for %s@%s\n", exten, context);
-	ast_device_state_changed("local/%s@%s", exten, context);
+	ast_device_state_changed("local/%s@%s/park", exten, context);
 }
 
 /*! \brief Add parking hints for all defined parking lots */



More information about the asterisk-commits mailing list