natfw/natfwicecandidatehandler/src/ciceconnection.cpp
changeset 0 1bce908db942
--- /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
+        }
+    }