diff --git a/channels/h323/ast_h323.cxx b/channels/h323/ast_h323.cxx index 3b737f6432..f4c3ba3f7c 100644 --- a/channels/h323/ast_h323.cxx +++ b/channels/h323/ast_h323.cxx @@ -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; } diff --git a/channels/h323/ast_h323.h b/channels/h323/ast_h323.h index f933217b2d..cfa0d0edc8 100644 --- a/channels/h323/ast_h323.h +++ b/channels/h323/ast_h323.h @@ -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); diff --git a/include/asterisk/compiler.h b/include/asterisk/compiler.h index a6e08f92d8..8ac441463c 100644 --- a/include/asterisk/compiler.h +++ b/include/asterisk/compiler.h @@ -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