summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2012-03-02 18:38:49 +0000
committerRichard Mudgett <rmudgett@digium.com>2012-03-02 18:38:49 +0000
commit9926662aba1ed9410461cb5eb127a72477ae7fcd (patch)
tree692203dae799d8aec636eab2d4f00c66429e856c
parentd3db6da254894be87052ceef0596a73cb401c274 (diff)
Remove ISDN hold restriction for non-bridged calls.
The check if an ISDN call is bridged before it could be placed on hold is not necessary and is overly restrictive. The check was originally done to prevent problems with call transfers in case a user tried to transfer a call connected to an application to another call connected to an application. The ISDN transfer code has not required this restriction for quite some time because ECT could transfer any two active calls to each other. * Remove ISDN hold restriction for calls connected to applications. * Made ast_waitfordigit_full() ignore AST_CONTROL_HOLD and AST_CONTROL_UNHOLD instead of generating a warning message. (closes issue ASTERISK-19388) Reported by: Birger Harzenetter Tested by: rmudgett ........ Merged revisions 357894 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 357895 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@357896 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channels/sig_pri.c9
-rw-r--r--main/channel.c2
2 files changed, 7 insertions, 4 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index f0a15d7ed..093d8ad83 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -5121,7 +5121,6 @@ static int sig_pri_handle_hold(struct sig_pri_span *pri, pri_event *ev)
int retval;
int chanpos_old;
int chanpos_new;
- struct ast_channel *bridged;
struct ast_channel *owner;
chanpos_old = pri_find_principle_by_call(pri, ev->hold.call);
@@ -5142,9 +5141,11 @@ static int sig_pri_handle_hold(struct sig_pri_span *pri, pri_event *ev)
if (!owner) {
goto done_with_private;
}
- bridged = ast_bridged_channel(owner);
- if (!bridged) {
- /* Cannot hold a call that is not bridged. */
+ if (pri->pvts[chanpos_old]->call_level != SIG_PRI_CALL_LEVEL_CONNECT) {
+ /*
+ * Make things simple. Don't allow placing a call on hold that
+ * is not connected.
+ */
goto done_with_owner;
}
chanpos_new = pri_find_empty_nobch(pri);
diff --git a/main/channel.c b/main/channel.c
index 39edcd143..3812fa9c2 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -3413,6 +3413,8 @@ int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd)
case AST_CONTROL_CONNECTED_LINE:
case AST_CONTROL_REDIRECTING:
case AST_CONTROL_UPDATE_RTP_PEER:
+ case AST_CONTROL_HOLD:
+ case AST_CONTROL_UNHOLD:
case -1:
/* Unimportant */
break;