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);