diff -r 000000000000 -r 1bce908db942 natfw/tsrc/natfwtestconsoles/natfwtestconsole/src/icetests.cpp --- /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 +#include "natfwconnectivityapidefs.h" +#include "natfwconnectivityapi.h" +#include "natfwcandidate.h" +#include "natfwcandidatepair.h" +#include + +#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 ); + } + }