aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-15 17:27:27 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-15 17:27:27 +0000
commitd1f6c2757d0511b2fe4a1a75d0244c22bdd209a5 (patch)
tree57838f3a3d79b6c02123b58d0df48216fe27ee92 /apps
parent0030cdcdba72138e180979573846c41afd6a4454 (diff)
Merged revisions 89296 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r89296 | russell | 2007-11-15 11:19:28 -0600 (Thu, 15 Nov 2007) | 8 lines Update the SLAStation application to account for the case where the SLA thread has a call out to the station, but the user has pressed a line button to answer the call instead of picking up the handset. If they do, the phone sends out a new INVITE. So, the SLAStation app must check to see if it is picking up a ringing trunk, and ensure that the other stations stop ringing. (reported internally, patched by me, tested by mogorman) ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@89297 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_meetme.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 4cebb6315..8d875e99c 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -4821,6 +4821,29 @@ static int sla_station_exec(struct ast_channel *chan, void *data)
ast_devstate_changed(AST_DEVICE_INUSE,
"SLA:%s_%s", station->name, trunk_ref->trunk->name);
}
+ } else if (trunk_ref->state == SLA_TRUNK_STATE_RINGING) {
+ struct sla_ringing_trunk *ringing_trunk;
+
+ ast_mutex_lock(&sla.lock);
+ AST_LIST_TRAVERSE_SAFE_BEGIN(&sla.ringing_trunks, ringing_trunk, entry) {
+ if (ringing_trunk->trunk == trunk_ref->trunk) {
+ AST_LIST_REMOVE_CURRENT(entry);
+ break;
+ }
+ }
+ AST_LIST_TRAVERSE_SAFE_END
+ ast_mutex_unlock(&sla.lock);
+
+ if (ringing_trunk) {
+ ast_answer(ringing_trunk->trunk->chan);
+ sla_change_trunk_state(ringing_trunk->trunk, SLA_TRUNK_STATE_UP, ALL_TRUNK_REFS, NULL);
+
+ free(ringing_trunk);
+
+ /* Queue up reprocessing ringing trunks, and then ringing stations again */
+ sla_queue_event(SLA_EVENT_RINGING_TRUNK);
+ sla_queue_event(SLA_EVENT_DIAL_STATE);
+ }
}
trunk_ref->chan = chan;