[asterisk-commits] irroot: branch 10 r341580 - in /branches/10: CHANGES apps/app_queue.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 20 12:13:26 CDT 2011
Author: irroot
Date: Thu Oct 20 12:13:23 2011
New Revision: 341580
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=341580
Log:
Add option to check state when state is unknown
r341486 reverts r325483 this is a rework of the patch.
optimize to minimize load.
add option check_state_unknown to control whether a member with unknown
device state is checked there is a small % chance that calls will be sent
to the member when they on a call.
app_queue will see a device with unknown state as available and does not
try verify the state without this option enabled.
Review: https://reviewboard.asterisk.org/r/1535/
Modified:
branches/10/CHANGES
branches/10/apps/app_queue.c
Modified: branches/10/CHANGES
URL: http://svnview.digium.com/svn/asterisk/branches/10/CHANGES?view=diff&rev=341580&r1=341579&r2=341580
==============================================================================
--- branches/10/CHANGES (original)
+++ branches/10/CHANGES Thu Oct 20 12:13:23 2011
@@ -206,6 +206,8 @@
* Added member option ignorebusy this when set and ringinuse is not
will allow per member control of multiple calls as ringinuse does for
the Queue.
+ * Added global option check_state_unknown to enforce checking of device state
+ when the device state is unknown app_queue will see unknown as available.
Applications
------------
Modified: branches/10/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/apps/app_queue.c?view=diff&rev=341580&r1=341579&r2=341580
==============================================================================
--- branches/10/apps/app_queue.c (original)
+++ branches/10/apps/app_queue.c Thu Oct 20 12:13:23 2011
@@ -954,6 +954,9 @@
/*! \brief queues.conf [general] option */
static int negative_penalty_invalid = 0;
+/*! \brief queues.conf [general] option */
+static int check_state_unknown = 0;
+
enum queue_result {
QUEUE_UNKNOWN = 0,
QUEUE_TIMEOUT = 1,
@@ -3052,6 +3055,7 @@
char tech[256];
char *location;
const char *macrocontext, *macroexten;
+ enum ast_device_state newstate;
/* on entry here, we know that tmp->chan == NULL */
if (tmp->member->paused) {
@@ -3076,6 +3080,14 @@
}
if (!qe->parent->ringinuse || !tmp->member->ignorebusy) {
+ if (check_state_unknown && (tmp->member->status == AST_DEVICE_UNKNOWN)) {
+ newstate = ast_device_state(tmp->member->interface);
+ if (newstate != tmp->member->status) {
+ ast_log(LOG_WARNING, "Found a channel matching iterface %s while status was %s changed to %s\n",
+ tmp->member->interface, ast_devstate2str(tmp->member->status), ast_devstate2str(newstate));
+ ast_devstate_changed_literal(newstate, tmp->member->interface);
+ }
+ }
if ((tmp->member->status != AST_DEVICE_NOT_INUSE) && (tmp->member->status != AST_DEVICE_UNKNOWN)) {
ast_debug(1, "%s in use, can't receive call\n", tmp->interface);
if (qe->chan->cdr) {
@@ -6682,22 +6694,30 @@
queue_persistent_members = ast_true(general_val);
}
autofill_default = 0;
- if ((general_val = ast_variable_retrieve(cfg, "general", "autofill")))
+ if ((general_val = ast_variable_retrieve(cfg, "general", "autofill"))) {
autofill_default = ast_true(general_val);
+ }
montype_default = 0;
if ((general_val = ast_variable_retrieve(cfg, "general", "monitor-type"))) {
if (!strcasecmp(general_val, "mixmonitor"))
montype_default = 1;
}
update_cdr = 0;
- if ((general_val = ast_variable_retrieve(cfg, "general", "updatecdr")))
+ if ((general_val = ast_variable_retrieve(cfg, "general", "updatecdr"))) {
update_cdr = ast_true(general_val);
+ }
shared_lastcall = 0;
- if ((general_val = ast_variable_retrieve(cfg, "general", "shared_lastcall")))
+ if ((general_val = ast_variable_retrieve(cfg, "general", "shared_lastcall"))) {
shared_lastcall = ast_true(general_val);
+ }
negative_penalty_invalid = 0;
- if ((general_val = ast_variable_retrieve(cfg, "general", "negative_penalty_invalid")))
+ if ((general_val = ast_variable_retrieve(cfg, "general", "negative_penalty_invalid"))) {
negative_penalty_invalid = ast_true(general_val);
+ }
+ check_state_unknown = 0;
+ if ((general_val = ast_variable_retrieve(cfg, "general", "check_state_unknown"))) {
+ check_state_unknown = ast_true(general_val);
+ }
}
/*! \brief reload information pertaining to a single member
More information about the asterisk-commits
mailing list