Merged revisions 282860 via svnmerge from
authorMatthew Nicholson <mnicholson@digium.com>
Thu, 19 Aug 2010 20:02:52 +0000 (20:02 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Thu, 19 Aug 2010 20:02:52 +0000 (20:02 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r282860 | mnicholson | 2010-08-19 15:01:11 -0500 (Thu, 19 Aug 2010) | 30 lines

  Merged revisions 282859 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2

  ................
    r282859 | mnicholson | 2010-08-19 14:44:00 -0500 (Thu, 19 Aug 2010) | 23 lines

    Merged revisions 277944 via svnmerge from
    https://origsvn.digium.com/svn/asterisk/branches/1.4

    ........
      r277944 | pabelanger | 2010-07-19 15:56:07 -0500 (Mon, 19 Jul 2010) | 16 lines

      Regression with T.38 negotiation

      Prior to 1.4.26.3 T.38 negotiation worked properly, in the case
      of the reporter.

      (issue #16852)
      Reported by: cfc

      (closes issue #16705)
      Reported by: mpiazzatnetbug
      Patches:
            issue16705_2.diff uploaded by ebroad (license 878)
      Tested by: vrban, ebroad, c0rnoTa, samdell3

      Review: https://reviewboard.asterisk.org/r/754/
    ........
  ................
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@282861 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 7d96267..cbddd08 100644 (file)
@@ -8540,7 +8540,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action
                ast_set_write_format(p->owner, p->owner->writeformat);
        }
        
-       if (ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD) && !ast_sockaddr_isnull(sa) && (!sendonly || sendonly == -1)) {
+       if (ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD) && (!ast_sockaddr_isnull(sa) || !ast_sockaddr_isnull(vsa) || !ast_sockaddr_isnull(tsa) || !ast_sockaddr_isnull(isa)) && (!sendonly || sendonly == -1)) {
                ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
                /* Activate a re-invite */
                ast_queue_frame(p->owner, &ast_null_frame);
@@ -8556,7 +8556,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action
                if (sip_cfg.notifyhold)
                        sip_peer_hold(p, FALSE);
                ast_clear_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD); /* Clear both flags */
-       } else if (ast_sockaddr_isnull(sa) || (sendonly && sendonly != -1)) {
+       } else if ((ast_sockaddr_isnull(sa) && ast_sockaddr_isnull(vsa) && ast_sockaddr_isnull(tsa) && ast_sockaddr_isnull(isa)) || (sendonly && sendonly != -1)) {
                int already_on_hold = ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD);
                ast_queue_control_data(p->owner, AST_CONTROL_HOLD,
                                       S_OR(p->mohsuggest, NULL),