diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/ConnectionMgr/src/CNATTraversalNotIntegrated.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CNATTraversalNotIntegrated.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,319 @@ +// Copyright (c) 2005-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 : CNATTraversalNotIntegrated.h +// Part of : ConnectionMgr +// Version : SIP/5.0 +// + + + +#include "CNATTraversalNotIntegrated.h" + +#include + + +const TInt KCompletionTime = 1; + +// ----------------------------------------------------------------------------- +// TPendingAsyncRequest::TPendingAsyncRequest +// ----------------------------------------------------------------------------- +// +TPendingAsyncRequest::TPendingAsyncRequest( + TDeltaTimerEntry aTimerEntry, + TUint32 aIapId, + MSIPNATTraversalRequestObserver& aObserver, + TUint32 aRequestId ) : + iTimerEntry( aTimerEntry ), + iIapId( aIapId ), + iObserver( aObserver ), + iRequestId( aRequestId ) + { + } + +// ----------------------------------------------------------------------------- +// TPendingAsyncRequest::MatchRequestId +// ----------------------------------------------------------------------------- +// +TBool TPendingAsyncRequest::MatchRequestId( TUint32 aRequestId ) const + { + return ( iRequestId == aRequestId ); + } + +// ----------------------------------------------------------------------------- +// TPendingAsyncRequest::MatchIapId +// ----------------------------------------------------------------------------- +// +TBool TPendingAsyncRequest::MatchIapId( TUint32 aIapId ) const + { + return ( iIapId == aIapId ); + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::NewL +// ----------------------------------------------------------------------------- +// +CNATTraversalNotIntegrated* CNATTraversalNotIntegrated::NewL() + { + CNATTraversalNotIntegrated* self = + new ( ELeave ) CNATTraversalNotIntegrated; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::~CNATTraversalNotIntegrated +// ----------------------------------------------------------------------------- +// +CNATTraversalNotIntegrated::~CNATTraversalNotIntegrated() + { + for ( TInt i = 0; i < iAsyncRequests.Count(); i++ ) + { + if ( iAsyncCompletionTimer ) + { + iAsyncCompletionTimer->Remove( iAsyncRequests[ i ].iTimerEntry ); + } + } + iAsyncRequests.Close(); + delete iAsyncCompletionTimer; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::ResolvePublicAddrL +// ----------------------------------------------------------------------------- +// +TUint32 CNATTraversalNotIntegrated::ResolvePublicAddrL( + TUint32 aIapId, + RConnection& /*aConnection*/, + const TInetAddr& /*aLocalAddr*/, + const TDesC8& /*aDomain*/, + RSocket& /*aUdpSocket*/, + const TInetAddr& /*aNextHopAddr*/, + MSIPNATBindingObserver* /*aBindingObserver*/, + MSIPNATTraversalRequestObserver& aRequestObserver ) + { + TUint32 requestId( NextRequestId() ); + AddAsyncRequestL( aIapId, aRequestObserver, requestId ); + return requestId; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::Cancel +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::Cancel( TUint32 aRequestId ) + { + TBool found( EFalse ); + for ( TInt i = 0; i < iAsyncRequests.Count() && !found; i++ ) + { + TPendingAsyncRequest& request = iAsyncRequests[ i ]; + if ( request.MatchRequestId( aRequestId ) ) + { + found = ETrue; + iAsyncCompletionTimer->Remove( request.iTimerEntry ); + iAsyncRequests.Remove( i ); + iAsyncRequests.Compress(); + } + } + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::RefreshNATBindingL +// ----------------------------------------------------------------------------- +// +TBool CNATTraversalNotIntegrated::RefreshNATBindingL( + RSocket& /*aSocket*/, + const MSIPNATBindingObserver* /*aBindingObserver*/ ) + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::RefreshNATBindingL +// ----------------------------------------------------------------------------- +// +TBool CNATTraversalNotIntegrated::RefreshNATBindingL( + CSecureSocket& /*aSecureSocket*/, + const MSIPNATBindingObserver* /*aBindingObserver*/ ) + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::UpdateNextHop +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::UpdateNextHop( + const TInetAddr& /*aNextHopAddr*/, + const MSIPNATBindingObserver* /*aBindingObserver*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::SocketIdle +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::SocketIdle( + TBool /*aIdle*/, + RSocket& /*aSocket*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::SocketIdle +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::SocketIdle( + TBool /*aIdle*/, + CSecureSocket& /*aSecureSocket*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::DataReceivedL +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::DataReceivedL( + const TDesC8& /*aData*/, + const RSocket& /*aUdpSocket*/, + TBool& aHandled ) + { + aHandled = EFalse; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::FreeResources +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::FreeResources( TUint32 aIapId ) + { + TInt lastIndex( iAsyncRequests.Count() - 1 ); + for ( TInt i = lastIndex; i >= 0; i-- ) + { + TPendingAsyncRequest& request = iAsyncRequests[ i ]; + if ( request.MatchIapId( aIapId ) ) + { + iAsyncCompletionTimer->Remove( request.iTimerEntry ); + iAsyncRequests.Remove( i ); + iAsyncRequests.Compress(); + } + } + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::FreeResources +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::FreeResources( + MSIPNATBindingObserver& /*aBindingObserver*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::CompletionCallback +// ----------------------------------------------------------------------------- +// +TInt CNATTraversalNotIntegrated::CompletionCallback( TAny* aAny ) + { + CNATTraversalNotIntegrated* self = + reinterpret_cast< CNATTraversalNotIntegrated* >( aAny ); + + if ( self ) + { + self->CompletePendingAsyncRequest(); + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::ConstructL +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::ConstructL() + { + iAsyncCompletionTimer = CDeltaTimer::NewL( CActive::EPriorityStandard ); + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::CNATTraversalNotIntegrated +// ----------------------------------------------------------------------------- +// +CNATTraversalNotIntegrated::CNATTraversalNotIntegrated() + { + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::AddAsyncRequestL +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::AddAsyncRequestL( + TUint32 aIapId, + MSIPNATTraversalRequestObserver& aRequestObserver, + TUint32 aRequestId ) + { + TCallBack callback( CompletionCallback, this ); + TDeltaTimerEntry entry( callback ); + + TPendingAsyncRequest request( entry, + aIapId, + aRequestObserver, + aRequestId ); + + iAsyncRequests.AppendL( request ); + + iAsyncCompletionTimer->Queue( + KCompletionTime, + iAsyncRequests[ iAsyncRequests.Count() - 1 ].iTimerEntry ); + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::CompletePendingAsyncRequest +// ----------------------------------------------------------------------------- +// +void CNATTraversalNotIntegrated::CompletePendingAsyncRequest() + { + if ( iAsyncRequests.Count() > 0 ) + { + TPendingAsyncRequest& request = iAsyncRequests[ 0 ]; + iAsyncCompletionTimer->Remove( request.iTimerEntry ); + + TUint32 requestId = request.iRequestId; + MSIPNATTraversalRequestObserver& observer = request.iObserver; + iAsyncRequests.Remove( 0 ); + iAsyncRequests.Compress(); + + observer.RequestComplete( requestId, KErrNone ); + } + } + +// ----------------------------------------------------------------------------- +// CNATTraversalNotIntegrated::NextRequestId +// ----------------------------------------------------------------------------- +// +TUint32 CNATTraversalNotIntegrated::NextRequestId() + { + if ( iRequestIdCounter == KMaxTUint32 ) + { + iRequestIdCounter = 1; + } + else + { + iRequestIdCounter++; + } + return iRequestIdCounter; + } + +// End of file