summaryrefslogtreecommitdiff
path: root/main/rtp.c
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2006-09-20 17:08:44 +0000
committerJoshua Colp <jcolp@digium.com>2006-09-20 17:08:44 +0000
commit3c6d5053ba462f2714c05f778ad9edac80b063d1 (patch)
treeb179e2a337ef79f60903931a3f7b0543e3eedc03 /main/rtp.c
parent659d4677205e2d54c419647b87dc87b32156ed2c (diff)
Totally break a P2P bridge upon going on hold, and re-establish it upon going off hold.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@43343 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/rtp.c')
-rw-r--r--main/rtp.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/main/rtp.c b/main/rtp.c
index d29185fe8..0cf0aec76 100644
--- a/main/rtp.c
+++ b/main/rtp.c
@@ -2940,14 +2940,30 @@ static enum ast_bridge_result bridge_p2p_loop(struct ast_channel *c0, struct ast
if ((fr->subclass == AST_CONTROL_HOLD) ||
(fr->subclass == AST_CONTROL_UNHOLD) ||
(fr->subclass == AST_CONTROL_VIDUPDATE)) {
- /* If we are going on hold, then break callback mode */
+ /* If we are going on hold, then break callback mode and P2P bridging */
if (fr->subclass == AST_CONTROL_HOLD) {
if (p0_callback)
p0_callback = p2p_callback_disable(c0, p0, &p0_fds[0], &p0_iod[0]);
if (p1_callback)
p1_callback = p2p_callback_disable(c1, p1, &p1_fds[0], &p1_iod[0]);
+ p0->bridged = NULL;
+ p1->bridged = NULL;
+ if (vp0) {
+ vp0->bridged = NULL;
+ vp1->bridged = NULL;
+ }
} else if (fr->subclass == AST_CONTROL_UNHOLD) {
- /* If we are off hold, then go back to callback mode */
+ /* If we are off hold, then go back to callback mode and P2P bridging */
+ ast_clear_flag(p0, FLAG_P2P_SENT_MARK);
+ p0->bridged = p1;
+ ast_clear_flag(p1, FLAG_P2P_SENT_MARK);
+ p1->bridged = p0;
+ if (vp0) {
+ ast_clear_flag(vp0, FLAG_P2P_SENT_MARK);
+ vp0->bridged = vp1;
+ ast_clear_flag(vp1, FLAG_P2P_SENT_MARK);
+ vp1->bridged = vp0;
+ }
p0_callback = p2p_callback_enable(c0, p0, &p0_fds[0], &p0_iod[0]);
p1_callback = p2p_callback_enable(c1, p1, &p1_fds[0], &p1_iod[0]);
}