--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pnpmobileservices/pnpms/OnlineSupport/src/CCMAppUi.cpp Wed Sep 01 12:31:32 2010 +0100
@@ -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 <avkon.hrh>
+#include <apgcli.h> // for RApaLsSession
+#include <commdb.h> // for CCommsDatabase
+#include <cdbpreftable.h> // for CCommsDbConnectionPrefTableView
+#include <AknGlobalNote.h> // for CAknGlobalNote
+#include <AknGlobalConfirmationQuery.h> // for CAknGlobalConfirmationQuery
+#include <escapeutils.h>
+#include <etelmm.h>
+#include <textresolver.h>
+#include <sysutil.h>
+#include <httpfiltercommonstringsext.h>
+#include <onlinesupport.rsg> // has to be system include.
+#include <centralrepository.h> // link against centralrepository.lib
+#include <browseruisdkcrkeys.h> // for KCRUidBrowser
+#include <CoreApplicationUIsSDKCRKeys.h>// for KCRUidCoreApplicationUIs
+//#include <BrowserUiInternalCRKeys.h> // BrowserUiSDKCRKeys.h file can replace this header file
+#include <webutilsinternalcrkeys.h> // 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 <PnpProvUtil.h>
+#include <aknnotewrappers.h>
+#include <StringLoader.h>
+
+// 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<KMaxVersionStringLength> 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<KNonceLength> nonce8;
+ TBuf<KNonceLength> 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<KMaxKeyInfoLength> keyInfo8;
+ TBuf<KMaxKeyInfoLength> 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<KManufLength> manfacturer;
+ manfacturer.Append(phoneIdentity.iManufacturer);
+
+ TBuf<KManufLength> 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<KMaxVersionBufLength> 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<KMaxLanguageLength> 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<KMaxAPNLength> 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<KMaxAPNLength> 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<KMaxAPNLength> 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