Merged revisions 43861-43862 via svnmerge from
authorPaul Cadach <paul@odt.east.telecom.kz>
Thu, 28 Sep 2006 13:02:30 +0000 (13:02 +0000)
committerPaul Cadach <paul@odt.east.telecom.kz>
Thu, 28 Sep 2006 13:02:30 +0000 (13:02 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r43861 | pcadach | 2006-09-28 18:47:23 +0600 (Чтв, 28 Сен 2006) | 1 line

Put attribute tag at correct place
........
r43862 | pcadach | 2006-09-28 18:58:22 +0600 (Чтв, 28 Сен 2006) | 1 line

Force remote side to start media on outgoing PROGRESS message
........

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

channels/h323/ast_h323.cxx
channels/h323/ast_h323.h
include/asterisk/compiler.h

index 3b737f6..f4c3ba3 100644 (file)
@@ -596,6 +596,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)
@@ -2124,7 +2159,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 f933217..cfa0d0e 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);
index a6e08f9..8ac4414 100644 (file)
@@ -24,7 +24,7 @@
 #define _ASTERISK_COMPILER_H
 
 #if HAVE_ATTRIBUTE_always_inline
-#define force_inline inline __attribute__((always_inline))
+#define force_inline __attribute__((always_inline)) inline
 #else
 #define force_inline inline
 #endif