diff -r 000000000000 -r 1bce908db942 natfw/natfwicecandidatehandler/src/ciceconnection.cpp --- /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 + } + }