natplugins/natpnatfwsdpprovider/tsrc/testconsole/src/nsptestconsolestatemach.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natplugins/natpnatfwsdpprovider/tsrc/testconsole/src/nsptestconsolestatemach.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,520 @@
+/*
+* Copyright (c) 2008 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 <e32std.h>
+#include <e32base.h>
+#include "nsptestconsolestatemach.h"
+#include "nsptestconsolecenrep.h"
+#include "nsptestmanager.h"
+#include "nsptest.h"
+#include "nspresultcollector.h"
+
+#define STATE_ID_L( statearray, state ) \
+        User::LeaveIfError( statearray.Find( state ) )
+
+_LIT( KTxtOngoing, "..\n" );
+_LIT( KTxtSettings, "Settings." );
+_LIT( KTxtReleaseTests, "Release tests." );
+_LIT( KTxtIceTests, "ICE tests." );
+_LIT( KTxtResults, "Results." );
+_LIT( KPrev, "[Previous menu]" );
+_LIT( KTxtRun, "Run." );
+_LIT( KTxtCancel, "[Cancel]" );
+_LIT( KTxtPressAnyKey, "[Press any key]" );
+_LIT( KDomain, "Domain." );
+_LIT( KIap, "IAP." );
+_LIT( KAprotocol, "APROTOCOL." );
+_LIT( KStunSrvAddr, "Stun srv address." );
+_LIT( KStunSrvPort, "Stun srv port." );
+
+/**************************************************/
+/***** MAIN MENU **********************************/
+_LIT( KTxtMainInstructions, "Main menu:\n" );
+
+void TNPSTestConsoleStateMain::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtMainInstructions(), aEvent.Status() );
+	
+	aEvent.Actions().DisplaySelection( 1, KTxtSettings() );
+	aEvent.Actions().DisplaySelection( 2, KTxtReleaseTests() );
+	aEvent.Actions().DisplaySelection( 3, KTxtIceTests() );
+	
+	aEvent.Actions().DisplayPrompt( ETrue );
+	aEvent.Actions().DoRead();
+	}
+
+void TNPSTestConsoleStateMain::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		case 49: // 1
+		case 92:
+			{
+			aEvent.NextState() = KStateSettings;
+			break;
+			}
+		
+		case 50: // 2
+		case 97:
+			{
+			aEvent.NextState() = KStateRelease;
+			break;
+			}
+		
+		case 51: // 3
+		case 100:
+			{
+			aEvent.NextState() = KStateIce;
+			break;
+			}
+		
+		default:
+			aEvent.Status() = KErrArgument;
+		}
+	}
+
+/**************************************************/
+/***** SETTINGS ***********************************/
+_LIT( KTxtSettingsInstructions, "Settings:\n" );
+
+void TNPSTestConsoleStateSettings::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtSettingsInstructions(), aEvent.Status() );
+	
+	TBuf<255> buffer;
+	TCenrepReader reader( aEvent.Actions().Cenrep() );
+	reader.ReadDomainL( buffer );
+	aEvent.Actions().DisplaySelection( 1, KDomain(), buffer );
+	
+	TUint32 iap;
+	reader.ReadIapL( iap );
+	aEvent.Actions().DisplaySelection( 2, KIap(), iap );
+	
+	aEvent.Actions().DisplaySelection( 3, KPrev() );
+	aEvent.Actions().DisplayPrompt( ETrue );
+	aEvent.Actions().DoRead();
+	}
+
+void TNPSTestConsoleStateSettings::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		case 49: // 1
+		case 92:
+			{
+			aEvent.Actions().DisplayOne();
+			aEvent.Actions().DisplayPrompt();
+			
+			TBuf<255> buffer;
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadDomainL( buffer );
+			
+			if ( !buffer.Length() )
+				{
+				aEvent.Actions().GetStringFromConsoleL( buffer );
+				TCenrepWriter writer( reader.Cenrep() );
+				writer.WriteDomainL( buffer );
+				}
+			else
+				{
+				aEvent.NextState() = KStateDomainSettings;
+				}
+			
+			break;
+			}
+		
+		case 50: // 2
+		case 97:
+			{
+			aEvent.Actions().DisplayTwo();
+			aEvent.Actions().DisplayPrompt();
+			
+			TUint32 iap( 0 );
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadIapL( iap );
+			aEvent.Actions().GetTUint32FromConsoleL( iap );
+			TCenrepWriter writer( reader.Cenrep() );
+			writer.WriteIapL( iap );
+			break;
+			}
+		
+		case 51: // 3
+		case 100:
+			{
+			aEvent.NextState() = KStateMain;
+			break;
+			}
+		
+		default:
+			aEvent.Status() = KErrArgument;
+		}
+	}
+
+/**************************************************/
+/***** DOMAIN SETTINGS ****************************/
+_LIT( KTxtDomainSettingsInstructions, "Domain specific Settings:\n" );
+
+void TNPSTestConsoleStateDomainSettings::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtDomainSettingsInstructions(), aEvent.Status() );
+	
+	TBuf<255> buffer;
+	TCenrepReader reader( aEvent.Actions().Cenrep() );
+	buffer.Zero();
+	reader.ReadDomainL( buffer );
+	aEvent.Actions().DisplaySelection( 1, KDomain(), buffer );
+	
+	buffer.Zero();
+	reader.ReadAProtocolL( buffer );
+	aEvent.Actions().DisplaySelection( 2, KAprotocol(), buffer );
+	
+	buffer.Zero();
+	reader.ReadStunSrvAddrL( buffer );
+	aEvent.Actions().DisplaySelection( 3, KStunSrvAddr(), buffer );
+	
+	TUint port;
+	reader.ReadStunSrvPortL( port );
+	aEvent.Actions().DisplaySelection( 4, KStunSrvPort(), (TUint32) port );
+	
+	aEvent.Actions().DisplaySelection( 5, KPrev() );
+	aEvent.Actions().DisplayPrompt( ETrue );
+	aEvent.Actions().DoRead();
+	}
+
+void TNPSTestConsoleStateDomainSettings::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		case 49: // 1
+		case 92:
+			{
+			aEvent.Actions().DisplayOne();
+			aEvent.Actions().DisplayPrompt();
+			
+			TBuf<255> buffer;
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadDomainL( buffer );
+			aEvent.Actions().GetStringFromConsoleL( buffer );
+			TCenrepWriter writer( reader.Cenrep() );
+			writer.WriteDomainL( buffer );
+			break;
+			}
+		
+		case 50: // 2
+		case 97:
+			{
+			aEvent.Actions().DisplayTwo();
+			aEvent.Actions().DisplayPrompt();
+			
+			TBuf<255> buffer;
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadAProtocolL( buffer );
+			aEvent.Actions().GetStringFromConsoleL( buffer );
+			TCenrepWriter writer( reader.Cenrep() );
+			writer.WriteAProtocolL( buffer );
+			break;
+			}
+		
+		case 51: // 3
+		case 100:
+			{
+			aEvent.Actions().DisplayThree();
+			aEvent.Actions().DisplayPrompt();
+			
+			TBuf<255> buffer;
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadStunSrvAddrL( buffer );
+			aEvent.Actions().GetStringFromConsoleL( buffer );
+			TCenrepWriter writer( reader.Cenrep() );
+			writer.WriteStunSrvAddrL( buffer );
+			break;
+			}
+		
+		case 52: // 4
+			{
+			aEvent.Actions().DisplayFour();
+			aEvent.Actions().DisplayPrompt();
+			
+			TUint port;
+			TCenrepReader reader( aEvent.Actions().Cenrep() );
+			reader.ReadStunSrvPortL( port );
+			
+			TUint32 integer( port );
+			aEvent.Actions().GetTUint32FromConsoleL( integer );
+			TCenrepWriter writer( reader.Cenrep() );
+			writer.WriteStunSrvPortL( (TUint) integer );
+			break;
+			}
+		
+		case 53: // 5
+			{
+			aEvent.NextState() = KStateSettings;
+			break;
+			}
+		
+		default:
+			aEvent.Status() = KErrArgument;
+		}
+	}
+
+/**************************************************/
+/***** RELEASE ************************************/
+_LIT( KTxtReleaseInstructions, "Release test:\n" );
+
+void TNPSTestConsoleStateRelease::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtReleaseInstructions(), aEvent.Status() );
+	
+	aEvent.Actions().DisplaySelection( 1, KTxtRun() );
+	aEvent.Actions().DisplaySelection( 2, KTxtResults() );
+	aEvent.Actions().DisplaySelection( 3, KPrev() );
+	
+	aEvent.Actions().DisplayPrompt( ETrue );
+	aEvent.Actions().DoRead();
+	}
+
+void TNPSTestConsoleStateRelease::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		case 49: // 1
+		case 92:
+			{
+			aEvent.Actions().DisplayOne();
+			aEvent.Actions().Manager().RelTestL();
+			aEvent.NextState() = KStateRunning;
+			break;
+			}
+		
+		case 50: // 2
+		case 97:
+			{
+			aEvent.NextState() = KStateResults;
+			break;
+			}
+		
+		case 51: // 3
+		case 100:
+			{
+			aEvent.NextState() = KStateMain;
+			break;
+			}
+		
+		default:
+			aEvent.Status() = KErrArgument;
+		}
+	}
+
+/**************************************************/
+/***** RUNNING ************************************/
+_LIT( KTxtRunningInstructions, "Running:\n" );
+
+void TNPSTestConsoleStateRunning::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtRunningInstructions(), aEvent.Status() );
+	
+	aEvent.Actions().DoRead();
+	aEvent.Actions().Manager().StartAllL( aEvent.Actions().Console() );
+	aEvent.Actions().DisplayPrompt( KTxtPressAnyKey(), ETrue );
+	}
+
+void TNPSTestConsoleStateRunning::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		default:
+			{
+			aEvent.NextState() = KStateRelease;
+			break;
+			}
+		}
+	}
+
+/**************************************************/
+/***** RESULTS ************************************/
+_LIT( KTxtResultsInstructions, "Results:\n" );
+
+void TNPSTestConsoleStateResults::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtResultsInstructions(), aEvent.Status() );
+	
+	CResultCollector* results = CResultCollector::NewLC( aEvent.Actions().Console() );
+	aEvent.Actions().Manager().AcceptL( *results );
+	CleanupStack::PopAndDestroy( results );
+	
+	aEvent.Actions().DoRead();
+	aEvent.Actions().DisplayPrompt( KTxtPressAnyKey(), ETrue );
+	}
+
+void TNPSTestConsoleStateResults::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		default:
+			{
+			aEvent.NextState() = KStateMain;
+			break;
+			}
+		}
+	}
+
+/**************************************************/
+/***** ICE ****************************************/
+_LIT( KTxtIceInstructions, "Ice:\n" );
+
+void TNPSTestConsoleStateIce::EntryL( TNSPStateEvent& aEvent )
+	{
+	aEvent.Actions().DisplayMenu( KTxtIceInstructions(), aEvent.Status() );
+	
+	// TBD:
+	aEvent.Actions().DoRead();
+	aEvent.Actions().DisplayPrompt( KTxtPressAnyKey(), ETrue );
+	}
+
+void TNPSTestConsoleStateIce::ExitL( TNSPStateEvent& aEvent )
+	{
+	switch ( aEvent.KeyCode() )
+		{
+		default:
+			{
+			aEvent.NextState() = KStateMain;
+			break;
+			}
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::NewL
+// -----------------------------------------------------------------------------
+// 
+CNSPTestConsoleStateMachine* CNSPTestConsoleStateMachine::NewL()
+    {
+    CNSPTestConsoleStateMachine* self = new (ELeave) CNSPTestConsoleStateMachine;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::CNSPTestConsoleStateMachine
+// -----------------------------------------------------------------------------
+// 
+CNSPTestConsoleStateMachine::CNSPTestConsoleStateMachine()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::ConstructL
+// -----------------------------------------------------------------------------
+// 
+void CNSPTestConsoleStateMachine::ConstructL()
+    {
+    iCurrentState = new (ELeave) TNPSTestConsoleStateMain;
+    
+    TNSPTestConsoleState* state = iCurrentState;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateMain ) );
+    CleanupStack::Pop( state );
+    
+    state = new (ELeave) TNPSTestConsoleStateSettings;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateSettings ) );
+    CleanupStack::Pop( state );
+
+    state = new (ELeave) TNPSTestConsoleStateDomainSettings;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateDomainSettings ) );
+    CleanupStack::Pop( state );
+    
+    state = new (ELeave) TNPSTestConsoleStateRelease;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateRelease ) );
+    CleanupStack::Pop( state );
+    
+    state = new (ELeave) TNPSTestConsoleStateRunning;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateRunning ) );
+    CleanupStack::Pop( state );
+    
+    state = new (ELeave) TNPSTestConsoleStateResults;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateResults ) );
+    CleanupStack::Pop( state );
+    
+    state = new (ELeave) TNPSTestConsoleStateIce;
+    CleanupStack::PushL( state );
+    User::LeaveIfError( iStateArray.Insert( state, KStateIce ) );
+    CleanupStack::Pop( state );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::~CNSPTestConsoleStateMachine
+// -----------------------------------------------------------------------------
+// 
+CNSPTestConsoleStateMachine::~CNSPTestConsoleStateMachine()
+    {	
+    iStateArray.ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::Start
+// -----------------------------------------------------------------------------
+// 
+TInt CNSPTestConsoleStateMachine::Start( TNSPStateEvent& aEvent )
+    {
+    TRAPD( err, iCurrentState->EntryL( aEvent ) );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSPTestConsoleStateMachine::ProcessL
+// -----------------------------------------------------------------------------
+// 
+void CNSPTestConsoleStateMachine::ProcessL( TNSPStateEvent& aEvent )
+    {
+    __ASSERT_ALWAYS( &aEvent, User::Leave( KErrArgument ) );
+    
+    TNSPTestConsoleStateIndex index = STATE_ID_L( iStateArray, iCurrentState );
+    aEvent.NextState() = index;
+    
+    iCurrentState->ExitL( aEvent );
+    
+    if ( index != aEvent.NextState() &&
+    	 0 <= aEvent.NextState() &&
+    	 iStateArray.Count() > aEvent.NextState() )
+    	{
+    	TNSPTestConsoleState* newstate = iStateArray[ aEvent.NextState() ];
+    	TRAPD( err, newstate->EntryL( aEvent ) );
+    	
+    	if ( KErrNone == err )
+    		{
+    		iCurrentState = newstate;
+    		}
+    	else
+    		{
+    		aEvent.Status() = err;
+    		TRAP_IGNORE( iCurrentState->EntryL( aEvent ) );
+    		}
+    	}
+    else
+    	{
+    	TRAP_IGNORE( iCurrentState->EntryL( aEvent ) );
+    	}
+    }
+