aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 13:02:30 +0000
committerpcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b>2006-09-28 13:02:30 +0000
commit477df29efc889ca20fcc382d21329eb7edf3d184 (patch)
treea3508cf120027ea4d46b4a7dd477e59d1c2e8569
parent7e31abf5b77a1a21796627295137464fbd487124 (diff)
Merged revisions 43861-43862 via svnmerge from
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: http://svn.digium.com/svn/asterisk/trunk@43863 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/h323/ast_h323.cxx39
-rw-r--r--channels/h323/ast_h323.h1
-rw-r--r--include/asterisk/compiler.h2
3 files changed, 41 insertions, 1 deletions
diff --git a/channels/h323/ast_h323.cxx b/channels/h323/ast_h323.cxx
index 3b737f643..f4c3ba3f7 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 f933217b2..cfa0d0edc 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 a6e08f92d..8ac441463 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