]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 182022 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Fri, 13 Mar 2009 17:29:26 +0000 (17:29 +0000)
committerJoshua Colp <jcolp@digium.com>
Fri, 13 Mar 2009 17:29:26 +0000 (17:29 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@182042 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 45d4541c056748683c0923b126ee094ead1c6079..b5d0c877519582cd2128fa3be753b319acc7c01c 100644 (file)
@@ -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); 
                }
        }