[asterisk-commits] russell: branch russell/sla_updates r57142 - in /team/russell/sla_updates: ap...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Feb 28 12:52:43 MST 2007


Author: russell
Date: Wed Feb 28 13:52:42 2007
New Revision: 57142

URL: http://svn.digium.com/view/asterisk?view=rev&rev=57142
Log:
Add support for the "barge=no" option for trunks.  If enabled, no station can
join a call in progress.

Modified:
    team/russell/sla_updates/apps/app_meetme.c
    team/russell/sla_updates/configs/sla.conf.sample

Modified: team/russell/sla_updates/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/russell/sla_updates/apps/app_meetme.c?view=diff&rev=57142&r1=57141&r2=57142
==============================================================================
--- team/russell/sla_updates/apps/app_meetme.c (original)
+++ team/russell/sla_updates/apps/app_meetme.c Wed Feb 28 13:52:42 2007
@@ -411,6 +411,9 @@
 	unsigned int hold_stations;
 	struct ast_channel *chan;
 	unsigned int ring_timeout;
+	/*! If set to 1, no station will be able to join an active call with
+	 *  this trunk. */
+	unsigned int barge_disabled:1;
 };
 
 struct sla_trunk_ref {
@@ -1009,14 +1012,16 @@
 		if (trunk->ring_timeout)
 			snprintf(ring_timeout, sizeof(ring_timeout), "%u Seconds", trunk->ring_timeout);
 		ast_cli(fd, "=== ---------------------------------------------------------\n"
-		            "=== Trunk Name:      %s\n"
-		            "=== ==> Device:      %s\n"
-					"=== ==> AutoContext: %s\n"
-					"=== ==> RingTimeout: %s\n"
+		            "=== Trunk Name:       %s\n"
+		            "=== ==> Device:       %s\n"
+					"=== ==> AutoContext:  %s\n"
+					"=== ==> RingTimeout:  %s\n"
+					"=== ==> BargeAllowed: %s\n"
 					"=== ==> Stations ...\n",
 					trunk->name, trunk->device, 
 					S_OR(trunk->autocontext, "(none)"), 
-					ring_timeout);
+					ring_timeout,
+		            trunk->barge_disabled ? "No" : "Yes");
 		AST_RWLIST_RDLOCK(&sla_stations);
 		AST_LIST_TRAVERSE(&trunk->stations, station_ref, entry)
 			ast_cli(fd, "===    ==> Station name: %s\n", station_ref->station->name);
@@ -3065,14 +3070,24 @@
 	return station;
 }
 
+/*! \brief Find a trunk reference on a station by name
+ * \param station the station
+ * \param name the trunk's name
+ * \return a pointer to the station's trunk reference.  If the trunk
+ *         is not found, or if it is not idle and barge is disabled,
+ *         then NULL will be returned.
+ */
 static struct sla_trunk_ref *sla_find_trunk_ref_byname(const struct sla_station *station,
 	const char *name)
 {
 	struct sla_trunk_ref *trunk_ref = NULL;
 
 	AST_LIST_TRAVERSE(&station->trunks, trunk_ref, entry) {
-		if (!strcasecmp(trunk_ref->trunk->name, name))
-			break;
+		if (strcasecmp(trunk_ref->trunk->name, name))
+			continue;
+		if (trunk_ref->trunk->barge_disabled && trunk_ref->state != SLA_TRUNK_STATE_IDLE)
+			trunk_ref = NULL;
+		break;
 	}
 
 	return trunk_ref;
@@ -4007,7 +4022,7 @@
 		trunk_ref = sla_choose_idle_trunk(station);
 	AST_RWLIST_UNLOCK(&sla_trunks);
 
-	if (ast_strlen_zero(trunk_name) && !trunk_ref) {
+	if (!trunk_ref) {
 		ast_log(LOG_NOTICE, "No trunks available for call.\n");
 		pbx_builtin_setvar_helper(chan, "SLASTATION_STATUS", "CONGESTION");
 		return 0;
@@ -4339,7 +4354,9 @@
 					var->value, trunk->name);
 				trunk->ring_timeout = 0;
 			}
-		} else if (strcasecmp(var->name, "type") && strcasecmp(var->name, "device")) {
+		} else if (!strcasecmp(var->name, "barge"))
+			trunk->barge_disabled = ast_false(var->value);
+		else if (strcasecmp(var->name, "type") && strcasecmp(var->name, "device")) {
 			ast_log(LOG_ERROR, "Invalid option '%s' specified at line %d of %s!\n",
 				var->name, var->lineno, SLA_CONFIG_FILE);
 		}

Modified: team/russell/sla_updates/configs/sla.conf.sample
URL: http://svn.digium.com/view/asterisk/team/russell/sla_updates/configs/sla.conf.sample?view=diff&rev=57142&r1=57141&r2=57142
==============================================================================
--- team/russell/sla_updates/configs/sla.conf.sample (original)
+++ team/russell/sla_updates/configs/sla.conf.sample Wed Feb 28 13:52:42 2007
@@ -26,6 +26,10 @@
 
 ;ringtimeout=30           ; Set how long to allow this trunk to ring on an inbound call before hanging 
                           ; it up as an unanswered call.  The value is in seconds.
+
+;barge=no                 ; If this option is set to "no", then no station will be
+                          ; allowed to join a call that is in progress.  The default
+                          ; value is "yes".
 
 ;[line2]
 ;type=trunk



More information about the asterisk-commits mailing list