--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwicecandidatehandler/src/ciceconnection.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 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: Wrapper class to convert multiplexer connection into object.
+*
+*/
+
+
+
+#include "mncmconnectionmultiplexer.h"
+#include "natfwcandidate.h"
+#include "ciceconnection.h"
+#include "icecandidatehandlerdefs.h"
+#include "icecandidatehandlerlogs.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+CIceConnection::CIceConnection( TUint aStreamId,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ MIceConnectionObserver& aObserver )
+ :
+ iStreamId( aStreamId ),
+ iMultiplexer( aMultiplexer ),
+ iObserver( aObserver )
+ {
+
+ }
+
+
+void CIceConnection::ConstructL( TUint aAddrFamily )
+ {
+ iMultiplexer.RegisterConnectionObserverL( iStreamId, *this );
+ iConnectionId
+ = iMultiplexer.CreateConnectionL( iStreamId, aAddrFamily );
+
+ TUint32 dummyIap;
+ TInt dummyQos;
+ iMultiplexer.GetStreamInfoL( iStreamId, dummyIap, dummyQos, iProtocol );
+
+ iLocalAddress = iMultiplexer.LocalIPAddressL( iStreamId, iConnectionId );
+ }
+
+
+CIceConnection* CIceConnection::NewL( TUint aStreamId,
+ TUint aAddrFamily,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ MIceConnectionObserver& aObserver )
+ {
+ CIceConnection* self = CIceConnection::NewLC(
+ aStreamId, aAddrFamily, aMultiplexer, aObserver );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+CIceConnection* CIceConnection::NewLC( TUint aStreamId,
+ TUint aAddrFamily,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ MIceConnectionObserver& aObserver )
+ {
+ CIceConnection* self = new( ELeave ) CIceConnection(
+ aStreamId, aMultiplexer, aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL( aAddrFamily );
+ return self;
+ }
+
+
+CIceConnection::~CIceConnection()
+ {
+ TRAP_IGNORE( iMultiplexer.UnregisterConnectionObserverL(
+ iStreamId, *this ) )
+
+ TRAP_IGNORE( iMultiplexer.RemoveConnectionL( iStreamId, iConnectionId ) )
+ iBoundCandidates.ResetAndDestroy();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::StreamId
+// ---------------------------------------------------------------------------
+//
+TUint CIceConnection::StreamId() const
+ {
+ return iStreamId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::State
+// ---------------------------------------------------------------------------
+//
+CIceConnection::TConnectionState CIceConnection::State() const
+ {
+ return iState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::LocalAddress
+// ---------------------------------------------------------------------------
+//
+const TInetAddr& CIceConnection::LocalAddress() const
+ {
+ return iLocalAddress;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::TransportProtocol
+// ---------------------------------------------------------------------------
+//
+TUint CIceConnection::TransportProtocol() const
+ {
+ return iProtocol;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::ConnectionId
+// ---------------------------------------------------------------------------
+//
+TUint CIceConnection::ConnectionId() const
+ {
+ return iConnectionId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::SetReceivingStateL
+// ---------------------------------------------------------------------------
+//
+void CIceConnection::SetReceivingStateL( TNATFWStreamingState aState,
+ TConnectionNotifyState aNotifyState )
+ {
+ __ICEDP( "CIceConnection::SetReceivingStateL" )
+
+ iNotifyState = aNotifyState;
+ iMultiplexer.SetReceivingStateL( iStreamId, iConnectionId, aState );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::SetSendingStateL
+// ---------------------------------------------------------------------------
+//
+void CIceConnection::SetSendingStateL( TNATFWStreamingState aState,
+ TConnectionNotifyState aNotifyState,
+ const TInetAddr& aDestAddr )
+ {
+ __ICEDP( "CIceConnection::SetSendingStateL" )
+
+ iNotifyState = aNotifyState;
+ iMultiplexer.SetSendingStateL(
+ iStreamId, iConnectionId, aDestAddr, aState );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::BindWithCandidateL
+// ---------------------------------------------------------------------------
+//
+void CIceConnection::BindWithCandidateL( const CNATFWCandidate& aCandidate )
+ {
+ CNATFWCandidate* candidate = CNATFWCandidate::NewLC( aCandidate );
+ iBoundCandidates.AppendL( candidate );
+ CleanupStack::Pop( candidate );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::IsBoundToCandidate
+// ---------------------------------------------------------------------------
+//
+TBool CIceConnection::IsBoundToCandidate(
+ const CNATFWCandidate& aCandidate ) const
+ {
+ TInt index( iBoundCandidates.Count() - 1 );
+ TBool matchFound( EFalse );
+ while ( !matchFound && 0 <= index )
+ {
+ CNATFWCandidate& item( *iBoundCandidates[index] );
+ if ( aCandidate.Type() == item.Type() &&
+ TIceUtils::MatchAddresses( aCandidate.TransportAddr(),
+ item.TransportAddr() ) &&
+ TIceUtils::MatchAddresses( aCandidate.Base(), item.Base() ) )
+ {
+ matchFound = ETrue;
+ }
+
+ index--;
+ }
+
+ return matchFound;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MNcmConnectionObserver.
+// ---------------------------------------------------------------------------
+//
+void CIceConnection::ConnectionNotify( TUint aStreamId, TUint aConnectionId,
+ TConnectionNotifyType aType, TInt aError )
+ {
+ if ( iStreamId == aStreamId && iConnectionId == aConnectionId )
+ {
+ __ICEDP( "CIceConnection::ConnectionNotify, CONSUMING" )
+
+ if ( ENotifyStateEnabled == iNotifyState )
+ {
+ MIceConnectionObserver::TNotifyType type
+ = ConvertToIceConnectionEvent( aType );
+
+ if ( MIceConnectionObserver::ENotifyFirstMediaPacketSent != type )
+ {
+ iObserver.ConnectionNotify( *this, type, aError );
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIceConnection::ConvertToIceConnectionEvent
+// ---------------------------------------------------------------------------
+//
+MIceConnectionObserver::TNotifyType
+ CIceConnection::ConvertToIceConnectionEvent(
+ MNcmConnectionObserver::TConnectionNotifyType aType ) const
+ {
+ switch ( aType )
+ {
+ case MNcmConnectionObserver::EConnectionRemoved:
+ return MIceConnectionObserver::ENotifyConnectionRemoved;
+
+ case MNcmConnectionObserver::EConnectionError:
+ return MIceConnectionObserver::ENotifyConnectionError;
+
+ case MNcmConnectionObserver::EFirstMediaPacketSent:
+ return MIceConnectionObserver::ENotifyFirstMediaPacketSent;
+
+ case MNcmConnectionObserver::EReceivingActivated:
+ return MIceConnectionObserver::ENotifyRecvActivated;
+
+ case MNcmConnectionObserver::EReceivingDeactivated:
+ return MIceConnectionObserver::ENotifyRecvDeactivated;
+
+ case MNcmConnectionObserver::ESendingActivated:
+ return MIceConnectionObserver::ENotifySendActivated;
+
+ case MNcmConnectionObserver::ESendingDeactivated:
+ return MIceConnectionObserver::ENotifySendDeactivated;
+
+ default:
+ ASSERT( EFalse );
+ return MIceConnectionObserver::ENotifyUnknown; // lint#527
+ }
+ }