diff -r 000000000000 -r 857a3e953887 nettools/conntest/src/ConnTestView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nettools/conntest/src/ConnTestView.cpp Thu Dec 17 08:39:25 2009 +0200 @@ -0,0 +1,1316 @@ +/* +* Copyright (c) 2006-2009 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: The view class for ConnTest +* Implements command handling, menu initializing and view activation +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include + +#include +#include "ConnTestView.h" +#include "ConnTestContainer.h" +#include "CustomPrefsItemList.h" +#include "CustomPrefsData.h" +#include "SettingItemList.h" +#include "SettingData.h" +#include "SocketsEngine.h" +#include "Utils.h" +#include +#include "ConnTestAppUi.h" + + +// CONSTANTS + + +// ================= MEMBER FUNCTIONS ======================= + + +// --------------------------------------------------------- +// CConnTestView::CConnTestView(const TUid aViewId) +// Constructor +// --------------------------------------------------------- +// +CConnTestView::CConnTestView(const TUid aViewId) + : iViewId(aViewId), iWaiter( NULL ) + { + RDebug::Print(_L("ConnTest: CConnTestView::CConnTestView( aViewId )")); + } + +// --------------------------------------------------------- +// CConnTestView::CConnTestView(const TUid aViewId, +// CSettingData* aSettings, +// CCustomPrefsData* aCustomPrefs) +// Constructor +// --------------------------------------------------------- +// +CConnTestView::CConnTestView(const TUid aViewId, CSettingData* aSettings, CCustomPrefsData* aCustomPrefs) + : iViewId(aViewId), iSettingData(aSettings), iCustomPrefsData(aCustomPrefs), iWaiter( NULL ) + { + RDebug::Print(_L("ConnTest: CConnTestView::CConnTestView( aViewId, aSettings, aCustomPrefs )")); + } + +// --------------------------------------------------------- +// CConnTestView::ConstructL() +// EPOC two-phased constructor +// --------------------------------------------------------- +// +void CConnTestView::ConstructL() + { + RDebug::Print(_L("ConnTest: CConnTestView::ConstructL")); + BaseConstructL( R_CONNTEST_VIEW1 ); + iSendData = HBufC8::NewL(KMaxSendBuffer); + RDebug::Print(_L("ConnTest: CConnTestView::ConstructL iWlanMgmtClient")); + TRAPD(err,iWlanMgmtClient = CWlanMgmtClient::NewL()); + if (err == KErrNone) + { + iSupportsWlan = ETrue; + } + else + { + iSupportsWlan = EFalse; + } + } + +// --------------------------------------------------------- +// CConnTestView::~CConnTestView() +// Destructor +// --------------------------------------------------------- +// +CConnTestView::~CConnTestView() + { + RDebug::Print(_L("ConnTest: CConnTestView::~CConnTestView")); + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iSocketsEngine; + delete iContainer; + delete iSettingsListBox; + delete iCustomPrefsListBox; + // delete iSettingData; owned now by CConnTestDocument + if(iSendData) + { + delete iSendData; + iSendData = NULL; + + if ( iSupportsWlan && iWlanMgmtClient ) + { + iWlanMgmtClient->CancelNotifications(); + delete iWlanMgmtClient; + } + } + } + +// --------------------------------------------------------- +// TUid CConnTestView::Id() +// Return id of this view instance +// --------------------------------------------------------- +// +TUid CConnTestView::Id() const + { + //return KViewId; + return iViewId; + } + +// --------------------------------------------------------- +// CConnTestView::HandleCommandL(TInt aCommand) +// Command handler +// --------------------------------------------------------- +// +void CConnTestView::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + case EAknSoftkeyExit: + iSocketsEngine->Cancel(); + AppUi()->HandleCommandL(EEikCmdExit); + break; + + case EAknSoftkeyOk: + case EAknSoftkeyBack: + // Same actions for OK and Back keys. These are called + // from settings or Ext Connection Preferences view. + if (iActiveContainer == ESettingsContainer) + { + // Store settings and update the values + // in socket engine. + iSettingsListBox->StoreSettingsL(); + iSocketsEngine->SetConnectionData(iSettingData); + } + else // ECustomPrefsContainer + { + // Store the custom preferences and update the values + // in socket engine. + iCustomPrefsListBox->StoreSettingsL(); + iSocketsEngine->SetCustomPrefsData(iCustomPrefsData); + } + SwapContainerL(EOutputContainer); + break; + + case EConnTestCmdStartInterface: + // Start the interface + iSocketsEngine->StartInterfaceL(CSocketsEngine::EAskIap); + break; + + case EConnTestCmdStartSnap: + //start connection with snap + iSocketsEngine->StartConnWithSnapL(); + break; + + case EConnTestCmdStartInterfaceExtConnPrefs: + // Start the interface using Extended Connection Preferences + RDebug::Print(_L("ConnTest: Start ExtConnPrefs")); + iSocketsEngine->StartInterfaceL(CSocketsEngine::EExtPrefs); + break; + + case EConnTestCmdStartInternet: + // Start the interface using Extended Connection Preferences + RDebug::Print(_L("ConnTest: Start Internet")); + iSocketsEngine->StartInterfaceL(CSocketsEngine::EExtPrefsInternet); + break; + + case EConnTestCmdStartInterfaceNoPrefs: + // Start the interface + iSocketsEngine->StartInterfaceL(CSocketsEngine::ENoPrefs); + break; + + case EConnTestCmdStartByNetworkId: + // Start the interface with network id + iSocketsEngine->StartInterfaceL(CSocketsEngine::ENetworkId); + break; + + case EConnTestCmdStopInterface: + // Stop the interface with RConnection::Stop + iSocketsEngine->StopInterfaceL(); + break; + + case EConnTestCmdStartForClose: + // Stop the interface with RConnection::Close + iSocketsEngine->StartCloseInterfaceL(); + break; + + case EConnTestCmdCloseInterface: + // Stop the interface with RConnection::Close + iSocketsEngine->CloseInterface(); + break; + + case EConnTestCmdConnectionInfo: + // Print information about the active connections + iSocketsEngine->ConnectionInfoL(); + break; + + case EConnTestCmdInterfaceInfo: + // Print information about interfaces. Show wait note here, + // because this usually takes a while. + { + TInt permanentNoteId; + CAknGlobalNote* globalNote = CAknGlobalNote::NewL(); + CleanupStack::PushL(globalNote); + globalNote->SetSoftkeys(R_AVKON_SOFTKEYS_EMPTY); + permanentNoteId = globalNote->ShowNoteL( EAknGlobalWaitNote, _L("Fetching information...") ); + + iSocketsEngine->InterfaceInfoL(); + + globalNote->CancelNoteL(permanentNoteId); + CleanupStack::PopAndDestroy(globalNote); // globalNote + } + break; + + case EConnTestCmdClearOutputWindow: + // Clear the output window + iContainer->ClearOutputWindow(); + break; + + case EConnTestCmdSettings: + // Display settings list + SwapContainerL(ESettingsContainer); + break; + + case EConnTestCmdSetCustomPrefs: + // Display Custom Preferences list + SwapContainerL(ECustomPrefsContainer); + break; + + case EConnTestCmdMigrate: + iSocketsEngine->Migrate(); + break; + case EConnTestCmdIgnore: + iSocketsEngine->Ignore(); + break; + case EConnTestCmdAccept: + iSocketsEngine->AcceptCarrier(); + break; + case EConnTestCmdReject: + iSocketsEngine->RejectCarrier(); + break; + case EConnTestCmdConnect: + // Connect the socket + iSocketsEngine->ConnectL(); + break; + + case EConnTestCmdDisconnect: + // Disconnect the socket but do not stop the interface + iSocketsEngine->Disconnect(); + break; + + case EConnTestCmdListen: + // Create TCP socket that listens and receives raw TCP data + iSocketsEngine->ListenL(); + break; + + case EConnTestCmdSendHttpGet: + { + // Send HTTP Get + iSocketsEngine->SendHttpRequestOverSocketL(EFalse, EFalse); + } + break; + + case EConnTestCmdSendPerformanceHttpGet: + { + // Send HTTP Get + if (iSocketsEngine->GetSocketEngineState() == CSocketsEngine::EConnected) + { + iSocketsEngine->SendHttpRequestOverSocketL(EFalse, ETrue); + } + } + break; + + case EConnTestCmdSendHttpPost: + { + // Send HTTP Post + iSocketsEngine->SendHttpRequestOverSocketL(ETrue, ETrue); + } + break; + + case EConnTestCmdSendRawData: + // Send datagrams + CreateDataPacket(); + SendDataL(); + break; + + case EConnTestCmdHttpFrameworkGet: + // Send HTTP request (for testing the HTTP framework) + iSocketsEngine->SendHttpFrameworkRequestL(EFalse, EFalse, EFalse); + break; + + case EConnTestCmdHttpFrameworkPost: + // Send HTTP request (for testing the HTTP framework) + iSocketsEngine->SendHttpFrameworkRequestL(ETrue, EFalse, EFalse); + break; + + case EConnTestCmdHttpFrameworkSecureGet: + // Send HTTP request (for testing the HTTP framework) + iSocketsEngine->SendHttpFrameworkRequestL(EFalse, EFalse, ETrue); + break; + + case EConnTestCmdHttpFrameworkPerformanceGet: + // Send HTTP request (for testing the HTTP framework) + iSocketsEngine->SendHttpFrameworkRequestL(EFalse, ETrue, EFalse); + break; + + case EConnTestCmdHttpFrameworkPerformancePost: + // Send HTTP request (for testing the HTTP framework) + iSocketsEngine->SendHttpFrameworkRequestL(ETrue, ETrue, EFalse); + break; + + case EConnTestCmdCancel: + // Cancel ongoing operation + iSocketsEngine->Cancel(); + break; + + case EConnTestCmdConnectionPrefsIap: + // Write IapId value to ConnectionPreferences table + TRAPD(err, Utils::SetConnectionPrefsIapL()); + if(err) + { + if(err == KErrNotFound) + { + iContainer->ErrorNotify(_L("Non-existing id"), err); + } + else + { + iContainer->ErrorNotify(_L("Setting id failed"), err); + } + } + break; + + case EConnTestCmdTimeoutLastSocketActivity: + // Set LastSocketActivity + TRAPD(err2, Utils::SetTimeoutsL(EConnTestCmdTimeoutLastSocketActivity)); + if(err2) + { + iContainer->ErrorNotify(_L("Failed to set timer"), err2); + } + break; + + case EConnTestCmdTimeoutLastSocketClosed: + // Set LastSocketClosed + TRAPD(err3, Utils::SetTimeoutsL(EConnTestCmdTimeoutLastSocketClosed)); + if(err3) + { + iContainer->ErrorNotify(_L("Failed to set timer"), err3); + } + break; + + case EConnTestCmdTimeoutLastSessionClosed: + // Set LastSessionClosed + TRAP(err, Utils::SetTimeoutsL(EConnTestCmdTimeoutLastSessionClosed)); + if(err) + { + iContainer->ErrorNotify(_L("Failed to set timer"), err); + } + break; + + case EConnTestCmdWLANQoSVoice: + iSocketsEngine->SetWLANQoS(7); + break; + + case EConnTestCmdWLANQoSVideo: + iSocketsEngine->SetWLANQoS(5); + break; + + case EConnTestCmdWLANQoSBestEffort: + iSocketsEngine->SetWLANQoS(3); + break; + + case EConnTestCmdWLANQoSBackground: + iSocketsEngine->SetWLANQoS(1); + break; + + case EConnTestCmdWLANQoSNone: + iSocketsEngine->SetWLANQoS(0); + break; + + + // + // WLAN COMMANDS + // + case EConnTestWlanAvailableIaps: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + iWaiter = new (ELeave) CConnTestViewWaiter( iWlanMgmtClient, *this, EConnTestWaitTypeAvailableIaps ); + iWaiter->ConstructL(); + iWaiter->IssueRequest(); + } + break; + + case EConnTestWlanScan: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + iWaiter = new (ELeave) CConnTestViewWaiter( iWlanMgmtClient, *this, EConnTestWaitTypeScan ); + iWaiter->ConstructL(); + iWaiter->IssueRequest(); + } + break; + + case EConnTestWlanGetSsid: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + TWlanSsid ssid; + TInt ret = iWlanMgmtClient->GetConnectionSsid( ssid ); + if( ret ) + { + RDebug::Print( _L( "ConnTest: Error: %d" ), ret ); + break; + } + + RDebug::Print( _L( "ConnTest: SSID = %S" ), &ssid ); + + TBuf8<64> text; + text.Append(_L8("SSID: ")); + text.Append(ssid); + text.Append(_L8("\n")); + iContainer->PrintNotify(text); + } + break; + + case EConnTestWlanGetBssid: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + TWlanBssid bssid; + TInt ret = iWlanMgmtClient->GetConnectionBssid( bssid ); + if( ret ) + { + RDebug::Print( _L( "ConnTest: Error: %d" ), ret ); + break; + } + + RDebug::Print( _L( "ConnTest: BSSID = %S" ), &bssid ); + + TBuf8<64> text; + text.AppendFormat(_L8("BSSID: %02X:%02X:%02X:%02X:%02X:%02X\n"), bssid[0], bssid[1], bssid[2], bssid[3],bssid[4], bssid[5] ); + iContainer->PrintNotify(text); + } + break; + + case EConnTestWlanGetRssi: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + TInt32 rssi32; + TInt ret = iWlanMgmtClient->GetConnectionSignalQuality( rssi32 ); + if( ret ) + { + RDebug::Print( _L( "ConnTest: Error: %d" ), ret ); + break; + } + + RDebug::Print( _L( "ConnTest: RSSI = %d" ), rssi32 ); + + TInt8 rssi8 = static_cast(rssi32); + TBuf8<64> text; + text.AppendFormat(_L8("RSSI: %d\n"), rssi8); + iContainer->PrintNotify(text); + } + break; + + case EConnTestWlanGetConnMode: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + TWlanConnectionMode connMode; + TInt ret = iWlanMgmtClient->GetConnectionMode( connMode ); + if( ret ) + { + RDebug::Print( _L( "ConnTest: Error: %d" ), ret ); + break; + } + + RDebug::Print( _L( "ConnTest: ConnectionMode = %d" ), connMode ); + + TBuf8<64> text; + text.Append(_L8("Mode: ")); + switch( connMode ) + { + case EWlanConnectionModeNotConnected: + text.Append(_L8("Not Connected")); + break; + case EWlanConnectionModeInfrastructure: + text.Append(_L8("Infrastructure")); + break; + case EWlanConnectionModeAdhoc: + text.Append(_L8("Ad hoc")); + break; + case EWlanConnectionModeSecureInfra: + text.Append(_L8("SecureInfra")); + break; + case EWlanConnectionModeSearching: + text.Append(_L8("Searching")); + break; + } + text.Append(_L8("\n")); + iContainer->PrintNotify(text); + } + break; + + case EConnTestWlanGetSecurityMode: + { + if (!iSupportsWlan) { iContainer->PrintNotify(_L("WLAN not supported\n")); break; } + TWlanConnectionSecurityMode securityMode; + TInt ret = iWlanMgmtClient->GetConnectionSecurityMode( securityMode ); + if( ret ) + { + RDebug::Print( _L( "ConnTest: Error: %d" ), ret ); + break; + } + + RDebug::Print( _L( "ConnTest: SecurityMode = %d" ), securityMode ); + + TBuf8<64> text; + text.Append(_L8("Mode: ")); + switch( securityMode ) + { + case EWlanConnectionSecurityOpen: + text.Append(_L8("Open")); + break; + case EWlanConnectionSecurityWep: + text.Append(_L8("WEP")); + break; + case EWlanConnectionSecurity802d1x: + text.Append(_L8("802.1X")); + break; + case EWlanConnectionSecurityWpa: + text.Append(_L8("WPA")); + break; + case EWlanConnectionSecurityWpaPsk: + text.Append(_L8("WPA-PSK")); + break; + } + text.Append(_L8("\n")); + iContainer->PrintNotify(text); + } + break; + + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + +// --------------------------------------------------------- +// CConnTestView::HandleClientRectChange() +// --------------------------------------------------------- +// +void CConnTestView::SizeChanged() + { + if(iContainer) + { + iContainer->SetRect(ClientRect()); + } + if(iSettingsListBox) + { + iSettingsListBox->SetRect(ClientRect()); + } + } + +// --------------------------------------------------------- +// CConnTestView::DoActivateL(...) +// Activation of this view instance. +// --------------------------------------------------------- +// +void CConnTestView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + if(!iContainer) + { + RDebug::Print(_L("ConnTest: CConnTestView::DoActivateL iContainer")); + iContainer = new (ELeave) CConnTestContainer; + iContainer->SetMopParent(this); + iContainer->ConstructL( ClientRect() ); + //AppUi()->AddToStackL( *this, iContainer ); + } + AppUi()->AddToStackL( *this, iContainer ); + + // Connection data for this view + if(!iSettingData) + { + // Note! Document class owns now settings, so that they can + // be stored into file. + //iSettingData = CSettingData::NewL(); owned now by CConnTestDocument + } + + // Create socket engine with initial data + if(!iSocketsEngine) + { + RDebug::Print(_L("ConnTest: CConnTestView::DoActivateL iSocketsEngine")); + iSocketsEngine = CSocketsEngine::NewL(*iContainer); + iSocketsEngine->SetConnectionData(iSettingData); + } + + // Create settings list + if(!iSettingsListBox) + { + RDebug::Print(_L("ConnTest: CConnTestView::DoActivateL iSettingsListBox")); + CreateSettingsListBoxL(R_CONNTEST_SETTING_LIST); + } + + // Create Custom Preferences list + if(!iCustomPrefsListBox) + { + RDebug::Print(_L("ConnTest: CConnTestView::DoActivateL iCustomPrefsListBox")); + CreateCustomPrefsListBoxL(R_CONNTEST_CUSTOM_PREFS_LIST); + } + + iActiveContainer = EOutputContainer; + iContainer->MakeVisible(ETrue); + SizeChanged(); + + if ( iSupportsWlan ) + { + RDebug::Print(_L("ConnTest: CConnTestView::DoActivateL iWlanMgmtClient->ActivateNotificationsL")); + iWlanMgmtClient->ActivateNotificationsL( *this ); + } + } + +// --------------------------------------------------------- +// CConnTestView::DoDeactivate() +// Deactivation of this view instance. Controls are not +// deleted, so that old information in status and output +// windows stays visible. +// --------------------------------------------------------- +// +void CConnTestView::DoDeactivate() + { + if ( iSupportsWlan ) + { + iWlanMgmtClient->CancelNotifications(); + } + + if ( iContainer ) + { + AppUi()->RemoveFromStack( iContainer ); + } + iContainer->MakeVisible(EFalse); + + if (iSettingsListBox) + { + AppUi()->RemoveFromStack(iSettingsListBox); + } + } + + +// ---------------------------------------------------------------------------- +// CConnTestView::SwapContainerL +// Switch the display between main view and settings list. +// ---------------------------------------------------------------------------- +// +void CConnTestView::SwapContainerL(TConnTestContainer aActiveContainer) + { + CAknTitlePane* titlePane = STATIC_CAST( + CAknTitlePane*, + StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + if (iActiveContainer == aActiveContainer) + { + return; + } + + // Remove the old container... + switch (iActiveContainer) + { + case EOutputContainer: + { + iContainer->MakeVisible(EFalse); + AppUi()->RemoveFromStack( iContainer ); + break; + } + case ESettingsContainer: + { + AppUi()->RemoveFromStack(iSettingsListBox); + iSettingsListBox->MakeVisible(EFalse); + break; + } + default: // ECustomPrefsContainer: + { + AppUi()->RemoveFromStack(iCustomPrefsListBox); + iCustomPrefsListBox->MakeVisible(EFalse); + break; + } + } + + // And add the new container + switch (aActiveContainer) + { + case EOutputContainer: + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_EXIT); + AppUi()->AddToStackL( *this, iContainer ); + iContainer->MakeVisible(ETrue); + titlePane->SetTextToDefaultL(); + + Cba()->DrawNow(); + break; + } + case ESettingsContainer: + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OK_BACK); + AppUi()->AddToStackL( *this, iSettingsListBox ); + iSettingsListBox->MakeVisible(ETrue); + titlePane->SetTextL( _L("Settings") ); + break; + } + default: // ECustomPrefsContainer: + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OK_BACK); + AppUi()->AddToStackL( *this, iCustomPrefsListBox ); + iCustomPrefsListBox->MakeVisible(ETrue); + titlePane->SetTextL( _L("Custom Preferences") ); + break; + } + } + + iActiveContainer = aActiveContainer; + } + +// ---------------------------------------------------------------------------- +// CConnTestView::CreateSettingsListBoxL +// Create the setting item list, but don't show it. +// ---------------------------------------------------------------------------- +// +void CConnTestView::CreateSettingsListBoxL(TInt aResourceId) + { + iSettingsListBox = new (ELeave) CSettingItemList; + iSettingsListBox->SetData(iSettingData); + iSettingsListBox->SetMopParent(this); + iSettingsListBox->ConstructFromResourceL(aResourceId); + iSettingsListBox->MakeVisible(EFalse); + iSettingsListBox->SetRect(ClientRect()); + iSettingsListBox->ActivateL(); + } + +// ---------------------------------------------------------------------------- +// CConnTestView::CreateCustomPrefsListBoxL +// Create the Custom Prefs item list, but don't show it. +// ---------------------------------------------------------------------------- +// +void CConnTestView::CreateCustomPrefsListBoxL(TInt aResourceId) + { + iCustomPrefsListBox = new (ELeave) CCustomPrefsItemList; + iCustomPrefsListBox->SetData(iCustomPrefsData); + iCustomPrefsListBox->SetMopParent(this); + iCustomPrefsListBox->ConstructFromResourceL(aResourceId); + iCustomPrefsListBox->MakeVisible(EFalse); + iCustomPrefsListBox->SetRect(ClientRect()); + iCustomPrefsListBox->ActivateL(); + } + + +// ---------------------------------------------------------------------------- +// CConnTestView::CreateDataPacket +// Write data to internal buffer, which is sent to socket. Maximum +// size of the buffer is KSendDataSize bytes. +// ---------------------------------------------------------------------------- +// +void CConnTestView::CreateDataPacket() + { + RDebug::Print(_L("ConnTest: CConnTestView::CreateDataPacket: packet size = %d, SendDataSize = %d"),iSettingData->iPacketSize,KSendDataSize); + RDebug::Print(_L("ConnTest: CConnTestView::CreateDataPacket: buffer maxsize = %d"),iSendData->Des().MaxLength()); + + iSendData->Des().FillZ(); + iSendData->Des().Zero(); + TInt length = iSettingData->iPacketSize; + if(length > iSendData->Des().MaxLength()) + { + TBuf<128> tt; + tt.Format( + _L("There was not enough space in the buffer for the data, so truncating to %d"), + iSendData->Des().MaxLength() + ); + iContainer->PrintNotify(tt); + length = iSendData->Des().MaxLength(); + iSettingData->iPacketSize = length; + } + iSendData->Des().Fill('a', iSettingData->iPacketSize - 1); + iSendData->Des().Append(_L8("\n")); + RDebug::Print(_L("ConnTest: CConnTestView::CreateDataPacket: created size = %d"),iSendData->Length()); + } + + +// ---------------------------------------------------------------------------- +// CConnTestView::SendDataL +// The engine does the real work +// ---------------------------------------------------------------------------- +// +void CConnTestView::SendDataL() + { + iSocketsEngine->SendDataL(*iSendData); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::IsReadyForHTTPGet() +// This function is used to check if a HTTP get can be performed +// on an already existing connection +// ------------------------------------------------------------------------------ +// +TBool CConnTestView::IsReadyForHTTPGet() + { + TBool res = EFalse; + if (iSocketsEngine && iSocketsEngine->GetSocketEngineState() == CSocketsEngine::EConnected ) + { + res = ETrue; + } + return res; + } + +// ------------------------------------------------------------------------------ +// CConnTestView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) +// This function is called by the EIKON framework just before it displays +// a menu pane. Menu is adjusted according to socket engine state. +// ------------------------------------------------------------------------------ +// +void CConnTestView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) + { + RDebug::Print(_L("ConnTest: DynInitMenuPaneL: resourceId=%x"), aResourceId); + + switch(aResourceId) + { + case R_CONNTEST_VIEW1_MENU: + { + CSocketsEngine::TSocketsEngineState state = iSocketsEngine->GetSocketEngineState(); + CSocketsEngine::TRoamingUIState roamingState = iSocketsEngine->GetSocketEngineRoamingState(); + + switch(state) + { + case CSocketsEngine::EInterfaceDown: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, EFalse); + break; + case CSocketsEngine::EStartingInterface: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, ETrue); + break; + case CSocketsEngine::EInterfaceUp: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, EFalse); + break; + case CSocketsEngine::EConnected: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, EFalse); + break; + case CSocketsEngine::EConnecting: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, ETrue); + break; + case CSocketsEngine::EListening: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, ETrue); + break; + case CSocketsEngine::EDisconnecting: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, ETrue); + break; + case CSocketsEngine::ELookingUp: + aMenuPane->SetItemDimmed(EConnTestCmdCancel, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdStartInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStartInternet, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdStopInterface, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdConnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdDisconnect, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdListen, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdSendRawData, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdHttpFrameworkGet, ETrue); + break; + default: + break; + } + switch (roamingState) + { + case CSocketsEngine::EPendingPreferredCarrier: + aMenuPane->SetItemDimmed(EConnTestCmdMigrate, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdIgnore, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdAccept, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdReject, ETrue); + break; + case CSocketsEngine::EPendingNewCarrierActive: + aMenuPane->SetItemDimmed(EConnTestCmdMigrate, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdIgnore, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdAccept, EFalse); + aMenuPane->SetItemDimmed(EConnTestCmdReject, EFalse); + break; + default: + aMenuPane->SetItemDimmed(EConnTestCmdMigrate, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdIgnore, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdAccept, ETrue); + aMenuPane->SetItemDimmed(EConnTestCmdReject, ETrue); + break; + } + } + break; + case R_CONNTEST_SUB_MENU_IPDUMP: + { + + // Additional menupane handling, which doesn't depend on the state of the socket engine + CConnTestAppUi* appui = (CConnTestAppUi *)AppUi(); + if(appui->IsLogging()) + { + aMenuPane->SetItemDimmed(EConnTestCmdStartIpLog, ETrue); + } + else + { + aMenuPane->SetItemDimmed(EConnTestCmdStopIpLog, ETrue); + } + } + break; + + //enable mobility API submenupoints when connection is started with a snap + case R_CONNTEST_SUB_MENU_ADVANCED: + { + + CSocketsEngine::TSocketsEngineStartType connType = iSocketsEngine->GetSocketEngineConnType(); + + + break; + + } + default: + break; + } + } + +// ------------------------------------------------------------------------------ +// CConnTestView::RequestCompleted() +// ------------------------------------------------------------------------------ +// +void CConnTestView::RequestCompleted( TInt aStatus, RArray& aAvailableIaps ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::RequestCompleted(aAvailableIaps)" ) ); + + if ( aStatus != KErrNone ) + { + RDebug::Print( _L( "ConnTest: client->RequestCompleted failed with %d" ), aStatus ); + return; + } + + RDebug::Print( _L( "ConnTest: ivailableIaps.Count() = %u" ), aAvailableIaps.Count() ); + + TBuf<100> msg; + msg.AppendNum( aAvailableIaps.Count() ); + msg.Append( _L( " WLAN IAP(s) found\n\n" ) ); + for ( TUint idx( 0 ); idx < (TUint)aAvailableIaps.Count(); ++idx ) + { + msg.AppendFormat( _L("%02u "), aAvailableIaps[idx] ); + } + msg.Append( _L( "\n" ) ); + iContainer->ErrorNotify( msg, KErrNone ); + + delete iWaiter; + iWaiter = NULL; + } + +// ------------------------------------------------------------------------------ +// CConnTestView::RequestCompleted() +// ------------------------------------------------------------------------------ +// +void CConnTestView::RequestCompleted( TInt aStatus, CWlanScanInfo& aScanInfo ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::RequestCompleted(aScanInfo)" ) ); + + if ( aStatus != KErrNone ) + { + RDebug::Print( _L( "ConnTest: client->RequestCompleted failed with %d" ), aStatus ); + return; + } + + TUint count( 0 ); + + aScanInfo.First(); + while (!aScanInfo.IsDone()) + { + ++count; + aScanInfo.Next(); + } + + TBuf<100> msg; + msg.AppendNum( count ); + msg.Append( _L( " WLAN AP(s) found\n\n" ) ); + iContainer->ErrorNotify( msg, KErrNone ); + + delete iWaiter; + iWaiter = NULL; + } + +// ------------------------------------------------------------------------------ +// CConnTestView::ConnectionStateChanged() +// ------------------------------------------------------------------------------ +// +void CConnTestView::ConnectionStateChanged( TWlanConnectionMode aNewState ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::ConnectionStateChanged" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.Append(_L8("Wlan State: ")); + switch( aNewState ) + { + case EWlanConnectionModeNotConnected: + text.Append(_L8("Not Connected")); + break; + case EWlanConnectionModeInfrastructure: + text.Append(_L8("Infrastructure")); + break; + case EWlanConnectionModeAdhoc: + text.Append(_L8("Ad hoc")); + break; + case EWlanConnectionModeSecureInfra: + text.Append(_L8("SecureInfra")); + break; + case EWlanConnectionModeSearching: + text.Append(_L8("Searching")); + break; + } + text.Append(_L8("\n")); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::BssidChanged() +// ------------------------------------------------------------------------------ +// +void CConnTestView::BssidChanged( TWlanBssid& aNewBSSID ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::BssidChanged" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan BSSID: %02X:%02X:%02X:%02X:%02X:%02X\n"), aNewBSSID[0], aNewBSSID[1], aNewBSSID[2], aNewBSSID[3], aNewBSSID[4], aNewBSSID[5] ); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::BssLost() +// ------------------------------------------------------------------------------ +// +void CConnTestView::BssLost() + { + RDebug::Print( _L( "ConnTest: CConnTestView::BssLost" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: BssLost\n")); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::BssRegained() +// ------------------------------------------------------------------------------ +// +void CConnTestView::BssRegained() + { + RDebug::Print( _L( "ConnTest: CConnTestView::BssRegained" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: BssRegained\n")); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::NewNetworksDetected() +// ------------------------------------------------------------------------------ +// +void CConnTestView::NewNetworksDetected() + { + RDebug::Print( _L( "ConnTest: CConnTestView::NewNetworksDetected" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: NewNetworksDetected\n")); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::OldNetworksLost() +// ------------------------------------------------------------------------------ +// +void CConnTestView::OldNetworksLost() + { + RDebug::Print( _L( "ConnTest: CConnTestView::OldNetworksLost" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: OldNetworksLost\n")); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::TransmitPowerChanged() +// ------------------------------------------------------------------------------ +// +void CConnTestView::TransmitPowerChanged( TUint aPower ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::TransmitPowerChanged" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: TxPower: %d\n"), aPower); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestView::RssChanged() +// ------------------------------------------------------------------------------ +// +void CConnTestView::RssChanged( TWlanRssClass aRssClass, + TUint aRss ) + { + RDebug::Print( _L( "ConnTest: CConnTestView::RssChanged" ) ); + + TBuf8<64> text; + TTime currentTime(0); + currentTime.HomeTime(); + TDateTime time = currentTime.DateTime(); + text.AppendFormat(_L8("%02u:%02u:%02u "), + time.Hour(), time.Minute(), time.Second() ); + text.AppendFormat(_L8("Wlan: RssChanged: %d, %d\n"), aRssClass, aRss); + iContainer->PrintNotify(text); + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::CConnTestViewWaiter() +// ------------------------------------------------------------------------------ +// +CConnTestViewWaiter::CConnTestViewWaiter( CWlanMgmtClient* aWlanMgmtClient, + CConnTestView& aCallback, + TConnTestWaitType aType ) + : CActive( CActive::EPriorityStandard ), + iType( aType ), + iCallback( aCallback ), + iMgmtClient( aWlanMgmtClient ), + iScanInfo( NULL ) + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::CConnTestViewWaiter()" ) ); + CActiveScheduler::Add( this ); + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::ConstructL() +// ------------------------------------------------------------------------------ +// +void CConnTestViewWaiter::ConstructL() + { + iScanInfo = CWlanScanInfo::NewL(); + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::~CConnTestViewWaiter() +// ------------------------------------------------------------------------------ +// +CConnTestViewWaiter::~CConnTestViewWaiter() + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::~CConnTestViewWaiter()" ) ); + Cancel(); + iAvailableIaps.Close(); + delete iScanInfo; + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::RunL() +// ------------------------------------------------------------------------------ +// +void CConnTestViewWaiter::RunL() + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::RunL()" ) ); + + if ( iType == EConnTestWaitTypeAvailableIaps ) + { + iCallback.RequestCompleted( iStatus.Int(), iAvailableIaps ); + } + else // EConnTestWaitTypeScan + { + iCallback.RequestCompleted( iStatus.Int(), *iScanInfo ); + } + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::RunError() +// ------------------------------------------------------------------------------ +// +TInt CConnTestViewWaiter::RunError( TInt /* aError */ ) + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::RunError()" ) ); + return KErrNone; + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::DoCancel() +// ------------------------------------------------------------------------------ +// +void CConnTestViewWaiter::DoCancel() + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::DoCancel()" ) ); + } + +// ------------------------------------------------------------------------------ +// CConnTestViewWaiter::IssueRequest() +// ------------------------------------------------------------------------------ +// +void CConnTestViewWaiter::IssueRequest() + { + RDebug::Print( _L( "ConnTest: CConnTestViewWaiter::IssueRequest()" ) ); + if ( iType == EConnTestWaitTypeAvailableIaps ) + { + iMgmtClient->GetAvailableIaps( iStatus, iAvailableIaps ); + } + else // EConnTestWaitTypeScan + { + iMgmtClient->GetScanResults( iStatus, *iScanInfo ); + } + SetActive(); + } + +// End of File +