natfw/tsrc/natfwtestconsoles/natfwtestconsole/src/icetests.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/tsrc/natfwtestconsoles/natfwtestconsole/src/icetests.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* 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:    
+*
+*/
+
+
+
+
+// INCLUDES
+#include <e32debug.h>
+#include "natfwconnectivityapidefs.h"
+#include "natfwconnectivityapi.h"
+#include "natfwcandidate.h"
+#include "natfwcandidatepair.h"
+#include <badesca.h>
+
+#include "icetests.h"
+#include "iceteststubs.h"
+#include "testdefinitions.hrh"
+#include "mnatfwsocketmediaconnwrapper.h"
+#include "natfwcredentials.h"
+
+const TInt KDefaultQos = 46;
+const TInt KStreamCollectionId = 1;
+const TInt KMediaComponentId = 1;
+//_LIT8( KUsername, "username" );
+//_LIT8( KPassword, "password" );
+//const TUint32 KDestAddr = INET_ADDR( 0,0,0,0 );
+//const TUint KDestPort = 33000;
+//_LIT8( KUDPMessage, "UDP_Message" );
+//_LIT8( KIncomingAddress, "10.10.10.10" );
+
+const TInt KFetchingTime = 10000000; // 10 sec.
+
+
+
+// ======== MEMBER FUNCTIONS =================================================
+
+// ---------------------------------------------------------------------------
+// CICETests::CICETests
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CICETests::CICETests(
+    CConsoleBase& aConsole,
+    CNATFWConnectivityApi& aNat,
+    CICETestStubs& aIFStub,
+    TUint aIapId,
+    TUint32 aDestAddress, 
+    TUint aDestPort,
+    TUint aProtocol ) :
+    iConsole( aConsole ), iNat( aNat ), iIfStub( aIFStub ), iTestIapId( aIapId ),
+    iDestAddress( aDestAddress ), iDestPort( aDestPort ), iProtocol( aProtocol )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CICETests::ConstructL( const TDesC8& aDomain )
+    {
+    iTestDomain = aDomain.AllocL();
+    iIfStub.SetObserver( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::NewL
+// Static constructor.
+// ---------------------------------------------------------------------------
+//   
+CICETests* CICETests::NewL( CConsoleBase& aConsole,
+    CNATFWConnectivityApi& aNat, CICETestStubs& aIFStub,
+    const TDesC8& aDomain, TUint aIapId, TUint32 aDestAddress,
+    TUint aDestPort, TUint aProtocol )
+    {
+    CICETests* self 
+        = new ( ELeave ) CICETests( aConsole, aNat, aIFStub, aIapId,
+        aDestAddress, aDestPort, aProtocol );
+
+    CleanupStack::PushL( self );
+    self->ConstructL( aDomain );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::~CICETests
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CICETests::~CICETests()
+    {
+    delete iTestDomain;
+    TInt count = iCandidateArray.Count();
+    for ( TInt i( 0 ); i < count; i++  )
+        {
+        delete iCandidateArray[i] ;
+        }
+    iCandidateArray.Reset();
+    delete iCandidatePair;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::LocalCandidateFound
+// From MTestConsoleStubsObserver
+// ---------------------------------------------------------------------------
+//
+void CICETests::LocalCandidateFound( CNATFWCandidate& aLocalCandidate/*,
+    TBool aLastCandidate*/ )
+    {
+    //iReceiveMediaAddress = aLocalCandidate.TransportAddr();
+    //iLocalCandidate = &aLocalCandidate;
+    iCandidateArray.AppendL( &aLocalCandidate );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::NewCandidatePairFound
+// From MICETestStubsObserver
+// ---------------------------------------------------------------------------
+//
+void CICETests::NewCandidatePairFound( CNATFWCandidatePair* aCandidatePair )
+    {
+    RDebug::Print( _L( "TEST PRINT: CICETests::NewCandidatePairFound" ) );
+    TBuf<40> buffer;
+    iCandidatePair = aCandidatePair;
+    
+    TInetAddr localAddr = iCandidatePair->LocalCandidate().TransportAddr();
+    localAddr.Output( buffer );
+    RDebug::Print( _L( "Local candidate: %S" ), &buffer );
+
+    localAddr = iCandidatePair->RemoteCandidate().TransportAddr();
+    buffer.Zero();
+    localAddr.Output( buffer );
+    RDebug::Print( _L( "Remote candidate: %S" ), &buffer );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::DoRunNatTestsL
+// 
+// ---------------------------------------------------------------------------
+//
+void CICETests::DoRunIceTestsL()
+    {
+    TInt err( KErrNone );
+
+    err = KErrNone;
+    RDebug::Print( _L("\n\nNAT_ICE_TEST_START: TestFetchCandidatesL") );
+    iConsole.Printf( _L("Fetch Canditates test") );
+    //__UHEAP_MARK;
+    TRAP( err, TestFetchCandidatesL() );
+    RDebug::Print( _L("\nNAT_ICE_UDP_TEST_STOP: TestFetchCandidatesL, ERR: %d"), err );
+    PrintTestResult( err );
+    //__UHEAP_MARKEND;
+    
+    err = KErrNone;
+    RDebug::Print( _L( "\n\nNAT_ICE_TEST_START: Set role" ) );
+    iConsole.Printf( _L( "Set role test" ) );
+    __UHEAP_MARK;
+    TRAP( err, TestSetOperationModeL() );
+    RDebug::Print( _L( "\nNAT_ICE_UDP_TEST_STOP: Set role, ERR: %d" ), err );
+    PrintTestResult( err );
+    __UHEAP_MARKEND;
+    /*
+    err = KErrNone;
+    RDebug::Print( _L( "\n\nNAT_ICE_TEST_START: Set credential" ) );
+    iConsole.Printf( _L( "Set Identification test" ) );
+    __UHEAP_MARK;
+    TRAP( err, TestSetIdentificationL() );
+    RDebug::Print( _L( "\nNAT_ICE_UDP_TEST_STOP: Set credential, ERR: %d" ), err );
+    PrintTestResult( err );
+    __UHEAP_MARKEND;
+    
+    err = KErrNone;
+    RDebug::Print( _L("\n\nNAT_STUN_TEST_START: Perform Connectivity Checks") );
+    iConsole.Printf( _L("Perform Candidate Checks test") );
+    __UHEAP_MARK;
+    TRAP( err, TestPerformConnectivityChecksL() );
+    RDebug::Print( _L("\nNAT_STUN_TEST_STOP: Perform Connectivity Checks, ERR: %d"), err );
+    PrintTestResult( err );
+    __UHEAP_MARKEND;
+    */
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::TestFetchCandidatesL
+// ---------------------------------------------------------------------------
+//
+void CICETests::TestFetchCandidatesL()
+    {
+    const TInt KDefaultGranularity = 1;
+    
+    TUint sessionId( 0 );
+    TUint streamId( 0 );
+    TInt loadedPluginInd( 0 );
+    
+    CDesC8Array* plugins =
+        new ( ELeave ) CDesC8ArrayFlat( KDefaultGranularity );
+    CleanupStack::PushL( plugins );
+    
+    plugins->AppendL( _L8( "nokia.ice" ) );
+    
+    sessionId = iNat.CreateSessionL( iTestIapId, *iTestDomain );
+    iIfStub.StartActiveSchedulerL();
+    
+    iNat.LoadPluginL( sessionId, *plugins, loadedPluginInd );
+    
+    streamId = iNat.CreateStreamL( sessionId, iProtocol, KDefaultQos );
+    
+    iNat.FetchCandidatesL( sessionId, streamId, KStreamCollectionId,
+    	KMediaComponentId, KAfInet );
+    iIfStub.StartActiveSchedulerL( KFetchingTime );
+    
+    iNat.CloseStreamL( sessionId, streamId );
+    iNat.CloseSessionL( sessionId );
+    
+    for( TInt i( 0 ); i < iCandidateArray.Count(); i++ )
+        {
+        RDebug::Print( _L( "\nTEST PRINT: Contents of Candidate %d" ), i + 1 );
+        PrintContents( iCandidateArray[i] );
+        }
+    iCandidateArray.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( plugins );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::PrintContent  
+// ---------------------------------------------------------------------------
+//
+void CICETests::PrintContents( CNATFWCandidate* aCandidate )
+    {
+    TInetAddr address;
+    TBuf16<160> buffer;
+    
+    buffer.AppendFormat( _L( "Candidate type = %d\n"), aCandidate->Type() );
+
+    address = aCandidate->TransportAddr();
+    address.Output( buffer );
+    
+    buffer.AppendFormat( _L( "Transport address = %S:%d\n" ), &buffer, address.Port() );
+    
+    buffer.AppendFormat( _L( "Transport protocol = %d\n" ),
+        aCandidate->TransportProtocol() );
+        
+    address = aCandidate->Base();
+    address.Output( buffer );
+    
+    buffer.AppendFormat( _L( "Candidate base = %S:%d\n" ), &buffer, address.Port() );
+
+    RDebug::Print( buffer );
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CICETests::TestSetOperationModeL
+// ---------------------------------------------------------------------------
+//
+void CICETests::TestSetOperationModeL()
+    {
+    TUint sessionId( 0 );
+    
+    sessionId = iNat.CreateSessionL( iTestIapId, iTestDomain->Des() );
+    iIfStub.StartActiveSchedulerL();
+    
+    iNat.SetRoleL( sessionId, EIceRoleControlling );
+    
+    iNat.SetRoleL( sessionId, EIceRoleControlled );
+    
+    iNat.CloseSessionL( sessionId );
+    iCandidateArray.ResetAndDestroy();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CICETests::TestSetIdentificationL
+// ---------------------------------------------------------------------------
+//
+/*
+void CICETests::TestSetIdentificationL()
+    {
+    TUint sessionId( 0 );
+    TUint streamId( 0 );
+    CNATFWCredentials* natIdIn = CNATFWCredentials::NewL();
+    CNATFWCredentials* natIdOut = CNATFWCredentials::NewL();
+    
+    natIdIn->SetDirection( CNATFWCredentials::EInbound );
+    natIdIn->SetUsernameL( KUsername );
+    natIdIn->SetPasswordL( KPassword );
+    natIdIn->SetStreamCollectionId( KStreamCollectionId );
+    
+    natIdOut->SetDirection( CNATFWCredentials::EOutbound );
+    natIdOut->SetUsernameL( KUsername );
+    natIdOut->SetPasswordL( KPassword );
+    natIdOut->SetStreamCollectionId( KStreamCollectionId );
+    
+    sessionId = iNat.CreateSessionL( iTestIapId, iTestDomain->Des() );
+    iIfStub.StartActiveSchedulerL();
+    
+    streamId = iNat.CreateStreamL( sessionId, iProtocol, KDefaultQos );
+
+    iNat.SetCredentialsL( sessionId, streamId, *natIdIn );
+    
+    iNat.SetCredentialsL( sessionId, streamId, *natIdOut );
+    
+    iNat.CloseStreamL( sessionId, streamId );
+    iNat.CloseSessionL( sessionId );
+    delete natIdIn;
+    delete natIdOut;
+    }
+*/
+
+// ---------------------------------------------------------------------------
+// CICETests::TestPerformConnectivityChecksL
+// ---------------------------------------------------------------------------
+//
+/*
+void CICETests::TestPerformConnectivityChecksL()
+    {
+    TUint sessionId( 0 );
+    TUint streamId( 0 );
+    CNATFWCredentials* natId = CNATFWCredentials::NewL();
+    
+    natId->SetDirection( CNATFWCredentials::EOutbound );
+    natId->SetUsernameL( KUsername );
+    natId->SetPasswordL( KPassword );
+    natId->SetStreamCollectionId( KStreamCollectionId );
+    
+    sessionId = iNat.CreateSessionL( iTestIapId, iTestDomain->Des() );
+    iIfStub.StartActiveSchedulerL();
+    
+    streamId = iNat.CreateStreamL( sessionId, iProtocol, KDefaultQos );
+    iNat.SetCredentialsL( sessionId, streamId, *natId );
+    
+    iNat.FetchCandidatesL( sessionId, streamId, KStreamCollectionId,
+    	KMediaComponentId );
+    iIfStub.StartActiveSchedulerL( KFetchingTime );
+    
+    // role ICE Controlled
+    iNat.SetRoleL( sessionId, EIceRoleControlled );
+    iNat.PerformConnectivityChecksL( sessionId, iCandidateArray );
+    
+    // role ICE Controlling
+    iNat.SetRoleL( sessionId, EIceRoleControlling );
+    iNat.PerformConnectivityChecksL( sessionId, iCandidateArray );
+    
+    iNat.CloseStreamL( sessionId, streamId );
+    iNat.CloseSessionL( sessionId );
+    delete natId;
+    iCandidateArray.ResetAndDestroy();
+    }
+*/
+
+// ---------------------------------------------------------------------------
+// CICETests::PrintResult
+// ---------------------------------------------------------------------------
+//
+void CICETests::PrintTestResult( TInt aError )
+    {
+    if ( KErrNone == aError )
+        {
+        iConsole.Printf( _L("...Ready \n") );
+        }
+    else
+        {
+        iConsole.Printf( _L("...Error: %d\n"), aError );
+        }
+    }