summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2014-03-12 18:47:10 +0000
committerRichard Mudgett <rmudgett@digium.com>2014-03-12 18:47:10 +0000
commitde3dc17cc54c105c0671327dfab8d085d134054e (patch)
tree5759452e2fbd1f1b9ecd4130fd8299a620de5b2d /apps
parentd00c1ac23ec615d2b9b808c39675d2a02c57142d (diff)
app_confbridge: Make explicitly stop MOH if a user is kicked or hangs up while MOH is playing.
When MOH is playing to a user in a conference and the user is kicked or hangs up from the conference then the AMI MusicOnHoldStop events didn't happen. (Asterisk v11 AMI event: MusicOnHold, state:Stop) (closes issue ASTERISK-23311) Reported by: Benjamin Keith Ford Review: https://reviewboard.asterisk.org/r/3306/ ........ Merged revisions 410490 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410491 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410492 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/confbridge/conf_state.c3
-rw-r--r--apps/confbridge/conf_state_inactive.c2
-rw-r--r--apps/confbridge/conf_state_single.c3
-rw-r--r--apps/confbridge/conf_state_single_marked.c3
4 files changed, 10 insertions, 1 deletions
diff --git a/apps/confbridge/conf_state.c b/apps/confbridge/conf_state.c
index 03dd7d9af..305732f19 100644
--- a/apps/confbridge/conf_state.c
+++ b/apps/confbridge/conf_state.c
@@ -74,6 +74,9 @@ void conf_default_join_waitmarked(struct confbridge_user *user)
void conf_default_leave_waitmarked(struct confbridge_user *user)
{
conf_remove_user_waiting(user->conference, user);
+ if (user->playing_moh) {
+ conf_moh_stop(user);
+ }
}
void conf_change_state(struct confbridge_user *user, struct confbridge_state *newstate)
diff --git a/apps/confbridge/conf_state_inactive.c b/apps/confbridge/conf_state_inactive.c
index 24631e2c7..bc41e611a 100644
--- a/apps/confbridge/conf_state_inactive.c
+++ b/apps/confbridge/conf_state_inactive.c
@@ -66,7 +66,7 @@ static void join_marked(struct confbridge_user *user)
static void leave_waitmarked(struct confbridge_user *user)
{
- conf_remove_user_waiting(user->conference, user);
+ conf_default_leave_waitmarked(user);
if (user->conference->waitingusers == 0) {
conf_change_state(user, CONF_STATE_EMPTY);
}
diff --git a/apps/confbridge/conf_state_single.c b/apps/confbridge/conf_state_single.c
index e3e0ca11c..b3881fa3d 100644
--- a/apps/confbridge/conf_state_single.c
+++ b/apps/confbridge/conf_state_single.c
@@ -72,6 +72,9 @@ static void join_marked(struct confbridge_user *user)
static void leave_unmarked(struct confbridge_user *user)
{
conf_remove_user_active(user->conference, user);
+ if (user->playing_moh) {
+ conf_moh_stop(user);
+ }
if (user->conference->waitingusers) {
conf_change_state(user, CONF_STATE_INACTIVE);
diff --git a/apps/confbridge/conf_state_single_marked.c b/apps/confbridge/conf_state_single_marked.c
index f72ef5ec1..c13ef1636 100644
--- a/apps/confbridge/conf_state_single_marked.c
+++ b/apps/confbridge/conf_state_single_marked.c
@@ -71,6 +71,9 @@ static void join_marked(struct confbridge_user *user)
static void leave_marked(struct confbridge_user *user)
{
conf_remove_user_marked(user->conference, user);
+ if (user->playing_moh) {
+ conf_moh_stop(user);
+ }
conf_change_state(user, CONF_STATE_EMPTY);
}