diff options
author | pcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-28 13:02:30 +0000 |
---|---|---|
committer | pcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-28 13:02:30 +0000 |
commit | 477df29efc889ca20fcc382d21329eb7edf3d184 (patch) | |
tree | a3508cf120027ea4d46b4a7dd477e59d1c2e8569 /channels/h323 | |
parent | 7e31abf5b77a1a21796627295137464fbd487124 (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
Diffstat (limited to 'channels/h323')
-rw-r--r-- | channels/h323/ast_h323.cxx | 39 | ||||
-rw-r--r-- | channels/h323/ast_h323.h | 1 |
2 files changed, 40 insertions, 0 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); |