--- /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 );
+ }
+ }