summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2009-03-13 17:25:09 +0000
committerJoshua Colp <jcolp@digium.com>2009-03-13 17:25:09 +0000
commita6734b5a957fc9e3f4a67dbf9b7ad8ed2dcec48f (patch)
tree451f08fb65c89cb344fc6bb8898c6723244a5e7a
parent87a8295303afa23f39a9041ad4d4c1e37c0902ca (diff)
Fix an issue with requesting a T38 reinvite before the call is answered.
The code responsible for sending the T38 reinvite did not check if an INVITE was already being handled. This caused things to get confused and the call to fail. The code now defers sending the T38 reinvite until the current INVITE is done being handled. (issue AST-191) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@182022 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channels/chan_sip.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 5d80ef321..901fc5d9a 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -6081,7 +6081,11 @@ static int sip_indicate(struct ast_channel *ast, int condition, const void *data
case AST_T38_REQUEST_NEGOTIATE: /* Request T38 */
if (p->t38.state != T38_ENABLED) {
change_t38_state(p, T38_LOCAL_REINVITE);
- transmit_reinvite_with_sdp(p, TRUE, FALSE);
+ if (!p->pendinginvite) {
+ transmit_reinvite_with_sdp(p, TRUE, FALSE);
+ } else if (!ast_test_flag(&p->flags[0], SIP_PENDINGBYE)) {
+ ast_set_flag(&p->flags[0], SIP_NEEDREINVITE);
+ }
}
break;
case AST_T38_TERMINATED:
@@ -16491,7 +16495,7 @@ static void check_pendings(struct sip_pvt *p)
} else {
ast_debug(2, "Sending pending reinvite on '%s'\n", p->callid);
/* Didn't get to reinvite yet, so do it now */
- transmit_reinvite_with_sdp(p, FALSE, FALSE);
+ transmit_reinvite_with_sdp(p, (p->t38.state == T38_LOCAL_REINVITE ? TRUE : FALSE), FALSE);
ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);
}
}