diff -r 000000000000 -r 3ce708148e4d pnpmobileservices/pnpms/OnlineSupport/src/CCMAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pnpmobileservices/pnpms/OnlineSupport/src/CCMAppUi.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,2651 @@ +/* +* Copyright (c) 2003-2006 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: This module contains the implementation of CCMAppUi class +* methods +* +*/ + + +// INCLUDE FILES +#include +#include // for RApaLsSession +#include // for CCommsDatabase +#include // for CCommsDbConnectionPrefTableView +#include // for CAknGlobalNote +#include // for CAknGlobalConfirmationQuery +#include +#include +#include +#include +#include +#include // has to be system include. +#include // link against centralrepository.lib +#include // for KCRUidBrowser +#include // for KCRUidCoreApplicationUIs +//#include // BrowserUiSDKCRKeys.h file can replace this header file +#include // for the profile strings + +#include "OnlineSupportLogger.h" +#include "CCMAppUi.h" +#include "CCMRegistrationMonitor.h" +#include "CCMSocketsEngine.h" +#include "OnlineSupport.hrh" +#include "PnpUtilImpl.h" +#include "CCMDocument.h" +#include "MiniBrowser.h" +#include "DeviceParameterDefs.h" +#include "VersionStrings.h" +#include "OnlineSupportPrivateCRKeys.h" // Own central repository keys +#include +#include +#include + +// EXTERNAL DATA STRUCTURES +// None + +// EXTERNAL FUNCTION PROTOTYPES +// None + +// CONSTANTS + +// UID of the application +const TUid KUidConfigurationManager = { 0x10204338 }; +// TimeoutValue for the RegistrationMonitor, +// Registration monitor itself has a time-out of 15 seconds +const TInt KMonitoringTimeOut = 20000000; +// TimeoutValue for the ConnectionTest +const TInt KConnectionTimeOut = 35000000; +// Timeout after the startupOperation will continue after ConstructL() +const TInt KStartUpTimeOut = 20; + +// 0.1s Timeout for closing the app after the user has selected "Cancel" to +// ConfirmationDialogL or to iWaitDialog. +// See comments on TApplicationStatus (CCMAppUi.h) +const TInt KExitTimeOut = 100000; + +_LIT( KInitAccess, "initAccess" ); + +_LIT( KSlash,"/"); + +// Help portal +_LIT(KHelpPortal,".help-portal.com"); + +// Nokia +_LIT( KServerNokia,"nokia" ); +_LIT( KNokia,"pnpms.nokia.com"); + +// HTTP +_LIT(KHttp, "http://"); + +// Default server string +_LIT(KDefaultServerString,"www"); + +// Default page string +_LIT(KDefaultPageString,"page1"); + +_LIT( KMNC0, "mnc0" ); +_LIT( KMCC, "mcc" ); +_LIT( KGprs, "gprs" ); +_LIT( KDot, "." ); + +const TInt KMaxAPNLength = 256; + +_LIT( KDefaultRoamingName, "PNP Default Roaming" ); + +_LIT( KInitAccessRoamingName, "PNP InitAccess Roaming" ); + +const TInt KMaxSilentModeRedirectCount(3); + + +// MACROS +// None + +// LOCAL CONSTANTS AND MACROS +// None + +// MODULE DATA STRUCTURES +// None + +// LOCAL FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +// None + +// ============================= LOCAL FUNCTIONS =============================== +// None + + +// ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CCMAppUI::CCMAppUi +// ----------------------------------------------------------------------------- +// +CCMAppUi::CCMAppUi(): + iAccessPoint(0), + iAutoStart( EFalse), + iTokenOverride( EFalse ), + iStartingBrowser( EFalse ), + iRedirectsLeft( KMaxSilentModeRedirectCount ), + iInitAccessOn(KErrNone) + { + } + +// ----------------------------------------------------------------------------- +// CCMAppUi::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ConstructL() + { + LOGSTRING( "Enter to CCMAppUi::ConstrtuctL" ); + // Send to background + BaseConstructL(ENoScreenFurniture); + TApaTaskList taskList( CEikonEnv::Static()->WsSession() ); + TApaTask task = taskList.FindApp( KUidConfigurationManager ); + task.SendToBackground(); + + HideApplicationFromFSW(); + + iPreferencesChanged = EFalse; + iFirstStartInHomeNetwork = EFalse; + iNetworkStatusOk = EFalse; + iNetworkStatus = CCMRegistrationMonitor::EStatusUnknown; + iApplicationStatus = EAppStatusInactive; + iInitAccessPointUsed = EFalse; + + iWaitDialogProgressVal = 1; + + LOGSTRING( "BaseConstructOk" ); + + //this->StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT); + this->StatusPane()->MakeVisible( EFalse ); + + CEikonEnv::Static()->AddForegroundObserverL( *this ); + + TRAPD( err, iRepository = CRepository::NewL( KCRUidConfigurationManager ) ); + if( err != KErrNone ) + { + LOGSTRING2( "Central repository init: %i", err ); + User::Leave( err ); + } + err = GetIntValue(KOnlineSupportInitAccessOn,iInitAccessOn); + if( KErrNone == err && iInitAccessOn == KErrNone) + {//Fetaure off + iConnectingVia = EConnectingViaInit; + } + else //feature off or Issue in reading cenrep key + { + iConnectingVia = EConnectingViaNull; + } + // The default values; these might change later in ProcessCommandParametersL + SetServerString( KDefaultServerString ); + SetPageString( KDefaultPageString ); + SetConnectReason( EConnectReasonUnknown ); + + FetchProductModelAndSwVersionL(); + + iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + iEngine = CCMSocketsEngine::NewL( *this ); + iRegistrationMonitor = CCMRegistrationMonitor::NewL( *this ); + iApplicationStatus = EAppStatusStartingUp; + LOGSTRING( "Exit from ConstructL()" ); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::IsNetworkConnectionsAllowedL +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::IsNetworkConnectionsAllowedL() + { + LOGSTRING( "Enter to CCMAppUi::IsNetworkConnectionsAllowedL()" ); + TBool networkConnectionsAllowed( EFalse ); + TInt allowed(0); + CRepository* coreAppUisCr = CRepository::NewLC( KCRUidCoreApplicationUIs ); + User::LeaveIfError( coreAppUisCr->Get( KCoreAppUIsNetworkConnectionAllowed, allowed ) ); + CleanupStack::PopAndDestroy( coreAppUisCr ); + if( allowed == ECoreAppUIsNetworkConnectionAllowed ) + { + LOGSTRING( "ConnectionAllowed" ); + networkConnectionsAllowed = ETrue; + } + else + { + // display dialog that operation that possible in offline mode + HBufC* string = StringLoader::LoadLC( R_OFFLINE_MODE ); + CAknGlobalNote* globalNote = CAknGlobalNote::NewL(); + CleanupStack::PushL( globalNote ); + globalNote->ShowNoteL( EAknGlobalErrorNote , *string ); + CleanupStack::PopAndDestroy(2 ); + } + + LOGSTRING( "Exit from CCMAppUi::IsNetworkConnectionsAllowedL()" ); + return networkConnectionsAllowed; + } + +// Destructor +// ----------------------------------------------------------------------------- +// CCMAppUI::~CCMAppUi +// ----------------------------------------------------------------------------- +// +CCMAppUi::~CCMAppUi() + { + LOGSTRING( "Enter ~CCMAppUI" ); + + CEikonEnv::Static()->RemoveForegroundObserver( *this ); + + if (iTimer) + { + iTimer->Cancel(); + } + delete iTimer; + LOGSTRING( "Timer deleted" ); + + if (iRegistrationMonitor) + { + iRegistrationMonitor->StopMonitoring(); + } + delete iRegistrationMonitor; + LOGSTRING( "Monitor deleted" ); + + delete iRepository; + + delete iMiniBrowser; + // Must be deleted after iMiniBrowser since iMiniBrowser uses RSocketServ and + // RConnection instances of iEngine + delete iEngine; + + if (iCommonDialogMonitor) + { + iCommonDialogMonitor->Cancel(); + delete iCommonDialogMonitor; + } + if (iGlobalConfirmationQuery) + { + delete iGlobalConfirmationQuery; + } + if( iGlobalWaitNote ) + { + //iGlobalWaitNote->CancelNoteL(iWaitNoteId); + delete iGlobalWaitNote; + } + + LOGSTRING( "Exit ~CCMAppUI" ); + } + + + +// ----------------------------------------------------------------------------- +// CCMAppUI::ConfirmationDialogL +// Activates Confirmation dialog +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ConfirmationDialogL() + { + LOGSTRING("CCMAppUi::ConfirmationDialogL"); + if( !iAutoStart ) + { + HBufC* msgText = CEikonEnv::Static()->AllocReadResourceLC( + R_CONFMANAGER_CONFIRMATION ); + + if (iCommonDialogMonitor) + { + iCommonDialogMonitor->Cancel(); + delete iCommonDialogMonitor; + iCommonDialogMonitor = NULL; + } + // instantiate the active object CGlobalConfirmationObserver + iCommonDialogMonitor = CCMDialogMonitor::NewL( *this ); + iCommonDialogMonitor->SetDialogMode( CCMDialogMonitor::EConfirmation ); + // SetActive + iCommonDialogMonitor->Start(); + // iGlobalConfirmationQuery is an instance of the global + // confirmation query class CAknGlobalConfirmationQuery. + // show the global confirmation query, set the iStatus variable + // of the active object as a parameter. + if (!iGlobalConfirmationQuery) + { + iGlobalConfirmationQuery = CAknGlobalConfirmationQuery::NewL(); + } + + iGlobalConfirmationQuery->ShowConfirmationQueryL( + iCommonDialogMonitor->iStatus, + *msgText, + R_AVKON_SOFTKEYS_YES_NO__YES, + R_QGN_NOTE_QUERY_ANIM); + + CleanupStack::PopAndDestroy( msgText ); + } + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::ErrorNoteConnectionL() +// Activates error note. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ErrorNoteConnectionL() + { + LOGSTRING( "CCMAppUi::ErrorNoteConnectionL" ); + if( !iAutoStart ) + { + HBufC* msgText = CEikonEnv::Static()-> + AllocReadResourceLC( R_CONFMANAGER_ERRORNOTE ); + + CAknGlobalNote* globalNote = CAknGlobalNote::NewL(); + CleanupStack::PushL( globalNote ); + globalNote->ShowNoteL( EAknGlobalErrorNote , *msgText ); + CleanupStack::PopAndDestroy( 2 ); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::ErrorNoteUnknownL +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ErrorNoteUnknownL( TInt aError ) + { + LOGSTRING2( "CCMAppUi::ErrorNoteUnknownL %i", aError ); + if( !iAutoStart ) + { + CTextResolver* textResolver = CTextResolver::NewLC(); + TPtrC errMsg = textResolver->ResolveErrorString( aError ); + HBufC* errMsgBuf = HBufC::NewLC( errMsg.Length() ); + errMsgBuf->Des().Append( errMsg ); + + CAknGlobalNote* globalNote = CAknGlobalNote::NewL(); + CleanupStack::PushL( globalNote ); + globalNote->ShowNoteL( EAknGlobalErrorNote , *errMsgBuf ); + + CleanupStack::PopAndDestroy( globalNote ); + CleanupStack::PopAndDestroy( errMsgBuf ); + CleanupStack::PopAndDestroy( textResolver ); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::ProcessCommandParametersL +// 2 params +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::ProcessCommandParametersL( TApaCommand /*aCommand*/, TFileName& /*aDocumentName*/ ) + { + LOGSTRING( "CCMAppUi::ProcessCommandParametersL 2 params" ); + return( ETrue ); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::ProcessCommandParametersL +// 3 params +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::ProcessCommandParametersL( TApaCommand /*aCommand*/, TFileName& /*aDocumentName*/, const TDesC8& aTail ) + { + LOGSTRING( "CCMAppUi::ProcessCommandParametersL 3 params" ); + LOGSTRING( "aTail:" ); + LOGTEXT( aTail ); + if( !IsNetworkConnectionsAllowedL() ) + { + // network connections not allowed + LOGSTRING( "Network connections not allowed" ); + //DelayedExit(); + Exit(); + return ETrue; + } + + if( aTail.Length() == 0 ) + { + LOGSTRING( "no params" ) + } + else + { + // aTail is in 8-bit format, cast + // (The format was changed from 16-bit to 8-bit because of 3.0 porting; + // there is not CApaCommandLine::SetFullCommandLine in 3.0, SetTailEndL + // is used instead and it uses 8-bit format) + HBufC* paramsBuf = HBufC::NewLC( aTail.Length() ); + TPtr paramsBufPtr = paramsBuf->Des(); + paramsBufPtr.Copy( aTail ); + TLex lexx( *paramsBuf ); + TChar getchar; + + for( ;; ) + { + lexx.SkipSpace(); + lexx.Mark(); + TPtrC token = lexx.NextToken(); + + if( token.Length() == 0 ) + { + LOGSTRING( "token length == 0"); + break; + } + else if( token.Length() == 1 ) + { + LOGSTRING( "token length == 1"); + break; + } + + // s"www" + // 012345 + + if( token[1] == '\"' && token[token.Length()-1] != '\"' ) + { + do + { + getchar = lexx.Get(); + } while( (getchar != '\"') && (getchar != 0) ); + token.Set( lexx.MarkedToken() ); + } + + LOGSTRING( "token:" ); + LOGTEXT( token ); + + TChar param = token[0]; + TPtrC paramVal; + if( token[1] == '\"' ) + { + if( token[2] == '\"' ) + { + // just quotes, e.g. q"" + } + else + { + paramVal.Set( token.Mid(2,token.Length()-3) ); + } + } + else + { + paramVal.Set( token.Mid(1) ); + } + + LOGSTRING( "paramVal:" ); + LOGTEXT( paramVal ); + + switch( param ) + { + case 's': + { + LOGSTRING( "setting server to:" ); + LOGTEXT( paramVal ); + SetServerString( paramVal ); + break; + } + case 'p': + { + LOGSTRING( "setting page to:" ); + LOGTEXT( paramVal ); + SetPageString( paramVal ); + break; + } + case 'r': + { + TLex lexx2( paramVal ); + TInt reason = 0; + lexx2.Val(reason); + // Store connect reason + switch(reason) + { + case 0: + SetConnectReason(CCMAppUi::EConnectReasonUnknown); + LOGSTRING( "Unknown connection reason" ); + break; + case 1: + SetConnectReason(CCMAppUi::EConnectReasonFirstBoot); + LOGSTRING( "Connection reason first boot" ); + break; + case 2: + SetConnectReason(CCMAppUi::EConnectReasonNewSim); + LOGSTRING( "Connection reason new sim" ); + break; + case 3: + SetConnectReason(CCMAppUi::EConnectReasonUserTriggered); + LOGSTRING( "Connection reason user triggered" ); + break; + case 4: + SetConnectReason(CCMAppUi::EConnectReasonApplicationTriggered); + LOGSTRING( "Connection reason application triggered" ); + break; + case 5: + SetConnectReason(CCMAppUi::EConnectReasonRemoteTriggered); + LOGSTRING( "Connection reason remote triggered" ); + break; + default: + LOGSTRING( "Invalid connect reason parameter" ); + break; + } + break; + } + case 'q': + { + LOGSTRING( "setting query string to:" ); + LOGTEXT( paramVal ); + SetQueryString( paramVal ); + break; + } + case 'a': + { + LOGSTRING( "setting autostart to:" ); + TLex lexx2( paramVal ); + TInt autostart = 0; // Default is "off" + TInt hiddenEnabled(0); + TInt err(KErrNone); + lexx2.Val( autostart ); + LOGTEXT( paramVal ); + switch( autostart ) + { + case 0: + iAutoStart = EFalse; + break; + case 1: + // check that autostart mode is allowed + err = GetIntValue( KOnlineSupportHiddenEnabled, hiddenEnabled ); + if (err != KErrNone) + { + LOGSTRING2( "GetIntValue(KOnlineSupportHiddenEnabled) errorcode %i", err ); + } + + if(hiddenEnabled == 1) + { + iAutoStart = ETrue; + } + else + { + LOGSTRING( "Autostart not allowed" ); + iAutoStart = EFalse; + } + break; + default: + iAutoStart = EFalse; + break; + } + break; + } + case 't': + { + LOGSTRING( "setting TOKEN override to:" ); + TLex lexx2( paramVal ); + TInt tokenOverride = 0; // Default is "off" + lexx2.Val( tokenOverride ); + LOGTEXT( paramVal ); + switch( tokenOverride ) + { + case 0: + iTokenOverride = EFalse; + break; + case 1: + iTokenOverride = ETrue; + break; + default: + iTokenOverride = EFalse; + break; + } + break; + } + default: + { + LOGSTRING( "commandline parse error, unrecognized param indentifier" ); + break; + } + } + lexx.SkipCharacters(); + + } + LOGSTRING( "cmdline parsing done" ); + + CleanupStack::PopAndDestroy( paramsBuf ); + } // else + + + if( iAutoStart ) + { + // do not show confirmation dialog, but call "ok"-button handler + CommonDialogDismissedL(CCMDialogMonitor::EConfirmation, EAknSoftkeyYes); + } + else + { + // show confirmation dialog to user, after user has accepted or cancelled + // CommonDialogDismissedL -function is called + ConfirmationDialogL(); + + } + + + //StartTimeOut( KStartUpTimeOut ); + + //TRAP_IGNORE( WaitDialogL( iWaitDialogProgressVal ) ); + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::DelayedExit +// ----------------------------------------------------------------------------- +// +void CCMAppUi::DelayedExit() + { + LOGSTRING("CCMAppUi::DelayedExit - begin"); + StartTimeOut( KExitTimeOut ); + iApplicationStatus = EAppStatusClosing; + + // In case doing a delayed exit, iWaitDialog has not been deleted yet + // (except if delayed exit is being done via iWaitDialog "Cancel" selection + // -> see DialogDismissedL) + /*if( iWaitDialog && !iWaitDialogProcessFinished ) + { + LOGSTRING( "iWaitDialog->ProcessFinishedL" ); + iWaitDialogProcessFinished = ETrue; + TRAP_IGNORE( iWaitDialog->ProcessFinishedL() ); + LOGSTRING( "iWaitDialog->ProcessFinishedL - done" ); + }*/ + + LOGSTRING("DelayedExit - done"); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::TimeOutCallBack +// ----------------------------------------------------------------------------- +// +TInt CCMAppUi::TimeOutCallBack( TAny* aCCMAppUi ) + { + TRAPD( err, ( ( CCMAppUi* )aCCMAppUi )->DoTimeOutCallBackL() ); + // DoTimeOutCallBackL might have called Exit() + if( err == KLeaveExit ) + { + User::Leave( KLeaveExit ); + } + return err; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::DoTimeOutCallBackL +// ----------------------------------------------------------------------------- +// +void CCMAppUi::DoTimeOutCallBackL() + { + LOGSTRING( "CCMAppUi::DoTimeOutCallBackL()" ); + LOGSTRING2( "application status %i", iApplicationStatus ) + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + + switch( iApplicationStatus ) + { + case EAppStatusMonitoring: + LOGSTRING("CCMAppUi calls StopMonitoring "); + iRegistrationMonitor->StopMonitoring(); + iApplicationStatus = EAppStatusInactive; + //ErrorNoteNetworkL(); + ErrorNoteConnectionL(); + //DelayedExit(); + Exit(); + break; + case EAppStatusConnecting: + LOGSTRING("CCMAppUi calls disconnect"); + iEngine->Disconnect(); + iApplicationStatus = EAppStatusInactive; + ConnectionResultL( KErrTimedOut ); + break; + case EAppStatusWaitingDisconnect: + LOGSTRING("Connection will be disconnected"); + iEngine->Disconnect(); + iApplicationStatus = EAppStatusInactive; + break; + case EAppStatusStartingUp: + LOGSTRING("Starting up"); + StartUpOperationL(); + break; + case EAppStatusClosing: + LOGSTRING("EAppStatusClosing"); + LOGSTRING("Restore settings"); + // Exit immediately, a call to DelayedExit has been made + // (and the exit timeout has already been passed) + Exit(); // Leaves with KLeaveExit + break; + default: + LOGSTRING("Restore settings"); + //DelayedExit(); + Exit(); + break; + }; + + LOGSTRING( "DoTimeOutCallBack - done" ); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::InitiateNextConnectionTestL() +// ----------------------------------------------------------------------------- +// +void CCMAppUi::InitiateNextConnectionTestL() + { + LOGSTRING( "CCMAppUi::InitiateNextConnectionTestL" ); + TInt err( KErrNone ); + + if( iNetworkStatus != CCMRegistrationMonitor::EHomenetwork && + iNetworkStatus != CCMRegistrationMonitor::ERoaming ) + { + LOGSTRING( "InitiateNextConnectionTestL, network NOT ok" ); + if( iGlobalWaitNote ) + { + iGlobalWaitNote->CancelNoteL(iWaitNoteId); + delete iGlobalWaitNote; + iGlobalWaitNote = NULL; + } + /*if( iWaitDialog && !iWaitDialogProcessFinished ) + { + LOGSTRING("iWaitDialog->ProcessFinishedL()"); + iWaitDialogProcessFinished = ETrue; + iWaitDialog->ProcessFinishedL(); + }*/ + if( iConnectReason == CCMAppUi::EConnectReasonFirstBoot ) + { + LOGSTRING( "...startupstart" ); + //Roaming information to confmanager's ini file + if ( iNetworkStatusOk == EFalse ) + { + StoreIntValue( KOnlineSupportRoaming, EFalse ); + } + Exit(); + //DelayedExit(); + return; + } + else // menu start, show error note + { + LOGSTRING( "ErrorNoteConnectionL" ); + //ErrorNoteNetworkL(); + ErrorNoteConnectionL(); + Exit(); + //DelayedExit(); + return; + } + } + if( iConnectingVia == EConnectingViaNull && iInitAccessOn ) + { + iConnectingVia = EConnectingViaInit; + if( TryInitAccessL() ) + { + return; + } + } + if( iConnectingVia == EConnectingViaInit ) + { + iConnectingVia = EConnectingViaDefault; + __UHEAP_MARK; + TBool value( EFalse ); + TRAP( err, value = TryDefaultAccessL() ); + __UHEAP_MARKEND; + if( value ) + { + return; + } + } + if( iConnectingVia == EConnectingViaDefault ) + { + iConnectingVia = EConnectingViaUser; + TBool value( EFalse ); + TRAP( err, value = TryUserAccessL() ); + if( value ) + { + LOGSTRING( "User access test initiated" ); + return; + } + else + { + LOGSTRING2( "TryUserAccessL err: %i", err ); + LOGSTRING( "ErrorNoteConnectionL" ) + ErrorNoteConnectionL(); + LOGSTRING( "Exit" ) + //DelayedExit(); + Exit(); + } + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::TryInitAccessL() +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::TryInitAccessL() + { + LOGSTRING( "CCMAppUi::TryInitAccessL()" ); + if( iInitAccessOn ) + { + TUint32 ap = InitAccessPointL(); + iInitAccessPointUsed = ETrue; + + if ( ap != 0 ) + { + TBuf<255> domain; + AppendDomainL( domain ); + LOGSTRING( "Starting Init access test" ); + iEngine->ConnectL( ap, domain ); + + StartTimeOut( KConnectionTimeOut ); + iApplicationStatus = EAppStatusConnecting; + return( ETrue ); + } + + LOGSTRING( "Init access failed in db" ); + return( EFalse ); + } + else + { + LOGSTRING( "CCMAppUi::TryInitAccessL() InitAccess feature off " ); + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::StartTimeOut +// ----------------------------------------------------------------------------- +// +void CCMAppUi::StartTimeOut( const TInt aTimeOut ) + { + LOGSTRING2( "CCMAppUi::StartTimeOut: %i", aTimeOut ); + // EAppStatusClosing means we are already waiting for the timer to + // trigger application exit, no need for a new time-out in that case + if( iApplicationStatus != EAppStatusClosing ) + { + TCallBack callBack( TimeOutCallBack, this ); + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + iTimer->Start( aTimeOut, aTimeOut, callBack ); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::TryDefaultAccessL() +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::TryDefaultAccessL() + { + LOGSTRING( "CCMAppUi::TryDefaultAccessL" ); + TUint32 ap = CheckDefaultAccessPointL(); + iInitAccessPointUsed = EFalse; + + if ( ap != 0 ) + { + TBuf<255> domain; + AppendDomainL( domain ); + LOGSTRING( "Starting default access test" ); + iEngine->ConnectL( ap, domain ); + + StartTimeOut( KConnectionTimeOut ); + iApplicationStatus = EAppStatusConnecting; + return( ETrue ); + } + + LOGSTRING( "Default access failed in db" ); + return( EFalse ); + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::TryUserAccessL() +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::TryUserAccessL() + { + LOGSTRING( "CCMAppUi::TryUserAccessL" ); + TInt accessPoints = CheckSettingsL(); + iInitAccessPointUsed = EFalse; + + // initAccess and browser default is tested, if more ap then ask from user + if ( !iAutoStart ) + { + if( (iInitAccessOn && accessPoints > 2) || !iInitAccessOn) + { + LOGSTRING( "Starting user access test" ); + + TBuf<255> domain; + AppendDomainL( domain ); + iEngine->ConnectL( 0, domain ); + + StartTimeOut( KConnectionTimeOut ); + iApplicationStatus = EAppStatusConnecting; + + return( ETrue ); + } + } + + LOGSTRING( "User access test not started" ); + return( EFalse ); + } + +/// ----------------------------------------------------------------------------- +// CCMAppUI::CheckSettingsL +// Cheks if there is wap setting available. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCMAppUi::CheckSettingsL() + { + CCommsDatabase* theDb; + CCommsDbTableView* theView; + TInt settings( 0 ); + TInt errorCode( KErrNone ); + theDb = CCommsDatabase::NewL( ); + CleanupStack::PushL( theDb ); + theView = theDb->OpenTableLC( TPtrC( IAP ) ); + errorCode = theView->GotoFirstRecord(); + if ( errorCode != KErrNotFound ) + { + settings = 1; + while ( errorCode != KErrNotFound ) + { + errorCode = theView->GotoNextRecord(); + if ( errorCode == KErrNone ) + { + settings++; + } + } + } + CleanupStack::PopAndDestroy( 2 ); + return settings; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::AppendDomainL +// ----------------------------------------------------------------------------- +// +void CCMAppUi::AppendDomainL( TDes& aUrl ) + { + if( iServer.Compare( KServerNokia ) == 0 ) + { + if( aUrl.MaxLength() < aUrl.Length() + KNokia().Length() ) + { + User::Leave( KErrArgument ); + } + aUrl.Append( KNokia ); + } + else + { + if( aUrl.MaxLength() < aUrl.Length() + iServer.Length() + KHelpPortal().Length() ) + { + User::Leave( KErrArgument ); + } + aUrl.Append( iServer ); + aUrl.Append( KHelpPortal ); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::OpenWapBrowserL +// Opens WAP browser +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::OpenWapBrowserL() + { + LOGSTRING( "Enter to CCMAppUi::OpenWapBrowserL" ); + iWapPage.Zero(); + + DeleteServiceActivationInfoL(); + + CPnpUtilImpl* pnpUtil = CPnpUtilImpl::NewLC(); + + LOGSTRING( "OpenWapBrowserL 2" ); + + if( !iAutoStart ) + { + // Help portal address and type + // 4 means Url address. (see Browser API documentation) + _LIT ( KAddressType, "4 " ); + iWapPage.Copy( KAddressType ); + } + + LOGSTRING( "OpenWapBrowserL 3" ); + + iWapPage.Append( KHttp ); + AppendDomainL( iWapPage ); + iWapPage.Append( KSlash ); + + LOGSTRING( "OpenWapBrowserL 4" ); + iWapPage.Append( iPage ); + iWapPage.Append( KQuestionMark ); + +#ifdef __WINS__ + RMobilePhone::TMobilePhoneNetworkInfoV1 homeNetworkInfo; + homeNetworkInfo.iCountryCode.Copy( _L("244") ); + homeNetworkInfo.iNetworkId.Copy( _L("05") ); +#else + const RMobilePhone::TMobilePhoneNetworkInfoV1& homeNetworkInfo = iRegistrationMonitor->GetHomeNetworkInfo(); +#endif + // Home MCC + //iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KSimMccParameter ); + iWapPage.Append( homeNetworkInfo.iCountryCode ); + pnpUtil->SetHomeMccL( homeNetworkInfo.iCountryCode ); + + LOGSTRING( "OpenWapBrowserL 5" ); + // Home MNC + RMobilePhone::TMobilePhoneNetworkIdentity formattedMnc; + pnpUtil->FormatMncCodeL( homeNetworkInfo.iCountryCode, homeNetworkInfo.iNetworkId, formattedMnc ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KSimMncParameter ); + iWapPage.Append( formattedMnc ); + pnpUtil->SetHomeMncL( formattedMnc ); + + LOGSTRING( "OpenWapBrowserL 6" ); +#ifdef __WINS__ + RMobilePhone::TMobilePhoneNetworkInfoV1 currentNetworkInfo; + currentNetworkInfo.iCountryCode.Copy( _L("244") ); + currentNetworkInfo.iNetworkId.Copy( _L("05") ); +#else + const RMobilePhone::TMobilePhoneNetworkInfoV1& currentNetworkInfo = iRegistrationMonitor->GetCurrentNetworkInfo(); +#endif + // current MCC + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KCurrentMccParameter ); + iWapPage.Append( currentNetworkInfo.iCountryCode ); + pnpUtil->SetNetworkMccL( currentNetworkInfo.iCountryCode ); + + LOGSTRING( "OpenWapBrowserL 7" ); + // current MNC + TRAPD( err, pnpUtil->FormatMncCodeL( currentNetworkInfo.iCountryCode, currentNetworkInfo.iNetworkId, formattedMnc ) ); + if( err != KErrNone ) + { + LOGSTRING2( "FormatMncCodeL err: %i", err ); + pnpUtil->SetNetworkMncL( currentNetworkInfo.iNetworkId ); + } + else + { + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KCurrentMncParameter ); + iWapPage.Append( formattedMnc ); + pnpUtil->SetNetworkMncL( formattedMnc ); + } + + LOGSTRING( "OpenWapBrowserL 8" ); + //pnpUtil->StoreAccessPoint( iAccessPoint ); // not needed anymore + + // Init AP, use token + LOGSTRING( "iServer:" ); + LOGTEXT( iServer ); + + // AppendTokenAndNonceVal + AppendTokenAndNonceValL(); + + // Connection reason + LOGSTRING( "connection reason" ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KConnectReasonParameter ); + if( iConnectReason == EConnectReasonUnknown ) + { + iWapPage.AppendNum( (TInt)EConnectReasonUserTriggered ); + } + else + { + iWapPage.AppendNum( (TInt)iConnectReason ); + } + + // PnpVersion + TBuf pnpversion; + User::LeaveIfError( pnpUtil->Version( pnpversion ) ); + LOGSTRING( "PnPVersion" ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KPnpVersionParameter ); + iWapPage.Append( pnpversion ); + LOGSTRING( "PopAndDestroy pnpUtil" ) + CleanupStack::PopAndDestroy( pnpUtil ); + + // help query string + if( iQuery.Length() > 0 ) + { + LOGSTRING( "query" ); + HBufC16* param = EscapeUtils::EscapeEncodeL(iQuery,EscapeUtils::EEscapeUrlEncoded); + if(param) + { + LOGSTRING( "converted:" ); + LOGTEXT( *param ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KQueryParameter ); + iWapPage.Append( *param ); + delete param; + } + + } + + + + // Append Device Information to URL + + AppendDeviceInfoL(); + + + // Operator name, service provider + const RMobilePhone::TMobilePhoneServiceProviderNameV2& serviceProviderName = iRegistrationMonitor->GetServiceProviderName(); + if( serviceProviderName.iSPName.Length() > 0 ) + { + LOGSTRING( "spname" ); + HBufC16* param = EscapeUtils::EscapeEncodeL( serviceProviderName.iSPName, EscapeUtils::EEscapeUrlEncoded ); + if(param) + { + LOGSTRING( "converted:" ); + LOGTEXT( *param ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KOperatorNameParameter ); + iWapPage.Append( *param ); + delete param; + } + } + LOGTEXT( currentNetworkInfo.iShortName ); + LOGTEXT( currentNetworkInfo.iLongName ); + + // Current operator name + if( currentNetworkInfo.iLongName.Length() > 0 ) + { + LOGSTRING( "current operator name" ); + HBufC16* param = EscapeUtils::EscapeEncodeL( currentNetworkInfo.iLongName, EscapeUtils::EEscapeUrlEncoded ); + if(param) + { + LOGSTRING( "converted:" ); + LOGTEXT( *param ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KCurrentOperatorNameParameter ); + iWapPage.Append( *param ); + delete param; + } + } + + //Append WebUtils Params to URL + AppendWebUtilParamsL(); + + + + // MSISDN + const RMobileONStore::TMobileONEntryV1& ownNumberInfo = iRegistrationMonitor->GetOwnNumberInfo(); + if( ownNumberInfo.iNumber.iTelNumber.Length() ) + { + LOGSTRING( "ownNumberInfo.iNumber.iTelNumber" ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KMSISDNParameter ); + iWapPage.Append( ownNumberInfo.iNumber.iTelNumber ); + } + + // Phone alias + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KPhoneAlias ); + iWapPage.Append( KPhoneAliasValue ); + + //Create online help based on Interactive or NonInteractive feature + OnlineHelpL(); + + LOGSTRING( "Exit from OpenWapBrowser" ); + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::DeleteServiceActivationInfoL +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::DeleteServiceActivationInfoL() +{ + + // Reset values for service activation. Service activation should not be supported + // by online support since WDS Global server URL is hardcoded (help-portal server + // connecting to WDS) if service activation required for onlinesupport comment below + // statements for PnpProvUtil. + + CPnpProvUtil* prov = CPnpProvUtil::NewLC(); + + const TUint32 uidval = 0; + prov->SetApplicationUidL(uidval); + + + TBuf<2> buf(_L("")); + prov->SetProvAdapterAppIdL(buf); + + CleanupStack::PopAndDestroy(); + +} + + +// ----------------------------------------------------------------------------- +// CCMAppUI::AppendTokenAndNonceValL +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::AppendTokenAndNonceValL() +{ + + + CPnpUtilImpl *pnpUtil = CPnpUtilImpl::NewLC(); + + + // TOKEN has to be sent: + // - When connecting through "initAccess" to www.help-portal.com/page1 + // - When connecting through the fallback APN to *.help-portal.com EXCEPT to www.help-portal.com + // -- This feature is needed for testing of provisioning over HTTP + // TOKEN should NOT be sent: + // - When connecting through "initAccess" to any other URL + // - When connecting through the fallback APN to pnpms.nokia.com + + // Changed: + // Token override allows now giving token even when not connecting through initAccess, + // so there is no need to allow TOKEN for demo purposes if token override is not on + + if( iTokenOverride // token override set on commandline params + || + // No token override: + ( iInitAccessPointUsed + && iServer.Compare( KDefaultServerString ) == 0 ) // connecting to www.help-portal.com + ) + { + // Add Token + LOGSTRING( "token" ); + TInt validitytime = pnpUtil->GetTokenValidityTime(); + TInt tokenvalue = 0; + TInt err = pnpUtil->CreateNewToken( validitytime, tokenvalue ); + if( err != KErrNone ) + { + LOGSTRING2( "CreateNewToken returned: %i", err ); + User::Leave( err ); + } + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KTokenParameter ); + iWapPage.AppendNum( tokenvalue ); + // Token validity + LOGSTRING( "token validity" ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KTokenValidityTimeParameter ); + iWapPage.AppendNum( validitytime ); + } + + + // The KEYINFO and NONCE should be SENT: + // - in all cases, also to "*help-portal.com" and through "initAccess". + + // Nonce + LOGSTRING( "nonce" ); + // validity time not used + TBuf8 nonce8; + TBuf nonce; + TRAPD( err, pnpUtil->CreateNewNonceL( 0, nonce8 ) ); + if( err != KErrNone ) + { + LOGSTRING2( "CreateNewNonceL leave code: %i", err ); + User::Leave( err ); + } + nonce.Copy( nonce8 ); + + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KNonceParameter ); + iWapPage.Append( nonce ); + + TBuf8 keyInfo8; + TBuf keyInfo; + pnpUtil->GetKeyInfoL( keyInfo8 ); + keyInfo.Copy( keyInfo8 ); + + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KKeyInfoParameter ); + iWapPage.Append( keyInfo ); + + CleanupStack::PopAndDestroy(); + +} + + +// ----------------------------------------------------------------------------- +// CCMAppUI::AppendSWandProductVersionL +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::AppendDeviceInfoL() +{ + + const RMobilePhone::TMobilePhoneIdentityV1& phoneIdentity = iRegistrationMonitor->GetPhoneIdentity(); + + const TInt KManufLength = 128; + + // Device type (for example dType=NOKIAE60) + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KDeviceTypeParameter ); + + _LIT(KManufacturer, "Nokia"); + + TBuf manfacturer; + manfacturer.Append(phoneIdentity.iManufacturer); + + TBuf model; + + if(manfacturer.MatchF(KManufacturer)==KErrNotFound) + model.Append( phoneIdentity.iManufacturer ); + + + model.Append( phoneIdentity.iModel ); + + HBufC16* param_manf = EscapeUtils::EscapeEncodeL(model, EscapeUtils::EEscapeUrlEncoded ); + iWapPage.Append( *param_manf ); + delete param_manf; + + + //iWapPage.Append( phoneIdentity.iModel ); + + // Add symbian os version, for example: dType=NOKIAE60(Symbian 9.1) + LOGSTRING("Reading OS versions"); + TVersionBuf s60Version; + TVersionBuf symbianVersion; + TRAPD( err, TVersionStrings::GetUserAgentVersionsL( s60Version, symbianVersion ) ); + LOGSTRING2( "Error: %i", err ); + if( err == KErrNone ) + { + TBuf symbian; + symbian.Copy( symbianVersion ); + iWapPage.Append( KParenthesisOpen ); + iWapPage.Append( KSymbianOs ); + iWapPage.Append( symbian ); + iWapPage.Append( KParenthesisClose ); + } + + + if( iSwVersion.Length() > 0 ) + { + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KSW ); + HBufC16* param_swversion = EscapeUtils::EscapeEncodeL(iSwVersion, EscapeUtils::EEscapeUrlEncoded ); + iWapPage.Append( *param_swversion ); + delete param_swversion; + } + LOGTEXT(iSwVersion); + + // Product model + if( iProductModel.Length() > 0 ) + { + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KHW ); + iWapPage.Append( iProductModel ); + } +} + + +// ----------------------------------------------------------------------------- +// CCMAppUI::LaunchMiniBrowserL() +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::LaunchMiniBrowserL() +{ + // create a mini browser for downloading provisioned settings + // from a supporting service + // mini browser has to be a member object as it has to exist + // during the async http request-response cycle + LOGSTRING2( "opening mini-browser, using AP: %i", iEngine->IapId() ); + if( !iMiniBrowser ) + { + RSocketServ& socketServ = iEngine->SocketServ(); + RConnection& connection = iEngine->Connection(); + iMiniBrowser = CMiniBrowser::NewL( *this, socketServ, connection ); + } + + LOGSTRING( "Calling HttpGetL" ); + if( iEngine->ProxyDefined() ) + { + iMiniBrowser->HttpGetL( iWapPage, iEngine->ProxyIp(), iEngine->ProxyPort() ); + } + else + { + iMiniBrowser->HttpGetL( iWapPage ); + } +} + + + +// ----------------------------------------------------------------------------- +// CCMAppUI::LaunchS60WebBrowser() +// +// ----------------------------------------------------------------------------- +// +void CCMAppUi::LaunchS60WebBrowserL() +{ + LOGSTRING2( "opening browser, using AP: %i", iAccessPoint ); + iEngine->Disconnect(); + + // Append access point + + #if ( !defined (__WINS__) && !defined (__WINSCW) ) + iAccessPoint = iEngine->ReturnIAPID(); + iWapPage.Append( KSpace ); + iWapPage.AppendNumUC( iAccessPoint ); + #endif + + + + TApaTaskList taskList( CEikonEnv::Static()->WsSession() ); + TApaTask task = taskList.FindApp( KCRUidBrowser ); + + if ( task.Exists() ) + { + TBuf8<1024> wapPage; + wapPage.Copy( iWapPage.Left( 1024 ) ); + LOGSTRING( "OpenWapBrowserL sending message to Browser" ); + task.SendMessage( TUid::Uid( 0 ), wapPage ); // Uid is not used + } + else + { + LOGSTRING( "OpenWapBrowserL Launching Browser" ); + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + TThreadId tid; + LOGSTRING( "before startDocument" ); + LOGTEXT(iWapPage); + + appArcSession.StartDocument( iWapPage, KCRUidBrowser, tid ); + LOGSTRING( "Document started" ); + CleanupStack::PopAndDestroy( &appArcSession ); + } + + // Browser was started, we are free to exit + iStartingBrowser = ETrue; + //DelayedExit(); + Exit(); +} + + +// ----------------------------------------------------------------------------- +// CCMAppUI::AppendWebUtilParamsL() +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::AppendWebUtilParamsL() +{ + // language + // HttpFilterCommonStringsExt::GetLanguageString is introduced in S60 2.6 + RStringPool stringPool; + LOGSTRING("open string pool"); + stringPool.OpenL( HttpFilterCommonStringsExt::GetLanguageTable() ); + CleanupClosePushL( stringPool ); + LOGSTRING("GetLanguageString"); + RStringF languageString = HttpFilterCommonStringsExt::GetLocaleLanguage( stringPool ); + CleanupClosePushL( languageString ); + LOGSTRING("GetLanguageString - done"); + LOGTEXT( languageString.DesC() ); + const TPtrC8& language = languageString.DesC(); + LOGSTRING("languageString.DesC - done"); + LOGTEXT( language ); + if( language.Length() ) + { + const TInt KMaxLanguageLength(5); + TBuf lang; + lang.Copy( language.Left( KMaxLanguageLength ) ); + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KLanguageParameter ); + iWapPage.Append( lang ); + } + CleanupStack::PopAndDestroy(); // languageString.Close + CleanupStack::PopAndDestroy(); // stringPool.Close + + // User Agent profile + // Example value: "http://nds1.nds.nokia.com/uaprof/N6600r100.xml" + LOGSTRING( "uaProf" ); + // Assume 128 chars is big enough + TBuf<128> uaProf; + CRepository* cenRep = CRepository::NewL( KCRUidWebUtils ); + CleanupStack::PushL( cenRep ); + TInt err = cenRep->Get( KWebUtilsUaProf, uaProf ); + CleanupStack::PopAndDestroy( cenRep ); + LOGSTRING2( "cenRep->Get err: %i", err ); + LOGTEXT( uaProf ); + if( uaProf.Length() ) + { + HBufC16* param = EscapeUtils::EscapeEncodeL( uaProf, EscapeUtils::EEscapeUrlEncoded ); + LOGSTRING( "converted:" ); + LOGTEXT( *param ); + if( param ) + { + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KUAProfParameter ); + iWapPage.Append( *param ); + delete param; + } + } + + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::OnlineHelpL() +// +// ----------------------------------------------------------------------------- +// + +void CCMAppUi::OnlineHelpL() +{ + // Interactive option (silent mode) + iWapPage.Append( KParameterDelimeter ); + iWapPage.Append( KInteractiveSessionParameter ); + if( iAutoStart ) + { + iWapPage.Append( KNonInteractiveSession ); + } + else + { + iWapPage.Append( KInteractiveSession ); + } + +#ifdef _DEBUG + for( TInt i(0); i < iWapPage.Length(); i += 128 ) + { + LOGTEXT( iWapPage.Right( iWapPage.Length() - i ) ); + } +#endif + + if( iAutoStart ) + { + LaunchMiniBrowserL(); + } + else + { + LaunchS60WebBrowserL(); + } +} + +// ----------------------------------------------------------------------------- +// CCMAppUI::MiniBrowserRequestDoneL +// Called after MiniBrowser has handled a request for an URL +// (a call to HttpGetL resulted a successful http request-response) +// ----------------------------------------------------------------------------- +// +void CCMAppUi::MiniBrowserRequestDoneL() + { + LOGSTRING( "CCMAppUi::MiniBrowserRequestDoneL" ); + + // Leaves from here propagate to MiniBrowserUnhandledLeave (which causes app exit) + + // Check we have not exceed the limit for maximum number of redirects + if( iRedirectsLeft <= 0 ) + { + User::Leave( KErrOverflow ); + } + + iRedirectsLeft--; + + // Leaves with KErrNotFound if there is no valid report URL + HBufC* reportUrl = iMiniBrowser->GetReportUrlLC(); + LOGSTRING( "Calling HttpGetL" ); + if( iEngine->ProxyDefined() ) + { + iMiniBrowser->HttpGetL( *reportUrl, iEngine->ProxyIp(), iEngine->ProxyPort() ); + } + else + { + iMiniBrowser->HttpGetL( *reportUrl ); + } + CleanupStack::PopAndDestroy( reportUrl ); + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::MiniBrowserErrorL +// ----------------------------------------------------------------------------- +// +void CCMAppUi::MiniBrowserErrorL( const TInt aError ) + { + LOGSTRING2( "CCMAppUi::MiniBrowserErrorL: %i", aError ); + + // If there is no valid report url the KErrNotFound from GetReportUrlLC + // propagates to MiniBrowserUnhandledLeave and causes an Exit + HBufC* reportUrl = iMiniBrowser->GetReportUrlLC(); + if( iEngine->ProxyDefined() ) + { + iMiniBrowser->HttpGetL( *reportUrl, iEngine->ProxyIp(), iEngine->ProxyPort() ); + } + else + { + iMiniBrowser->HttpGetL( *reportUrl ); + } + CleanupStack::PopAndDestroy( reportUrl ); + // Keep compiler happy + (void)aError; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::MiniBrowserErrorL +// Called if a call to MiniBrowserRequestDoneL or MiniBrowserErrorL leaves +// ----------------------------------------------------------------------------- +// +void CCMAppUi::MiniBrowserUnhandledLeave( const TInt aError ) + { + LOGSTRING2( "CCMAppUi::MiniBrowserUnhandledLeave: %i", aError ); + //DelayedExit(); + Exit(); + // Keep compiler happy + (void)aError; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::CheckDefaultAccessPointL() +// Checks defaul access point for the browser +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint32 CCMAppUi::CheckDefaultAccessPointL() + { + LOGSTRING( "CCMAppUi::CheckDefaultAccessPointL()" ); + TInt errorCode( KErrNone ) ; + TUint32 accessPoint; + TInt defaultAccessPoint( KErrNotFound ); + CCommsDatabase* theDb; + CCommsDbTableView* theView; + CCommsDbTableView* theDefaultRoamingView; + + TUint32 returnValue( 0 ); + TInt selectionMode = 0; + + CRepository* browserRepository = CRepository::NewLC( KCRUidBrowser ); + User::LeaveIfError( browserRepository->Get( KBrowserDefaultAccessPoint, defaultAccessPoint ) ); + + // Also check with Selection mode if selection mode is always ask then go for User Access + User::LeaveIfError(browserRepository->Get( KBrowserAccessPointSelectionMode, selectionMode )); + + CleanupStack::PopAndDestroy( browserRepository ); + + if(selectionMode == 1) + User::Leave(KErrNotSupported); + + + theDb = CCommsDatabase::NewL( ); + CleanupStack::PushL( theDb ); + + theView = theDb->OpenViewMatchingUintLC( TPtrC( WAP_IP_BEARER ), + TPtrC( WAP_ACCESS_POINT_ID ), + defaultAccessPoint ); + + User::LeaveIfError( theView->GotoFirstRecord() ); + + theView->ReadUintL( TPtrC( WAP_IAP ), accessPoint); + returnValue = accessPoint; + iAccessPoint = defaultAccessPoint; + + CleanupStack::PopAndDestroy( theView ); + + // check type + theView = theDb->OpenViewMatchingUintLC( TPtrC(IAP), + TPtrC(COMMDB_ID), + accessPoint ); + errorCode = theView->GotoFirstRecord(); + if ( errorCode == KErrNone ) + { + TUint32 bearerId; + theView->ReadUintL( TPtrC(IAP_BEARER), bearerId ); + CleanupStack::PopAndDestroy( theView ); + + theView = theDb->OpenViewMatchingUintLC( TPtrC(OUTGOING_GPRS), + TPtrC(COMMDB_ID), + bearerId ); + errorCode = theView->GotoFirstRecord(); + if ( errorCode == KErrNone ) + { + TUint32 apType; + theView->ReadUintL( TPtrC(GPRS_AP_TYPE), apType ); + CleanupStack::PopAndDestroy( theView ); + LOGSTRING2( "apType:%i", apType ); + } + else + { + LOGSTRING2( "error in opening OUTGOING_GPRS:%i", errorCode ); + CleanupStack::PopAndDestroy( theView ); + } + } + else + { + LOGSTRING2( "error in opening WAP_IAP:%i", errorCode ); + CleanupStack::PopAndDestroy( theView ); + } + // type check done + + if( iNetworkStatus == CCMRegistrationMonitor::ERoaming ) + { + // check the name for roaming support + CApAccessPointItem* apItem = CApAccessPointItem::NewLC(); + CApDataHandler* apDataHandler = CApDataHandler::NewLC( *theDb ); + apDataHandler->AccessPointDataL( defaultAccessPoint, *apItem ); + const HBufC* apName = apItem->ReadConstLongTextL( EApGprsAccessPointName ); + // ownership of apName stays in apItem, so no delete here for apName + LOGSTRING( "default apn:" ); + LOGTEXT( *apName ); + // check if it ends with ".gprs" == roaming safe + TBuf<10> dotGprs; + dotGprs.Append( KDot ); + dotGprs.Append( KGprs ); + TInt offset = apName->Find( dotGprs ); + TInt expectedOffset = apName->Length() - dotGprs.Length(); + if( offset != expectedOffset ) + { + // we need to use a roaming safe version of the ap + // check if allready have made it + LOGSTRING( "Checking for existing KDefaultRoamingName" ); + theDefaultRoamingView = theDb->OpenViewMatchingTextLC( TPtrC( WAP_ACCESS_POINT ), + TPtrC( COMMDB_NAME ), + KDefaultRoamingName ); + errorCode = theDefaultRoamingView->GotoFirstRecord(); + if( errorCode == KErrNone ) + { + LOGSTRING( "found, removing it" ); + TUint32 defaultRoamingId; + theDefaultRoamingView->ReadUintL( TPtrC(COMMDB_ID), defaultRoamingId); + LOGSTRING( "accesspoint id read done" ); + + apDataHandler->RemoveAPL( defaultRoamingId ); + } + + LOGSTRING( "create it" ); + CApAccessPointItem* newAp = CApAccessPointItem::NewLC(); + + newAp->CopyFromL( *apItem ); + + const RMobilePhone::TMobilePhoneSubscriberId& imsi = iRegistrationMonitor->GetImsi(); + TBuf newName; + newName.Append( *apName ); + newName.Append( KDot ); + newName.Append( KMNC0 ); + newName.Append( imsi.Mid(3,2) ); + newName.Append( KDot ); + newName.Append( KMCC ); + newName.Append( imsi.Mid(0,3) ); + newName.Append( KDot ); + newName.Append( KGprs ); + newAp->SetNamesL( KDefaultRoamingName ); + newAp->WriteTextL( EApWapAccessPointName, KDefaultRoamingName ); + newAp->WriteLongTextL( EApGprsAccessPointName, newName ); + LOGSTRING( "calling update" ); + TInt retries = KRetryCount; + TRAPD( err, apDataHandler->CreateFromDataL(*newAp) ); + while( (err == KErrLocked) && retries-- ) + { + User::After( KRetryWait ); + TRAP( err, apDataHandler->CreateFromDataL(*newAp) ); + } + if( err != KErrNone ) + { + User::Leave( err ); + } + LOGSTRING( "calling update done" ); + + newAp->ReadUint( EApWapIap, returnValue ); + newAp->ReadUint( EApWapAccessPointID, iAccessPoint ); + + LOGSTRING( "update done" ); + CleanupStack::PopAndDestroy( newAp ); + CleanupStack::PopAndDestroy( theDefaultRoamingView ); + } + CleanupStack::PopAndDestroy( apDataHandler ); + CleanupStack::PopAndDestroy( apItem ); + } + CleanupStack::PopAndDestroy( theDb ); + + + LOGSTRING2( "Check default access point returns %i", returnValue ); + LOGSTRING2( "iAccessPoint %i", iAccessPoint ); + + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::InitAccessPointL() +// Cheks the id of accesspoint which APN is initAccess +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint32 CCMAppUi::InitAccessPointL() + { + LOGSTRING( "CCMAppUi::InitAccessPointL()" ); + if(iInitAccessOn) + { + CCommsDatabase* theDb; + + theDb = CCommsDatabase::NewL(); + CleanupStack::PushL( theDb ); + + TUint32 initAP( 0 ); + + TBool value( EFalse ); + TRAPD( err, value = CheckInitAccessPointL(*theDb, initAP) ); + + if( value == EFalse ) + { + CreateInitAccessPointL( *theDb ); + TRAP( err, CheckInitAccessPointL( *theDb, initAP ) ); + } + else + { + LOGSTRING( "Init AP was ok" ); + } + + + CleanupStack::PopAndDestroy( theDb ); + + return( initAP ); + } + else + { + LOGSTRING( "CCMAppUi::InitAccessPointL Init Access feature off" ); + return KErrNone; + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::CheckInitAccessPointL() +// Cheks the settings of accesspoint which APN is initAccess +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCMAppUi::CheckInitAccessPointL( CCommsDatabase& aDb, TUint32& aAccessPoint ) + { + LOGSTRING( "CCMAppUi::CheckInitAccessPointL" ); +if(iInitAccessOn) + { + CCommsDbTableView* theView; + CCommsDbTableView* iapView; + CCommsDbTableView* wapIpBearerView; + TInt errorCode; + TBool firstTime = ETrue; // crude solution + TUint32 tableId; + + TBuf initAccess; + initAccess.Append( KInitAccess ); + + const RMobilePhone::TMobilePhoneSubscriberId& imsi = iRegistrationMonitor->GetImsi(); + if( iNetworkStatus == CCMRegistrationMonitor::ERoaming ) + { + initAccess.Append( KDot ); + initAccess.Append( KMNC0 ); + initAccess.Append( imsi.Mid(3,2) ); + initAccess.Append( KDot ); + initAccess.Append( KMCC ); + initAccess.Append( imsi.Mid(0,3) ); + initAccess.Append( KDot ); + initAccess.Append( KGprs ); + } + + theView = aDb.OpenViewMatchingTextLC( TPtrC( OUTGOING_GPRS), + TPtrC( GPRS_APN ), + initAccess ); + errorCode = theView->GotoFirstRecord(); + + FOREVER // will exit when no more records found or the first one not found or a valid found + { + if( !firstTime ) + { + LOGSTRING( "trying to get next record" ); + errorCode = theView->GotoNextRecord(); + if( errorCode != KErrNone ) + { + CleanupStack::PopAndDestroy( theView ); + return( EFalse ); + } + LOGSTRING( "checking next record" ); + } + firstTime = EFalse; + + if ( errorCode == KErrNone ) + { + theView->ReadUintL( TPtrC( COMMDB_ID ), tableId ); + iapView = aDb.OpenViewMatchingUintLC(TPtrC( IAP ), + TPtrC( IAP_SERVICE ), + tableId ); + errorCode = iapView->GotoFirstRecord(); + + if ( errorCode == KErrNone ) + { + iapView->ReadUintL( TPtrC( COMMDB_ID ), aAccessPoint ); + wapIpBearerView = aDb.OpenViewMatchingUintLC(TPtrC( WAP_IP_BEARER ), + TPtrC( WAP_IAP ), + aAccessPoint ); + errorCode = wapIpBearerView->GotoFirstRecord(); + if ( errorCode == KErrNone ) + { + wapIpBearerView->ReadUintL( TPtrC( WAP_ACCESS_POINT_ID ), iAccessPoint ); + } + else + { + LOGSTRING( "wapIpBearerView->GotoFirstRecord()" ); + CleanupStack::PopAndDestroy( wapIpBearerView ); // wapIpBearerView + CleanupStack::PopAndDestroy( iapView ); // iapView + continue; + } + CleanupStack::PopAndDestroy(); // wapIpBearerView + } + else + { + LOGSTRING( "iapView->GotoFirstRecord() failed" ); + CleanupStack::PopAndDestroy( iapView ); // iapView + continue; + } + + CleanupStack::PopAndDestroy( iapView ); // iapView + } + else + { + LOGSTRING( "theView->GotoFirstRecord() failed" ); + CleanupStack::PopAndDestroy( theView ); + return( EFalse ); + } + + if( iServer == KDefaultServerString ) + { + LOGSTRING( "checking that init access not modified" ); + // check also user name, prompt password, password, authentication, homepage + TBuf8<100> userName; + theView->ReadTextL( TPtrC(GPRS_IF_AUTH_NAME), userName ); + if( userName.Length() != 0 ) + { + LOGSTRING( "username length was not 0" ); + continue; + } + TBool promptPasswd; + theView->ReadBoolL( TPtrC(GPRS_IF_PROMPT_FOR_AUTH), promptPasswd ); + if( promptPasswd != EFalse ) + { + LOGSTRING( "promptPasswd was not EFalse" ); + continue; + } + TBuf8<100> passwd; + theView->ReadTextL( TPtrC(GPRS_IF_AUTH_PASS), passwd ); + if( passwd.Length() != 0 ) + { + LOGSTRING( "passwd length was not 0" ); + continue; + } + LOGSTRING( "init access not modified" ); + } + + CleanupStack::PopAndDestroy( theView ); + return( ETrue ); + } + } + else + { + LOGSTRING( "CCMAppUi::CheckInitAccessPointL Init Access feature off" ); + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::CreateInitAccessPointL( CCommsDatabase& aDb ) +// Creates the Init Access point to comms db +// ----------------------------------------------------------------------------- +// +TUint32 CCMAppUi::CreateInitAccessPointL( CCommsDatabase& aDb ) + { + if(iInitAccessOn) + { + CApDataHandler* apDataHandler = CApDataHandler::NewLC( aDb ); + CApAccessPointItem* apItem = CApAccessPointItem::NewLC(); + + TBuf initAccess; + initAccess.Append( KInitAccess ); + + if( iNetworkStatus == CCMRegistrationMonitor::ERoaming ) + { + const RMobilePhone::TMobilePhoneSubscriberId& imsi = iRegistrationMonitor->GetImsi(); + initAccess.Append( KDot ); + initAccess.Append( KMNC0 ); + initAccess.Append( imsi.Mid(3,2) ); + initAccess.Append( KDot ); + initAccess.Append( KMCC ); + initAccess.Append( imsi.Mid(0,3) ); + initAccess.Append( KDot ); + initAccess.Append( KGprs ); + } + + if( iNetworkStatus == CCMRegistrationMonitor::ERoaming ) + { + apItem->SetNamesL( KInitAccessRoamingName ); + } + else + { + apItem->SetNamesL( KInitAccess ); + } + + apItem->WriteLongTextL( EApGprsAccessPointName, initAccess ); + + LOGSTRING( "CreateInitAccessPointL, setting bearer type" ); + apItem->SetBearerTypeL( EApBearerTypeGPRS ); + LOGSTRING( "CreateInitAccessPointL, setting isp type type" ); + apItem->WriteUint( EApIspIspType, EIspTypeInternetOnly ); + LOGSTRING( "CreateInitAccessPointL, creating" ); + apDataHandler->CreateFromDataL( *apItem ); + + CleanupStack::PopAndDestroy( apItem ); + CleanupStack::PopAndDestroy( apDataHandler ); + + return apItem->WapUid(); + } + else + { + LOGSTRING( "CCMAppUi::CreateInitAccessPointL Init Access feature off" ); + return KErrNone; + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::ReadAccessPointFromPreferencesL() +// Reads the accesspoint value from Connection preferences table +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCMAppUi::ReadAccessPointFromPreferencesL() + { + LOGSTRING( "CCMAppUi::ReadAccessPointFromPreferencesL()" ); + TInt errorCode( KErrGeneral ); + TInt returnValue; + CCommsDatabase* theDb; + CCommsDbConnectionPrefTableView* thePrefView; + CCommsDbTableView* theView; + CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref pref; + CCommsDbConnectionPrefTableView::TCommDbIapBearer bearer; + + theDb = CCommsDatabase::NewL( ); + CleanupStack::PushL( theDb ); + thePrefView = theDb-> + OpenConnectionPrefTableViewOnRankLC( ECommDbConnectionDirectionOutgoing, TUint( 1 )); + returnValue = thePrefView -> GotoFirstRecord(); + if ( returnValue == KErrNone ) + { + thePrefView->ReadConnectionPreferenceL( pref ); + bearer = pref.iBearer; + LOGSTRING2("ReadAccessPointFromPreferencesL: iap %i", bearer.iIapId ); + + theView = theDb->OpenViewMatchingUintLC( TPtrC( WAP_IP_BEARER ), + TPtrC( WAP_IAP ), + bearer.iIapId ); + errorCode = theView->GotoFirstRecord(); + if ( errorCode == KErrNone ) + { + theView->ReadUintL( TPtrC( WAP_ACCESS_POINT_ID ), iAccessPoint ); + } + + CleanupStack::PopAndDestroy( theView ); + CleanupStack::PopAndDestroy( thePrefView ); + CleanupStack::PopAndDestroy( theDb ); + } + + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::CheckIniFileSettings +// cheks what kind of information exsist in configuration managers ini file +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::CheckIniFileSettingsL() + { + LOGSTRING( "CCMAppUi::CheckIniFileSettingsL()" ); + TInt roaming(0); + + TInt errorCodeRoaming = GetIntValue( KOnlineSupportRoaming, roaming ); + LOGSTRING2("Errorcode roaming %i", errorCodeRoaming ); + + if ( errorCodeRoaming == KErrNone ) + { + iFirstStartInHomeNetwork = ETrue; + } + } + + +TInt CCMAppUi::StoreIntValue( const TUint32 aCrKey, const TInt aValue ) + { + return iRepository->Set( aCrKey, aValue ); + } + +TInt CCMAppUi::StoreStringValue( const TUint32 aCrKey, const TDesC& aValue ) + { + return iRepository->Set( aCrKey, aValue ); + } + +TInt CCMAppUi::GetIntValue( const TUint32 aCrKey, TInt& aValue ) + { + return iRepository->Get( aCrKey, aValue ); + } + +TInt CCMAppUi::GetStringValue( const TUint32 aCrKey, TDes& aValue ) + { + return iRepository->Get( aCrKey, aValue ); + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::ShowWaitDialogL +// Shows wait note +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ShowWaitDialogL() + { + LOGSTRING( "Enter to CCMAppUi::ShowWaitDialogL"); + if( !iAutoStart ) + { + HBufC* msgText = CEikonEnv::Static()-> + AllocReadResourceLC( R_CONFMANAGER_WAITNOTE ); + + if (iCommonDialogMonitor) + { + iCommonDialogMonitor->Cancel(); + delete iCommonDialogMonitor; + iCommonDialogMonitor = NULL; + } + // instantiate the active object CGlobalConfirmationObserver + iCommonDialogMonitor = CCMDialogMonitor::NewL( *this ); + + iCommonDialogMonitor->SetDialogMode(CCMDialogMonitor::EWait); + // SetActive + iCommonDialogMonitor->Start(); + + if (!iGlobalWaitNote) + { + iGlobalWaitNote = CAknGlobalNote::NewL(); + } + + iWaitNoteId = iGlobalWaitNote->ShowNoteL( + iCommonDialogMonitor->iStatus, + EAknGlobalWaitNote, + *msgText ); + + CleanupStack::PopAndDestroy( msgText ); + } + LOGSTRING( "Exit from ShowWaitDialogL" ); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::StartUpOperationL() +// Shows wait note +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::StartUpOperationL() + { + LOGSTRING( "CCMAppUi::StartUpOperationL" ); + CheckIniFileSettingsL(); + + iApplicationStatus = EAppStatusMonitoring; + iRegistrationMonitor->StartMonitoring(); + + // Start time-out timer + StartTimeOut( KMonitoringTimeOut ); + LOGSTRING( "Monitoring started" ); + } + +// ----------------------------------------------------------------------------- +// CCMAppUi::SetServerString() +// Sets server string +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::SetServerString(const TDesC& aServer) + { + if (aServer.Length()>KMaxServerString) + { + iServer.Copy( TPtrC( aServer.Left( KMaxServerString ) ) ); + } + else + { + iServer.Copy( TPtrC( aServer ) ); + } + LOGTEXT (iServer); + } + +// ----------------------------------------------------------------------------- +// CCMAppUi::SetPageString() +// Sets page string +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::SetPageString(const TDesC& aPage) + { + if (aPage.Length() > KMaxPageString) + { + iPage = TPtrC( aPage.Left( KMaxPageString ) ); + } + else + { + iPage = TPtrC( aPage ); + } + LOGTEXT (iPage); + } + +// ----------------------------------------------------------------------------- +// CCMAppUi::SetConnectReason() +// Sets connect reason +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::SetConnectReason(TConnectReason aReason) + { + iConnectReason = aReason; + } + +// ----------------------------------------------------------------------------- +// CCMAppUi::SetQueryString() +// Sets query string +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::SetQueryString(const TDesC& aQuery) + { + if ( aQuery.Length() > KMaxQueryString ) + { + iQuery = TPtrC( aQuery.Left( KMaxQueryString ) ); + } + else + { + iQuery = TPtrC( aQuery ); + } + LOGTEXT (iQuery); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::ConnectionResultL +// ----------------------------------------------------------------------------- +// +void CCMAppUi::ConnectionResultL( const TInt aErrorCode ) + { + if( iApplicationStatus == EAppStatusClosing ) + { + return; + } + + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + + iApplicationStatus = EAppStatusInactive; + + LOGSTRING( "CCMAppUi::ConnectionResultL" ); + LOGSTRING2( "iConnectingVia:%i", iConnectingVia ); + LOGSTRING2( "aErrrorCode:%i", aErrorCode ); + + + if( iConnectingVia == EConnectingViaUser ) // this was the last access point to test + { + if( aErrorCode != KErrNone ) + { + LOGSTRING( "ErrorNoteConnectionL" ); + ErrorNoteConnectionL(); + LOGSTRING( "RestoreSettings done" ); + //DelayedExit(); + Exit(); + return; + } + else + { + ReadAccessPointFromPreferencesL(); + } + } + + if( aErrorCode == KErrNone ) + { + if( iGlobalWaitNote ) + { + iGlobalWaitNote->CancelNoteL(iWaitNoteId); + delete iGlobalWaitNote; + iGlobalWaitNote = NULL; + } + /* + if( iConnectReason == CCMAppUi::EConnectReasonFirstBoot ) + { + TApaTaskList taskList( CEikonEnv::Static()->WsSession() ); + TApaTask task = taskList.FindApp( KUidConfigurationManager ); + if( iWaitDialog && !iWaitDialogProcessFinished ) + { + LOGSTRING("iWaitDialog->ProcessFinishedL()"); + iWaitDialogProcessFinished = ETrue; + iWaitDialog->ProcessFinishedL(); + } + + + task.BringToForeground(); + } + + // this test succeeded, open the browser + LOGSTRING( "Test succeeded, closing waitdialog" ) + if( iWaitDialog && !iWaitDialogProcessFinished ) + { + LOGSTRING("iWaitDialog->ProcessFinishedL()"); + iWaitDialogProcessFinished = ETrue; + iWaitDialog->ProcessFinishedL(); + }*/ + OpenWapBrowserL(); + } + else + { + // failed, continue to next test + iEngine->Disconnect(); + InitiateNextConnectionTestL(); + LOGSTRING( "InitiateNextConnectionTestL done" ); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::UnhandledLeave +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::UnhandledLeave( TInt aErrorCode ) + { + LOGSTRING2( "CCMAppUi::UnhandledLeave: %i", aErrorCode ); + + TRAP_IGNORE( ErrorNoteUnknownL( aErrorCode ) ); + //DelayedExit(); + Exit(); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::StatusChanged +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::RegistrationMonitoringDoneL( CCMRegistrationMonitor::TNetworkStatus aNetworkStatus ) + { + LOGSTRING2( "CCMAppUi::RegistrationMonitoringDoneL %i", aNetworkStatus ); + + iNetworkStatus = aNetworkStatus; + + switch( aNetworkStatus ) + { + case CCMRegistrationMonitor::EStatusUnknown: + case CCMRegistrationMonitor::ERequestCancelled: + case CCMRegistrationMonitor::ERoaming: + case CCMRegistrationMonitor::EHomenetwork: + { + iNetworkStatusOk = ETrue; + if( iApplicationStatus == EAppStatusClosing ) + { + return; + } + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + iRegistrationMonitor->StopMonitoring(); + break; + } + default: + break; + }; + LOGSTRING( "Status changed" ); + InitiateNextConnectionTestL(); + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::RegistrationReportErrorL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::RegistrationReportErrorL( const CCMRegistrationMonitor::TMonitoringStatus aStatus, const TInt aError ) + { + LOGSTRING( "CCMAppUi::RegistrationReportErrorL " ); + LOGSTRING2( "Registration monitor failed: %i", aStatus ); + LOGSTRING2( "error: %i", aError ); + LOGSTRING2( "iApplicationStatus: %i", iApplicationStatus ); + + if( iApplicationStatus != EAppStatusClosing ) + { + iApplicationStatus = EAppStatusInactive; + if( aError == KErrCancel ) + { + //ErrorNoteNetworkL(); + ErrorNoteConnectionL(); + } + else + { + ErrorNoteUnknownL(aError); + } + //DelayedExit(); + Exit(); + } + // Keep compiler happy + (void)aStatus; + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::DynInitMenuPaneL +// Takes care of menu handling. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::DynInitMenuPaneL( + TInt /*aResourceId*/, + CEikMenuPane* /*aMenuPane*/ + ) + { + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::HandleCommandL +// Handles commands +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::HandleCommandL( TInt /*aCommand*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::HandleKeyEventL +// Handles key events +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TKeyResponse CCMAppUi::HandleKeyEventL( + const TKeyEvent& /*aKeyEvent*/, // aKeyEvent Event to handled. + TEventCode /*aType*/) // aType Type of the key event. + { + return EKeyWasNotConsumed; + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::WaitDialogDismissedL +// Handles key events +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::WaitDialogDismissedL( TInt aButtonId ) + { + LOGSTRING2( "CCMAppUi::WaitDialogDismissedL %i", aButtonId ); + LOGSTRING2( "iApplicationStatus %i", iApplicationStatus ); + + if( iApplicationStatus == EAppStatusClosing ) + { + LOGSTRING("Already closing"); + return; + } + + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + + if( aButtonId == EAknSoftkeyCancel /*EConfmSoftkeyCancel*/ + || aButtonId == EAknSoftkeyExit ) + { + // User pressed Cancel to iWaitDialog + LOGSTRING("EConfmSoftkeyCancel"); + + // iWaitDialog is already being destroyed, do not destroy again + //iWaitDialogProcessFinished = ETrue; + + iEngine->Disconnect(); + //DelayedExit(); + Exit(); + return; + } + + if ( iApplicationStatus == EAppStatusMonitoring ) + { + LOGSTRING("EAppStatusMonitoring"); + //DelayedExit(); + Exit(); + } + else if ( iApplicationStatus == EAppStatusConnecting ) + { + LOGSTRING("EAppStatusConnecting"); + iEngine->Disconnect(); + //DelayedExit(); + Exit(); + } + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::HandleGainingForeground +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::HandleGainingForeground() + { + LOGSTRING( "CCMAppUi::HandleGainingForeground" ); + #ifndef _DEBUG // if urel -> hide application in silent mode + if( iAutoStart ) + { + // prevent user from switching to ServiceHelp application + // when using silent mode by always sending ServiceHelp to background + TApaTaskList taskList( CEikonEnv::Static()->WsSession() ); + TApaTask task = taskList.FindApp( KUidConfigurationManager ); + if( task.Exists() ) + { + task.SendToBackground(); + } + } + #endif + } + +// ----------------------------------------------------------------------------- +// CCMAppUI::HandleLosingForeground +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::HandleLosingForeground() + { + LOGSTRING( "CCMAppUi::HandleLosingForeground" ); + } + +void CCMAppUi::CommonDialogDismissedL( const CCMDialogMonitor::TDialogMode aDialog, const TInt aStatusCode ) + { + LOGSTRING( "CCMAppUi::CommonDialogDismissedL" ); + if( aDialog == CCMDialogMonitor::EConfirmation ) + { + if( aStatusCode == EAknSoftkeyYes ) + { + StartTimeOut( KStartUpTimeOut ); + ShowWaitDialogL(); + } + else + { + Exit(); + } + } + else if ( aDialog == CCMDialogMonitor::EWait ) + { + // cancel + WaitDialogDismissedL( aStatusCode ); + } + } + + +// ----------------------------------------------------------------------------- +// CCMAppUI::FetchProductModelAndSwVersionL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCMAppUi::FetchProductModelAndSwVersionL() + { + LOGSTRING( "CCMAppUi::FetchProductModelAndSwVersionL - begin" ); + iSwVersion.Zero(); + iProductModel.Zero(); + + HBufC* tmpVersion = HBufC::NewLC( KSysUtilVersionTextLength ); + TPtr ptr( tmpVersion->Des() ); + User::LeaveIfError( SysUtil::GetSWVersion( ptr ) ); + LOGTEXT(ptr); + + _LIT(KVerStrStart,"V "); + _LIT(KVerStrEnd,"\n"); + + TInt pos1 = tmpVersion->Find(KVerStrStart); + TInt pos2 = tmpVersion->Find(KVerStrEnd); + TInt verlen = ((TDesC)(KVerStrStart)).Length(); + + if( pos1==KErrNotFound) // Version does not start with "V " + { + pos1=0; + verlen=0; + } + + if( (pos1!=KErrNotFound) + && (pos2!=KErrNotFound) + && (pos2 > (pos1 + verlen) ) + ) + { + pos2 -= (verlen + pos1); + TPtrC ptrSw = ptr.Mid(pos1+verlen,pos2); + iSwVersion.Append(ptrSw); + LOGTEXT( iSwVersion); + + TPtrC ptrSeek(ptr); + pos1 = ptrSeek.Find(KVerStrEnd); + if(pos1>=0) + { + ptrSeek.Set(ptrSeek.Mid(pos1+1)); + pos1 = ptrSeek.Find(KVerStrEnd); + if( pos1 >= 0 ) + { + ptrSeek.Set(ptrSeek.Mid(pos1+1)); + pos1 = ptrSeek.Find(KVerStrEnd); + if( pos1 < 0 ) + { + ptrSeek.Set(ptrSeek.Mid(1)); + iProductModel.Append(ptrSeek); + } + else if( pos1 > 0 ) + { + ptrSeek.Set(ptrSeek.Mid(1,pos1-1)); + iProductModel.Append(ptrSeek); + } + LOGTEXT(iProductModel); + } + } + + } + + CleanupStack::PopAndDestroy(); + LOGSTRING( "CCMAppUi::FetchProductModelAndSwVersionL - end" ); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// None + + +// End of File