]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Force remote side to start media on outgoing PROGRESS message
authorPaul Cadach <paul@odt.east.telecom.kz>
Thu, 28 Sep 2006 12:58:22 +0000 (12:58 +0000)
committerPaul Cadach <paul@odt.east.telecom.kz>
Thu, 28 Sep 2006 12:58:22 +0000 (12:58 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@43862 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/h323/ast_h323.cxx
channels/h323/ast_h323.h

index 73b81865f03c35d2734ea80574ae22973b4eece0..ebd551606684267405e1334fce509107bee7dbf3 100644 (file)
@@ -580,6 +580,41 @@ BOOL MyH323Connection::OnReceivedProgress(const H323SignalPDU &pdu)
        return connectionState != ShuttingDownConnection;
 }
 
+BOOL MyH323Connection::MySendProgress()
+{
+       /* The code taken from H323Connection::AnsweringCall() but ALWAYS send
+          PROGRESS message, including slow start operations */
+       H323SignalPDU progressPDU;
+       H225_Progress_UUIE &prog = progressPDU.BuildProgress(*this);
+
+       if (!mediaWaitForConnect) {
+               if (SendFastStartAcknowledge(prog.m_fastStart))
+                       prog.IncludeOptionalField(H225_Progress_UUIE::e_fastStart);
+               else {
+                       if (connectionState == ShuttingDownConnection)
+                               return FALSE;
+
+                       /* Do early H.245 start */
+                       earlyStart = TRUE;
+                       if (!h245Tunneling) {
+                               if (!H323Connection::StartControlChannel())
+                                       return FALSE;
+                               prog.IncludeOptionalField(H225_Progress_UUIE::e_h245Address);
+                               controlChannel->SetUpTransportPDU(prog.m_h245Address, TRUE);
+                       }
+               }
+       }
+       progressPDU.GetQ931().SetProgressIndicator(Q931::ProgressInbandInformationAvailable);
+
+#ifdef TUNNELLING
+       EmbedTunneledInfo(progressPDU);
+#endif
+       HandleTunnelPDU(&progressPDU);
+       WriteSignalPDU(progressPDU);
+
+       return TRUE;
+}
+
 H323Connection::AnswerCallResponse MyH323Connection::OnAnswerCall(const PString & caller,
                                                                const H323SignalPDU & setupPDU,
                                                                H323SignalPDU & connectPDU)
@@ -1968,7 +2003,11 @@ int h323_send_progress(const char *token)
                cout << "No connection found for " << token << endl;
                return -1;
        }
+#if 1
+       ((MyH323Connection *)connection)->MySendProgress();
+#else
        connection->AnsweringCall(H323Connection::AnswerCallDeferredWithMedia);
+#endif
        connection->Unlock();
        return 0;
 }
index 4c85c24429adc0ba049e834d3b18efd48c5b312c..6020bc662c00296f6c5c91284886174ddba1cbd8 100644 (file)
@@ -80,6 +80,7 @@ public:
        virtual void OnUserInputTone(char, unsigned, unsigned, unsigned);
        virtual void OnUserInputString(const PString &value);
        BOOL OnReceivedProgress(const H323SignalPDU &);
+       BOOL MySendProgress();
        void OnSendCapabilitySet(H245_TerminalCapabilitySet &);
        void OnSetLocalCapabilities();
        void SetCapabilities(int, int, void *, int);