summaryrefslogtreecommitdiff
path: root/apps/app_meetme.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2013-01-22 15:15:04 +0000
committerMatthew Jordan <mjordan@digium.com>2013-01-22 15:15:04 +0000
commit985ea8b2c96ff16b5cbe4cd102b9224e171b2984 (patch)
treed1d90abf8b215d0ce735efe58fa15de0be1ce9ac /apps/app_meetme.c
parent09fb47a65ca60476d1587a9f3ec5d80d4a4db441 (diff)
Fix station ringback; trunk hangup issues in SLA
This patch fixes two bugs: * If an outbound call is made from a SLA phone using SLAStation, then there is no ringtone audible to the phone that originates the call. The indication of the ringing was not being passed to the SLA station; this patch fixes that by passing through the progress indications. * If an SLA station hangs up before the called party answers, then the channel to the called party continues to ring until a timeout occurs. If the called party manages to answer, Asterisk attempts to connect the called party to a non-existant MeetMe room. This patch corrects the behavior by abandoning the call attempt if it detects that the SLA station is no longer in use while attempting to call the called party. Review: https://reviewboard.asterisk.org/r/2275/ (closes issue ASTERISK-20462) Reported by: dkerr patches: asterisk-11-bugid20440+20462.patch uploaded by dkerr (license 5558) asterisk-11-bugid20462.patch uploaded by dkerr (license 5558) (closes issue ASTERISK-20440) Reported by: dkerr patches: asterisk-11-bugid20440.patch uploaded by dkerr (license 5558) asterisk-11-bugid20440+20462.patch uploaded by dkerr (license 5558) ........ Merged revisions 379825 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 379826 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@379828 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_meetme.c')
-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 9c72abe33..e63a4b3f7 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -6425,6 +6425,8 @@ static void *dial_trunk(void *data)
struct sla_trunk_ref *trunk_ref = args->trunk_ref;
int caller_is_saved;
struct ast_party_caller caller;
+ int last_state = 0;
+ int current_state = 0;
if (!(dial = ast_dial_create())) {
ast_mutex_lock(args->cond_lock);
@@ -6478,14 +6480,35 @@ static void *dial_trunk(void *data)
case AST_DIAL_RESULT_TIMEOUT:
case AST_DIAL_RESULT_UNANSWERED:
done = 1;
+ break;
case AST_DIAL_RESULT_TRYING:
+ current_state = AST_CONTROL_PROGRESS;
+ break;
case AST_DIAL_RESULT_RINGING:
case AST_DIAL_RESULT_PROGRESS:
case AST_DIAL_RESULT_PROCEEDING:
+ current_state = AST_CONTROL_RINGING;
break;
}
if (done)
break;
+
+ /* check that SLA station that originated trunk call is still alive */
+ if (args->station && ast_device_state(args->station->device) == AST_DEVICE_NOT_INUSE) {
+ ast_debug(3, "Originating station device %s no longer active\n", args->station->device);
+ trunk_ref->trunk->chan = NULL;
+ break;
+ }
+
+ /* If trunk line state changed, send indication back to originating SLA Station channel */
+ if (current_state != last_state) {
+ ast_debug(3, "Indicating State Change %d to channel %s\n", current_state, ast_channel_name(trunk_ref->chan));
+ ast_indicate(trunk_ref->chan, current_state);
+ last_state = current_state;
+ }
+
+ /* avoid tight loop... sleep for 1/10th second */
+ ast_safe_sleep(trunk_ref->chan, 100);
}
if (!trunk_ref->trunk->chan) {