aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-03-13 17:29:26 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-03-13 17:29:26 +0000
commitaeb6b2bc50ffd6d1e2feaf8efac6b726a89984e0 (patch)
tree0f51a772c8b017a9c8dfdd77919820620ed4d7f5 /channels
parent4a07040b1ded8c5910fc421c30091318ac38c3b5 (diff)
Merged revisions 182022 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r182022 | file | 2009-03-13 14:25:09 -0300 (Fri, 13 Mar 2009) | 7 lines 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: http://svn.digium.com/svn/asterisk/branches/1.6.1@182042 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-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 45d4541c0..b5d0c8775 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -5653,7 +5653,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:
@@ -15740,7 +15744,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);
}
}