From 2375a250ae507757e663bf21419fb11538c18bf1 Mon Sep 17 00:00:00 2001 From: Georgiewskiy Yuriy <bottleman@icf.org.ru> Date: Fri, 11 Dec 2009 14:54:12 +0000 Subject: [PATCH] move faststart to callproceeding due to some broken hardware not anderstand correclty faststart in progress. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15906 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_h323/changes.txt | 2 ++ src/mod/endpoints/mod_h323/mod_h323.cpp | 34 ++++++++++++++++++++++--- src/mod/endpoints/mod_h323/mod_h323.h | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_h323/changes.txt b/src/mod/endpoints/mod_h323/changes.txt index 6da13d8580..1fcb58f055 100644 --- a/src/mod/endpoints/mod_h323/changes.txt +++ b/src/mod/endpoints/mod_h323/changes.txt @@ -1,3 +1,5 @@ +move faststart to callproceeding due to some broken hardware not anderstand + correclty faststart in progress. fix rtp timer initialisation. implement alerting-indication option and channel variable. implement progress-indication option and channel variable. diff --git a/src/mod/endpoints/mod_h323/mod_h323.cpp b/src/mod/endpoints/mod_h323/mod_h323.cpp index 3f96343b60..f18b8be141 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.cpp +++ b/src/mod/endpoints/mod_h323/mod_h323.cpp @@ -1,5 +1,5 @@ /* - Version 0.0.16 + Version 0.0.17 */ #include "mod_h323.h" @@ -777,6 +777,29 @@ bool FSH323Connection::OnReceivedProgress(const H323SignalPDU &pdu) return true; } +bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU){ + + PTRACE(4, "mod_h323\t======>FSH323Connection::OnReceivedSignalSetup ["<<*this<<"]"); + + if (!H323Connection::OnReceivedSignalSetup(setupPDU)) return false; + + H323SignalPDU callProceedingPDU; + H225_CallProceeding_UUIE & callProceeding = callProceedingPDU.BuildCallProceeding(*this); + + if (SendFastStartAcknowledge(callProceeding.m_fastStart)) + callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_fastStart); + if (!WriteSignalPDU(callProceedingPDU)) + return false; + + return true; +} + +bool FSH323Connection::OnSendCallProceeding(H323SignalPDU & callProceedingPDU){ + PTRACE(4, "mod_h323\t======>FSH323Connection::OnSendCallProceeding fastStartState = "<<FastStartStateNames[fastStartState]<<" ["<<*this<<"]"); + + return false; +// return true; +} bool FSH323Connection::OnSendReleaseComplete(H323SignalPDU & pdu) { @@ -840,10 +863,12 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ H323SignalPDU want245PDU; H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this); PBoolean sendPDU = TRUE; - - if (SendFastStartAcknowledge(prog.m_fastStart)) + PTRACE(2, "H323\tmediaWaitForConnect = FALSE "); +/* if (SendFastStartAcknowledge(prog.m_fastStart)){ + PTRACE(2, "H323\tSendFastStartAcknowledge = TRUE "); prog.IncludeOptionalField(H225_Progress_UUIE::e_fastStart); - else { + } else { + PTRACE(2, "H323\tSendFastStartAcknowledge = FALSE "); // See if aborted call if (connectionState == ShuttingDownConnection){ Unlock(); @@ -863,6 +888,7 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ else sendPDU = FALSE; } +*/ const char *vpi = switch_channel_get_variable(m_fsChannel, "progress-indication"); unsigned pi = 8; if (vpi){ diff --git a/src/mod/endpoints/mod_h323/mod_h323.h b/src/mod/endpoints/mod_h323/mod_h323.h index 570c56746c..2e0cbe8035 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.h +++ b/src/mod/endpoints/mod_h323/mod_h323.h @@ -213,8 +213,10 @@ class FSH323Connection:public H323Connection { ); virtual PBoolean OnStartLogicalChannel(H323Channel& channel); virtual PBoolean OnCreateLogicalChannel(const H323Capability& capability, H323Channel::Directions dir, unsigned& errorCode); + virtual bool OnReceivedSignalSetup(const H323SignalPDU & setupPDU); virtual void OnReceivedReleaseComplete(const H323SignalPDU & pdu); virtual bool OnReceivedProgress(const H323SignalPDU &); + virtual bool OnSendCallProceeding(H323SignalPDU & callProceedingPDU); virtual bool OnSendReleaseComplete(H323SignalPDU & pdu); virtual PBoolean OpenLogicalChannel(const H323Capability& capability, unsigned sessionID, H323Channel::Directions dir); void setRemoteAddress(const char* remoteIP, WORD remotePort);