--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwclient/src/natfwcandidatepair.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,452 @@
+/*
+* Copyright (c) 2006-2007 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:
+*
+*/
+
+
+
+
+#include "natfwcandidatepair.h"
+#include "natfwcandidate.h"
+#include "natfwcredentials.h"
+#include "natfwclientlogs.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::CNATFWCandidatePair
+// ---------------------------------------------------------------------------
+//
+CNATFWCandidatePair::CNATFWCandidatePair()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::CNATFWCandidatePair" )
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWCandidatePair::ConstructL()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::ConstructL" )
+
+ iFoundation.Assign( KNullDesC8().AllocL() );
+ iLocalCand = CNATFWCandidate::NewL();
+ iRemoteCand = CNATFWCandidate::NewL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWCandidatePair::ConstructL( const CNATFWCandidatePair& aPair )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::ConstructL (copy)" )
+
+ iFoundation.Assign( aPair.Foundation().AllocL() );
+ iLocalCand = CNATFWCandidate::NewL( aPair.LocalCandidate() );
+ iRemoteCand = CNATFWCandidate::NewL( aPair.RemoteCandidate() );
+ iPairPriority = aPair.Priority();
+ iSelected = aPair.Selected();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWCandidatePair::ConstructL(
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::ConstructL (parametrized)" )
+
+ iLocalCand = CNATFWCandidate::NewL( aLocalCand );
+ iRemoteCand = CNATFWCandidate::NewL( aRemoteCand );
+
+ UpdateFoundationL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewL()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewL" )
+
+ CNATFWCandidatePair* self = CNATFWCandidatePair::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewLC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewLC()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewLC" )
+
+ CNATFWCandidatePair* self = new( ELeave ) CNATFWCandidatePair();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewL(
+ const CNATFWCandidatePair& aPair )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewL (copy)" )
+
+ CNATFWCandidatePair* self = CNATFWCandidatePair::NewLC( aPair );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewLC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewLC(
+ const CNATFWCandidatePair& aPair )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewLC (copy)" )
+
+ CNATFWCandidatePair* self = new( ELeave ) CNATFWCandidatePair();
+ CleanupStack::PushL( self );
+ self->ConstructL( aPair );
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewL(
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewL (parametrized)" )
+
+ CNATFWCandidatePair* self
+ = CNATFWCandidatePair::NewLC( aLocalCand, aRemoteCand );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::NewLC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CNATFWCandidatePair* CNATFWCandidatePair::NewLC(
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::NewLC (parametrized)" )
+
+ CNATFWCandidatePair* self = new( ELeave ) CNATFWCandidatePair();
+ CleanupStack::PushL( self );
+ self->ConstructL( aLocalCand, aRemoteCand );
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::~CNATFWCandidatePair
+// ---------------------------------------------------------------------------
+//
+CNATFWCandidatePair::~CNATFWCandidatePair()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::~CNATFWCandidatePair" )
+
+ delete iRemoteCand;
+ delete iLocalCand;
+ iFoundation.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::Foundation
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CNATFWCandidatePair::Foundation() const
+ {
+ __NATFWCLIENT_STR8( "CNATFWCandidatePair::Foundation", iFoundation )
+
+ return iFoundation;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::SetLocalCandidateL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNATFWCandidatePair::SetLocalCandidateL(
+ const CNATFWCandidate& aCandidate )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::SetLocalCandidateL" )
+
+ if ( NULL != iLocalCand )
+ {
+ iLocalCand->CopyL( aCandidate );
+ }
+ else
+ {
+ iLocalCand = CNATFWCandidate::NewL( aCandidate );
+ }
+
+ UpdateFoundationL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::LocalCandidate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const CNATFWCandidate& CNATFWCandidatePair::LocalCandidate() const
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::LocalCandidate" )
+
+ return *iLocalCand;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::SetRemoteCandidateL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNATFWCandidatePair::SetRemoteCandidateL(
+ const CNATFWCandidate& aCandidate )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::SetRemoteCandidateL" )
+
+ if ( NULL != iRemoteCand )
+ {
+ iRemoteCand->CopyL( aCandidate );
+ }
+ else
+ {
+ iRemoteCand = CNATFWCandidate::NewL( aCandidate );
+ }
+
+ UpdateFoundationL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::RemoteCandidate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const CNATFWCandidate& CNATFWCandidatePair::RemoteCandidate() const
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::RemoteCandidate" )
+
+ return *iRemoteCand;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::SetPriority
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNATFWCandidatePair::SetPriority( const TUint64 aPriority )
+ {
+ __NATFWCLIENT_INT1( "CNATFWCandidatePair::SetPriority",
+ static_cast<TUint>( aPriority ) )
+
+ iPairPriority = aPriority;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::Priority
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint64 CNATFWCandidatePair::Priority() const
+ {
+ __NATFWCLIENT_INT1( "CNATFWCandidatePair::Priority",
+ static_cast<TUint>( iPairPriority ) )
+
+ return iPairPriority;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::SetSelected
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNATFWCandidatePair::SetSelected( TBool aSelected )
+ {
+ __NATFWCLIENT_INT1( "CNATFWCandidatePair::SetSelected", aSelected )
+
+ iSelected = aSelected;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::Selected
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CNATFWCandidatePair::Selected() const
+ {
+ __NATFWCLIENT_INT1( "CNATFWCandidatePair::Selected", iSelected )
+
+ return iSelected;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::PriorityOrder
+// Implements TLinearOrder (descending order).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CNATFWCandidatePair::PriorityOrder(
+ const CNATFWCandidatePair& aA,
+ const CNATFWCandidatePair& aB )
+ {
+ return static_cast<TInt>( aB.Priority() - aA.Priority() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::CopyL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CNATFWCandidatePair::CopyL( const CNATFWCandidatePair& aPair )
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::CopyL" )
+
+ if ( iLocalCand )
+ {
+ iLocalCand->CopyL( aPair.LocalCandidate() );
+ }
+ else
+ {
+ iLocalCand = CNATFWCandidate::NewL( aPair.LocalCandidate() );
+ }
+
+ if ( iRemoteCand )
+ {
+ iRemoteCand->CopyL( aPair.RemoteCandidate() );
+ }
+ else
+ {
+ iRemoteCand = CNATFWCandidate::NewL( aPair.RemoteCandidate() );
+ }
+
+ iPairPriority = aPair.Priority();
+ iSelected = aPair.Selected();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::operator==
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CNATFWCandidatePair::operator==(
+ const CNATFWCandidatePair& aPair ) const
+ {
+ return (
+ iPairPriority == aPair.Priority()
+ && *iLocalCand == aPair.LocalCandidate()
+ && *iRemoteCand == aPair.RemoteCandidate()
+ && iSelected == aPair.Selected() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::operator!=
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CNATFWCandidatePair::operator!=(
+ const CNATFWCandidatePair& aPair ) const
+ {
+ return !(
+ iPairPriority == aPair.Priority()
+ && *iLocalCand == aPair.LocalCandidate()
+ && *iRemoteCand == aPair.RemoteCandidate()
+ && iSelected == aPair.Selected() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::Compare
+// Implements TIdentityRelation. Foundation is compared by comparing
+// foundations of local and remote candidates.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CNATFWCandidatePair::Compare(
+ const CNATFWCandidatePair& aItem1,
+ const CNATFWCandidatePair& aItem2 )
+ {
+ return (
+ aItem1.Priority() == aItem2.Priority()
+ && aItem1.LocalCandidate() == aItem2.LocalCandidate()
+ && aItem1.RemoteCandidate() == aItem2.RemoteCandidate()
+ && aItem1.Selected() == aItem2.Selected() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::MatchAddresses
+// Implements TIdentityRelation.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CNATFWCandidatePair::MatchAddresses(
+ const CNATFWCandidatePair& aItem1,
+ const CNATFWCandidatePair& aItem2 )
+ {
+ const TInetAddr& localAddrA( aItem1.LocalCandidate().TransportAddr() );
+ const TInetAddr& localAddrB( aItem2.LocalCandidate().TransportAddr() );
+ const TInetAddr& remoteAddrA( aItem1.RemoteCandidate().TransportAddr() );
+ const TInetAddr& remoteAddrB( aItem2.RemoteCandidate().TransportAddr() );
+
+ return ( ( localAddrA.CmpAddr( localAddrB ) )
+ && ( remoteAddrA.CmpAddr( remoteAddrB ) ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCandidatePair::UpdateFoundationL
+// ---------------------------------------------------------------------------
+//
+void CNATFWCandidatePair::UpdateFoundationL()
+ {
+ __NATFWCLIENT( "CNATFWCandidatePair::UpdateFoundationL" )
+
+ if ( iLocalCand && iRemoteCand )
+ {
+ iFoundation.Close();
+ iFoundation.CreateL( iLocalCand->Foundation().Size()
+ + iRemoteCand->Foundation().Size() );
+ iFoundation.Append( iLocalCand->Foundation() );
+ iFoundation.Append( iRemoteCand->Foundation() );
+ }
+ }