From 1bf63d1c5bbbaa1977e4c7c3edb47d32983db31c Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Thu, 15 Nov 2007 17:27:27 +0000 Subject: 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: https://origsvn.digium.com/svn/asterisk/trunk@89297 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_meetme.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'apps') 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; -- cgit v1.2.3