From 1c852c16ad8f394f8e6b8793286ca199630a1a88 Mon Sep 17 00:00:00 2001 From: tilghman Date: Fri, 25 Jul 2008 17:19:39 +0000 Subject: Fix some errant device states by making the devicestate API more strict in terms of the device argument (only without the unique identifier appended). (closes issue #12771) Reported by: davidw Patches: 20080717__bug12771.diff.txt uploaded by Corydon76 (license 14) Tested by: davidw, jvandal, murf git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@133649 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_agent.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'channels') diff --git a/channels/chan_agent.c b/channels/chan_agent.c index cd431a642..45232f336 100644 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -289,6 +289,11 @@ static int agent_devicestate_cb(const char *dev, int state, void *data) struct agent_pvt *p; char basename[AST_CHANNEL_NAME], *tmp; + /* Skip Agent status */ + if (!strncasecmp(dev, "Agent/", 6)) { + return 0; + } + /* Try to be safe, but don't deadlock */ for (i = 0; i < 10; i++) { if ((res = AST_LIST_TRYLOCK(&agents)) == 0) { @@ -522,6 +527,7 @@ static struct ast_frame *agent_read(struct ast_channel *ast) } p->chan = NULL; p->inherited_devicestate = -1; + ast_device_state_changed("Agent/%s", p->agent); p->acknowledged = 0; } } else { @@ -744,6 +750,7 @@ static int agent_call(struct ast_channel *ast, char *dest, int timeout) /* Agent hung-up */ p->chan = NULL; p->inherited_devicestate = -1; + ast_device_state_changed("Agent/%s", p->agent); } if (!res) { @@ -867,6 +874,7 @@ static int agent_hangup(struct ast_channel *ast) ast_hangup(p->chan); p->chan = NULL; p->inherited_devicestate = -1; + ast_device_state_changed("Agent/%s", p->agent); } ast_log(LOG_DEBUG, "Hungup, howlong is %d, autologoff is %d\n", howlong, p->autologoff); if ((p->deferlogoff) || (howlong && p->autologoff && (howlong > p->autologoff))) { -- cgit v1.2.3