realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTcpTransConnecting.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTcpTransConnecting.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,213 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name          : CTcpTransConnecting.cpp
+// Part of       : ConnectionMgr
+// Version       : SIP/6.0 
+//
+
+
+
+
+#include "CTcpTransConnecting.h"
+#include "sipmessage.h"
+#include "CTransportTcp.h"
+#include "CReceiverTcp.h"
+#include "CSender.h"
+#include "COutgoingData.h"
+#include "MTransportOwner.h"
+#include "CommonConsts.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+#include "siperr.h"
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::NewL
+// -----------------------------------------------------------------------------
+//
+CTcpTransportConnecting* CTcpTransportConnecting::NewL(
+    const TSIPTransportParams& aParams)
+	{
+	CTcpTransportConnecting* self = NewLC(aParams);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::NewLC
+// -----------------------------------------------------------------------------
+//
+CTcpTransportConnecting* CTcpTransportConnecting::NewLC(
+    const TSIPTransportParams& aParams)
+	{
+	CTcpTransportConnecting* self = 
+	                new (ELeave) CTcpTransportConnecting(aParams);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::CancelSend
+// -----------------------------------------------------------------------------
+//
+TBool CTcpTransportConnecting::CancelSend(TRequestStatus& aStatus,
+										  CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	return aContext->GetSender()->FindAndCancel(aStatus);
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::Wait
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::Wait(CTransportTcp* /*aContext*/)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::HandleMessage
+// -----------------------------------------------------------------------------
+//
+TBool CTcpTransportConnecting::HandleMessage(RStringF aProtocol, 
+										 	 const TInetAddr& aRemoteAddr, 
+										 	 CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	TInetAddr connect;
+	aContext->GetRemoteAddr(connect);
+	
+	return (aProtocol == SIPStrings::StringF(SipStrConsts::ETCP) &&
+	    	connect.CmpAddr(aRemoteAddr));
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::SendToNetL
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::SendToNetL(const TSIPTransportParams& aParams,
+                            CSIPMessage& aMessage,
+							const TInetAddr& aAddr,
+							TRequestStatus &aStatus,
+							TUint aOrigTransport,
+							CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	TBool connect = aContext->GetSender()->SendL(aParams,
+                	                             aMessage,
+                							     aAddr,
+                			                     aOrigTransport,
+                			                     aStatus,
+                			                     ETrue,
+                			                     EFalse);
+	if ( connect )
+	    {
+	    aContext->ConnectSocket();
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::CancelAllRequests
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::CancelAllRequests(CSIPConnection::TState aReason, 
+												CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	aContext->GetSender()->CancelAllRequests(aReason);
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::ConnectionOpenL
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::ConnectionOpenL(CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	aContext->SetCurrentState(iConnected);
+	// Possibly update sender socket opts before sending
+	aContext->GetSender()->SendNextL();
+	aContext->StartTimerL();
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::DisconnectedL
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::DisconnectedL(CTransportTcp* aContext)
+	{
+	__ASSERT_DEBUG(aContext, User::Panic(_L("Nullpointer"), KErrGeneral));
+	
+	COutgoingData* data = 0;
+	CSender* sender = aContext->GetSender();
+	while ( (data = sender->StoredData()) != 0)
+		{
+		if (data->OrigTransport() == KProtocolInetUdp &&
+			data->Message().IsRequest())
+			{
+			data->Sent();
+			CleanupStack::PushL( data );
+			aContext->TransportOwner()->ReRouteL(KProtocolInetUdp, 
+			                                     data);
+			CleanupStack::Pop( data );
+			}
+		else if (data->OrigTransport() == KProtocolInetTcp &&
+				 !data->Message().IsRequest())
+			{
+			data->Sent();
+			CleanupStack::PushL( data );
+			aContext->TransportOwner()->ReRouteL(KProtocolInetTcp, 
+			                                     data);
+			CleanupStack::Pop( data );
+			}
+		else
+			{
+			TRequestStatus* stat = data->Status();
+			User::RequestComplete(stat, KErrSIPTransportFailure);
+			delete data;
+			}
+		}
+	aContext->Remove();
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::SetNeighborState
+// -----------------------------------------------------------------------------
+//
+void CTcpTransportConnecting::SetNeighborState(CTcpTransportState* aState)
+	{
+	iConnected = aState;
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::~CTcpTransportConnecting
+// -----------------------------------------------------------------------------
+//
+CTcpTransportConnecting::~CTcpTransportConnecting()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTcpTransportConnecting::CTcpTransportConnecting
+// -----------------------------------------------------------------------------
+//
+CTcpTransportConnecting::CTcpTransportConnecting(
+    const TSIPTransportParams& aParams) : 
+    CTcpTransportState(aParams)
+	{
+	}