diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTcpTransConnecting.cpp --- /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) + { + }