natfw/natfwclient/tsrc/ut_natfwclient/stubs/natfwconnectionhandler.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwclient/tsrc/ut_natfwclient/stubs/natfwconnectionhandler.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,345 @@
+/*
+* 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:    
+*
+*/
+
+
+
+
+#include "mncmconnectionmultiplexer.h"
+#include <e32std.h>
+#include <e32base.h>
+#include "natfwcandidate.h"
+#include "natfwconnectionhandler.h"
+
+#include "natfwpluginlogs.h"
+#include "natfwcandidate.h"
+#include "natfwcandidatepair.h"
+#include "mnatfwpluginobserver.h"
+
+const TUint32 KErrorTestAddress = INET_ADDR( 255, 255, 255, 255 );
+const TUint32 KLocalAddress = INET_ADDR( 100, 100, 100, 100 );
+const TUint KLocalPort = 1000;
+const TUint KTimerVal = 1000000; //1000ms
+
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// ---------------------------------------------------------------------------
+//
+CNATFWConnectionHandler* CNATFWConnectionHandler::NewL( 
+    MNATFWPluginObserver* aPluginObserver, CNATFWPluginApi& aPlugin )
+    {
+    __NATPLUGIN( "CNATFWConnectionHandler::NewL" )
+    CNATFWConnectionHandler* self = 
+        new( ELeave ) CNATFWConnectionHandler( aPluginObserver, aPlugin );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+CNATFWConnectionHandler::CNATFWConnectionHandler(
+    MNATFWPluginObserver* aPluginObserver,
+    CNATFWPluginApi& aPlugin ) :
+    iPluginObserver(aPluginObserver), iPlugin( aPlugin ),
+    CActive( CActive::EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CNATFWConnectionHandler::~CNATFWConnectionHandler()
+    {
+    delete iDomain;
+    iConnMux = NULL;
+    delete iCandidate;    
+    delete iCandidatePair;
+    Cancel();
+    iTimer.Cancel();
+    iTimer.Close();
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// Creates NATFWStunConnectionHandler.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::ConstructL( )
+    {
+    User ::LeaveIfError(iTimer.CreateLocal()) ;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Initializes STUN Connection Handler.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::PluginInitializeL(
+    TUint32 aIapId,
+    const TDesC8& aDomain,
+    MNcmConnectionMultiplexer& aMultiplexer )
+    {
+    iConnMux = &aMultiplexer;
+    iDomain = aDomain.AllocL();
+    iIapId = aIapId;
+    }
+    
+// ---------------------------------------------------------------------------
+// NAT FW Client calls to fetch candidate. Forwards request to 
+// Stun Connection Handler.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::FetchCandidateL( TUint aStreamId )
+    {
+    iStreamId = aStreamId;
+    
+    iState = EFetchCandidate;
+        
+    TInetAddr publicAddr( KLocalAddress, KLocalPort );
+    
+    delete iCandidate;
+    iCandidate = NULL;
+    
+    iCandidate = CNATFWCandidate::NewL();
+    
+    //Set candidate parameters
+    iCandidate->SetStreamId( aStreamId );
+    iCandidate->SetType( CNATFWCandidate::EServerReflexive );
+    iCandidate->SetTransportAddrL( publicAddr );
+    
+    if ( iFetchQueue == 0 )
+        {
+        iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KTimerVal ) );
+        SetActive();
+        }
+    iFetchQueue++;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWConnectionHandler::FetchCandidatesL
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::FetchCandidatesL( TUint aStreamId )
+    {
+    iStreamId = aStreamId;
+    
+    iState = EFetchCandidates;
+        
+    TInetAddr publicAddr( KLocalAddress, KLocalPort );
+    
+    delete iCandidate;
+    iCandidate = NULL;
+    
+    iCandidate = CNATFWCandidate::NewL();
+    
+    //Set candidate parameters
+    iCandidate->SetStreamId( aStreamId );
+    iCandidate->SetType( CNATFWCandidate::EServerReflexive );
+    iCandidate->SetTransportAddrL( publicAddr );
+    
+    iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KTimerVal ) );
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWConnectionHandler::PerformConnectivityChecksL
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::PerformConnectivityChecksL()
+    {
+    const TUint KStreamId = 99;
+    
+    iStreamId = KStreamId;
+    TInetAddr publicAddr( KLocalAddress, KLocalPort );
+    
+    iState = EConnectivityChecks;
+    
+    CNATFWCandidate* remoteCand = CNATFWCandidate::NewLC();
+    CNATFWCandidate* localCand = CNATFWCandidate::NewLC();
+    
+    //Set candidate parameters
+    remoteCand->SetStreamId( KStreamId );
+    remoteCand->SetType( CNATFWCandidate::EServerReflexive );
+    remoteCand->SetTransportAddrL( publicAddr );
+    
+    localCand->SetStreamId( KStreamId );
+    localCand->SetType( CNATFWCandidate::EServerReflexive );
+    localCand->SetTransportAddrL( publicAddr );
+    
+    delete iCandidatePair;
+    iCandidatePair = NULL;
+    
+    iCandidatePair = CNATFWCandidatePair::NewL( *localCand, *remoteCand );
+    
+    CleanupStack::PopAndDestroy( 2 );
+    
+    iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KTimerVal ) );
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Connect. Not in use.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::ConnectL()
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Notifies the Plug-in's client of stream's current sending status.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::SetReceivingStateL( TUint aStreamId,
+        TNATFWStreamingState aState )
+    {
+    iStreamId = aStreamId;
+    iStreamingStatus = aState;
+    iState = ESetReceivingState;
+    
+    iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KTimerVal ) );
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Notifies the Plug-in's client of stream's current sending status.
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::SetSendingStateL( TUint aStreamId,
+                                          const TInetAddr& aDestAddr,
+                                          TNATFWStreamingState aState )
+    {
+    iStreamId = aStreamId;
+    iStreamingStatus = aState;
+    
+    if ( KErrorTestAddress == aDestAddr.Address() )
+        {
+        iState = EErrorTestAddress;
+        }
+    else
+        {
+        iState = ESetSendingState;
+        }
+
+    iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KTimerVal ) );
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CNATFWConnectionHandler::RunL
+// ---------------------------------------------------------------------------
+//
+void CNATFWConnectionHandler::RunL()
+    {
+    switch( iState )
+        {
+        case EFetchCandidate:
+            iPluginObserver->NewLocalCandidateFound( iPlugin, iCandidate );
+            iPluginObserver->Notify( iPlugin, iStreamId, 
+                MNATFWPluginObserver::EFetchingCompleted, KErrNone );
+            
+            iFetchQueue--;
+            
+            if ( iFetchQueue > 0 )
+                {
+                iTimer.After( iStatus,
+                    TTimeIntervalMicroSeconds32( KTimerVal ) );
+                SetActive();
+                iState = EFetchCandidate;
+                }
+            else
+                {
+                iState = EIdle;
+                }
+            break;
+            
+        case EFetchCandidates:
+            iPluginObserver->NewLocalCandidateFound( iPlugin, iCandidate );
+            iPluginObserver->Notify( iPlugin, iStreamId, 
+                MNATFWPluginObserver::EFetchingCompleted, KErrNone );
+            iState = EIdle;
+            break;
+        case EConnectivityChecks:
+            iPluginObserver->NewCandidatePairFound( iPlugin, iCandidatePair );
+            iPluginObserver->Notify( iPlugin, iStreamId, 
+                MNATFWPluginObserver::EConnChecksCompleted, KErrNone );
+            iState = EIdle;
+            break;
+        case ESetReceivingState:
+            if ( EStreamingStateActive == iStreamingStatus )
+                {
+                iPluginObserver->Notify( iPlugin, iStreamId, 
+                    MNATFWPluginObserver::EReceivingActivated, KErrNone );
+                }
+            else
+                {
+                iPluginObserver->Notify( iPlugin, iStreamId, 
+                    MNATFWPluginObserver::EReceivingDeactivated, KErrNone );
+                }
+            iState = EIdle;
+            break;
+            
+        case ESetSendingState:
+            if (  EStreamingStateActive == iStreamingStatus )
+                {
+                iPluginObserver->Notify( iPlugin, iStreamId, 
+                    MNATFWPluginObserver::ESendingActivated, KErrNone );
+                }
+            else
+                {
+                iPluginObserver->Notify( iPlugin, iStreamId, 
+                    MNATFWPluginObserver::ESendingDeactivated, KErrNone );
+                }
+            iState = EIdle;
+            break;
+        case EErrorTestAddress:
+            iPluginObserver->Error( iPlugin, iStreamId, KErrArgument );
+            iState = EIdle;
+            break;
+        default:
+            iState = EIdle;
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNATFWConnectionHandler::DoCancel
+// ---------------------------------------------------------------------------
+//    
+void CNATFWConnectionHandler::DoCancel()
+    {
+    iTimer.Cancel();
+    }
+    
+// End of file
\ No newline at end of file