satengine/satserver/Commands/LaunchBrowserCmd/src/CLaunchBrowserHandler.cpp
author hgs
Mon, 04 Oct 2010 15:57:13 +0300
changeset 51 12bc758d6a02
parent 33 8d5d7fcf9b59
child 53 25b8d29b7c59
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Handles LaunchBrowser command
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include    <MSatShellController.h>
hgs
parents:
diff changeset
    21
#include    <cmmanager.h>
hgs
parents:
diff changeset
    22
#include    <cmconnectionmethod.h>
hgs
parents:
diff changeset
    23
#include    <cmconnectionmethoddef.h>
hgs
parents:
diff changeset
    24
#include    <cmpluginpacketdatadef.h>
hgs
parents:
diff changeset
    25
#include    <cmdestination.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include    "MSatApi.h"
hgs
parents:
diff changeset
    28
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    29
#include    "MSatUiSession.h"
hgs
parents:
diff changeset
    30
#include    "SatSOpcodes.h"
hgs
parents:
diff changeset
    31
#include    "MSatSUiClientHandler.h"
hgs
parents:
diff changeset
    32
#include    "CLaunchBrowserHandler.h"
hgs
parents:
diff changeset
    33
#include    "SatLog.h"
hgs
parents:
diff changeset
    34
#include    "MSatSystemState.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// The pause constant for checking if BrowserApp has exited.
hgs
parents:
diff changeset
    37
// This value may be adjusted to ensure the time sequence
hgs
parents:
diff changeset
    38
const TInt KSatSShortLoopTimeout = 800000; //0.8 sec
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// How many times the browser status is checked, when waiting for
hgs
parents:
diff changeset
    41
// browser shutdown. Total time
hgs
parents:
diff changeset
    42
// used to check the exiting of browser app is
hgs
parents:
diff changeset
    43
// KSatSWaitCount * KSatSShortLoopTimeout.
hgs
parents:
diff changeset
    44
const TInt KSatSWaitCount = 10;
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// Invalid PDP type
hgs
parents:
diff changeset
    47
const TInt KSatInvalidPdpType = -1;
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
#ifdef _DEBUG
hgs
parents:
diff changeset
    50
// Class name for error information.
hgs
parents:
diff changeset
    51
//lint -e752 Accessed in __ASSERT_DEBUG, but lint will not notice it.
hgs
parents:
diff changeset
    52
_LIT( KLaunchBrowserHandlerName, "CLaunchBrowserHandler" );
hgs
parents:
diff changeset
    53
#endif
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
const TInt KSatMaxIPv4AddressLength( 15 );
hgs
parents:
diff changeset
    56
const TInt KSatMaxIPv6AddressLength( 39 );
hgs
parents:
diff changeset
    57
const TInt KSatMinIPv4AddressLength( 7 );
hgs
parents:
diff changeset
    58
const TInt KSatMinIPv6AddressLength( 7 );
hgs
parents:
diff changeset
    59
const TInt KSatMaxIPv4SegmentCounter( 3 );
hgs
parents:
diff changeset
    60
const TInt KSatMaxIPv4SegmentLength( 3 );
hgs
parents:
diff changeset
    61
const TInt KSatIPv4Broadcast( 255 );
hgs
parents:
diff changeset
    62
const TInt KSatIPv4Network( 0 );
hgs
parents:
diff changeset
    63
const TInt KSatMaxIPv6SegmentCounter( 7 );
hgs
parents:
diff changeset
    64
const TInt KSatMaxIPv6SegmentLength( 4 );
hgs
parents:
diff changeset
    65
const TUint32 KSatLaunchBrowserProxyPortNumber( 80 );
hgs
parents:
diff changeset
    66
const TUint32 KSatMaxProxyPortNumber( 9999 );
hgs
parents:
diff changeset
    67
const TUint32 KSatMinProxyPortNumber( 0 );
hgs
parents:
diff changeset
    68
// Granularity for getting connection methods from CM session
hgs
parents:
diff changeset
    69
const TUint32 KSatCMGranularity( 5 );
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
_LIT( KSatAccessPointName, "SAT Launch Browser" );
hgs
parents:
diff changeset
    72
_LIT( KSatGprsAccessPointName, "internet" );
hgs
parents:
diff changeset
    73
_LIT( KSatIPv4Delimiter, "." );
hgs
parents:
diff changeset
    74
_LIT( KSatIPv6Delimiter, ":" );
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    77
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
// Two-phased constructor.
hgs
parents:
diff changeset
    79
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
CLaunchBrowserHandler* CLaunchBrowserHandler::NewL( MSatUtils* aUtils )
hgs
parents:
diff changeset
    82
    {
hgs
parents:
diff changeset
    83
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::NewL calling" )
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
    CLaunchBrowserHandler* self = new( ELeave ) CLaunchBrowserHandler;
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    88
    self->BaseConstructL( aUtils );
hgs
parents:
diff changeset
    89
    self->ConstructL();
hgs
parents:
diff changeset
    90
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::NewL exiting" )
hgs
parents:
diff changeset
    93
    return self;
hgs
parents:
diff changeset
    94
    }
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
// Destructor.
hgs
parents:
diff changeset
    99
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   100
//
hgs
parents:
diff changeset
   101
CLaunchBrowserHandler::~CLaunchBrowserHandler()
hgs
parents:
diff changeset
   102
    {
hgs
parents:
diff changeset
   103
    LOG( SIMPLE,
hgs
parents:
diff changeset
   104
        "LAUNCHBROWSER: CLaunchBrowserHandler::~CSatSLaunchBrowserHandler \
hgs
parents:
diff changeset
   105
        calling" )
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    if ( iAfterWait.IsStarted() )
hgs
parents:
diff changeset
   108
        {
hgs
parents:
diff changeset
   109
        iAfterWait.AsyncStop();
hgs
parents:
diff changeset
   110
        }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    if ( iAfterTimer )
hgs
parents:
diff changeset
   113
        {
hgs
parents:
diff changeset
   114
        iAfterTimer->Cancel();
hgs
parents:
diff changeset
   115
        delete iAfterTimer;
hgs
parents:
diff changeset
   116
        iAfterTimer = NULL;
hgs
parents:
diff changeset
   117
        }
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    iWsSession.Close();
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    Cancel();
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    LOG( SIMPLE,
hgs
parents:
diff changeset
   124
        "LAUNCHBROWSER: CLaunchBrowserHandler::~CSatSLaunchBrowserHandler \
hgs
parents:
diff changeset
   125
        exiting" )
hgs
parents:
diff changeset
   126
    }
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   129
// From class MSatCommand.
hgs
parents:
diff changeset
   130
// Response from the client.
hgs
parents:
diff changeset
   131
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   132
//
hgs
parents:
diff changeset
   133
void CLaunchBrowserHandler::ClientResponse()
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
    LOG( SIMPLE,
hgs
parents:
diff changeset
   136
        "LAUNCHBROWSER: CLaunchBrowserHandler::ClientResponse calling" )
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    // TPCmdResult
hgs
parents:
diff changeset
   139
    iLaunchBrowserRsp.iGeneralResult = RSat::KLaunchBrowserError;
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    // TAdditionalInfoType
hgs
parents:
diff changeset
   142
    iLaunchBrowserRsp.iInfoType = RSat::KNoAdditionalInfo;
hgs
parents:
diff changeset
   143
    iLaunchBrowserRsp.iAdditionalInfo.Zero();
hgs
parents:
diff changeset
   144
    iLaunchBrowserRsp.SetPCmdNumber( iLaunchBrowserData.PCmdNumber() );
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    // Perform the action that we just queried the user for.
hgs
parents:
diff changeset
   147
    if ( iQueryRsp.iAccepted )
hgs
parents:
diff changeset
   148
        {
hgs
parents:
diff changeset
   149
        // Launch the Browser.
hgs
parents:
diff changeset
   150
        TRAPD( err, LaunchBrowserL() );
hgs
parents:
diff changeset
   151
        if ( KErrNone != err )
hgs
parents:
diff changeset
   152
            {
hgs
parents:
diff changeset
   153
            iLaunchBrowserRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   154
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   155
                CLaunchBrowserHandler::ClientResponse error: %i", err )
hgs
parents:
diff changeset
   156
            }
hgs
parents:
diff changeset
   157
        else
hgs
parents:
diff changeset
   158
            {
hgs
parents:
diff changeset
   159
            LOG( SIMPLE,
hgs
parents:
diff changeset
   160
                "LAUNCHBROWSER: CLBH::CR ESetUpMenuRequested registered" )
hgs
parents:
diff changeset
   161
            TRAP_IGNORE( iUtils->RegisterL(
hgs
parents:
diff changeset
   162
                this, MSatUtils::ESetUpMenuRequested ) )
hgs
parents:
diff changeset
   163
            }
hgs
parents:
diff changeset
   164
        }
hgs
parents:
diff changeset
   165
    else // User denied this action
hgs
parents:
diff changeset
   166
        {
hgs
parents:
diff changeset
   167
        iLaunchBrowserRsp.iGeneralResult = RSat::KPCmdNotAcceptedByUser;
hgs
parents:
diff changeset
   168
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   169
            CLaunchBrowserHandler::ClientResponse not accepted" )
hgs
parents:
diff changeset
   170
        if ( iQueryRsp.iSessionTerminatedByUser )
hgs
parents:
diff changeset
   171
            {
hgs
parents:
diff changeset
   172
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   173
                 CLaunchBrowserHandler::ClientResponse close ui session" )
hgs
parents:
diff changeset
   174
            // Next SimSession end will close the ui session
hgs
parents:
diff changeset
   175
            iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
hgs
parents:
diff changeset
   176
            }
hgs
parents:
diff changeset
   177
        }
hgs
parents:
diff changeset
   178
        
hgs
parents:
diff changeset
   179
    // If command had icon data and was done succesfully, report that icon
hgs
parents:
diff changeset
   180
    // was not shown
hgs
parents:
diff changeset
   181
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   182
    if ( ( RSat::KSuccess == iLaunchBrowserRsp.iGeneralResult ) &&
hgs
parents:
diff changeset
   183
        iIconCommand )
hgs
parents:
diff changeset
   184
        {
hgs
parents:
diff changeset
   185
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   186
                 CLaunchBrowserHandler::ClientResponse icon not display" )
hgs
parents:
diff changeset
   187
        iLaunchBrowserRsp.iGeneralResult =
hgs
parents:
diff changeset
   188
            RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
    TerminalRsp( RSat::ELaunchBrowser, iLaunchBrowserRspPckg );
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    LOG( SIMPLE,
hgs
parents:
diff changeset
   194
        "LAUNCHBROWSER: CLaunchBrowserHandler::ClientResponse exiting" )
hgs
parents:
diff changeset
   195
    }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   199
// Event notification
hgs
parents:
diff changeset
   200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   201
//
hgs
parents:
diff changeset
   202
void CLaunchBrowserHandler::Event( TInt aEvent )
hgs
parents:
diff changeset
   203
    {
hgs
parents:
diff changeset
   204
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::Event calling" )
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    switch ( aEvent )
hgs
parents:
diff changeset
   207
        {
hgs
parents:
diff changeset
   208
        // SetUpMenu is listening by SAT Client.
hgs
parents:
diff changeset
   209
        case MSatUtils::ESetUpMenuRequested:
hgs
parents:
diff changeset
   210
            {
hgs
parents:
diff changeset
   211
            LOG( NORMAL,
hgs
parents:
diff changeset
   212
                "LAUNCHBROWSER::Event ESetUpMenuRequested catched and unreg" )
hgs
parents:
diff changeset
   213
            iUtils->UnregisterEvent( this, MSatUtils::ESetUpMenuRequested );
hgs
parents:
diff changeset
   214
            // Browser is brought to the top after short period of time.
hgs
parents:
diff changeset
   215
            //iUtils->SatUiHandler().ShellController().
hgs
parents:
diff changeset
   216
            //    BringBrowserToForegroundAfterPeriod();
hgs
parents:
diff changeset
   217
            break;
hgs
parents:
diff changeset
   218
            }
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
        default:
hgs
parents:
diff changeset
   221
            {
hgs
parents:
diff changeset
   222
            LOG2( NORMAL, "LAUNCHBROWSER:   Unexpected event: %i", aEvent )
hgs
parents:
diff changeset
   223
            CSatCommandHandler::Event( aEvent );
hgs
parents:
diff changeset
   224
            }
hgs
parents:
diff changeset
   225
        }
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::Event exiting" )
hgs
parents:
diff changeset
   228
    }
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   231
// From class CActive.
hgs
parents:
diff changeset
   232
// Cancels the sat request.
hgs
parents:
diff changeset
   233
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
//
hgs
parents:
diff changeset
   235
void CLaunchBrowserHandler::DoCancel()
hgs
parents:
diff changeset
   236
    {
hgs
parents:
diff changeset
   237
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DoCancel calling" )
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    iUtils->USatAPI().NotifyLaunchBrowserCancel();
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DoCancel exiting" )
hgs
parents:
diff changeset
   242
    }
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   245
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   246
// Requests the command notification.
hgs
parents:
diff changeset
   247
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   248
//
hgs
parents:
diff changeset
   249
void CLaunchBrowserHandler::IssueUSATRequest( TRequestStatus& aStatus )
hgs
parents:
diff changeset
   250
    {
hgs
parents:
diff changeset
   251
    LOG( SIMPLE,
hgs
parents:
diff changeset
   252
        "LAUNCHBROWSER: CLaunchBrowserHandler::IssueUSATRequest calling" )
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    // Clear the IPC package.
hgs
parents:
diff changeset
   255
    new (&iLaunchBrowserData) RSat::TLaunchBrowserV2();
hgs
parents:
diff changeset
   256
    iQueryRsp.iAccepted = EFalse; // default
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
    iUtils->USatAPI().NotifyLaunchBrowser( aStatus, iLaunchBrowserPckg );
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
    LOG( SIMPLE,
hgs
parents:
diff changeset
   261
        "LAUNCHBROWSER: CLaunchBrowserHandler::IssueUSATRequest exiting" )
hgs
parents:
diff changeset
   262
    }
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   265
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   266
// Precheck before executing the command.
hgs
parents:
diff changeset
   267
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   268
//
hgs
parents:
diff changeset
   269
TBool CLaunchBrowserHandler::CommandAllowed()
hgs
parents:
diff changeset
   270
    {
hgs
parents:
diff changeset
   271
    LOG( SIMPLE,
hgs
parents:
diff changeset
   272
        "LAUNCHBROWSER: CLaunchBrowserHandler::CommandAllowed calling" )
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
    iLaunchBrowserRsp.iGeneralResult = RSat::KLaunchBrowserError;
hgs
parents:
diff changeset
   275
    iLaunchBrowserRsp.iInfoType = RSat::KNoAdditionalInfo;
hgs
parents:
diff changeset
   276
    iLaunchBrowserRsp.iAdditionalInfo.Zero();
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
    RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus(
hgs
parents:
diff changeset
   279
        iUtils->SystemState().GetNetworkRegistrationStatus() );
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
    TBool commandAllowed( ETrue );
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    if ( RSat::EBrowserIdNotSpecified == iLaunchBrowserData.iBrowserId )
hgs
parents:
diff changeset
   284
        {
hgs
parents:
diff changeset
   285
        // When get unknown browser id, such as RFU value, return
hgs
parents:
diff changeset
   286
        // terminal response of command not understood.
hgs
parents:
diff changeset
   287
        iLaunchBrowserRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
hgs
parents:
diff changeset
   288
        commandAllowed = EFalse;
hgs
parents:
diff changeset
   289
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   290
            CLaunchBrowserHandler::CommandAllowed unknown browser id" )
hgs
parents:
diff changeset
   291
        }
hgs
parents:
diff changeset
   292
    else if ( ( RSat::EAlphaIdProvided !=
hgs
parents:
diff changeset
   293
        iLaunchBrowserData.iAlphaId.iStatus ) &&
hgs
parents:
diff changeset
   294
        ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   295
            iLaunchBrowserData.iIconId.iQualifier ||
hgs
parents:
diff changeset
   296
          RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   297
            iLaunchBrowserData.iIconId.iQualifier ) )
hgs
parents:
diff changeset
   298
        {
hgs
parents:
diff changeset
   299
        iLaunchBrowserRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
hgs
parents:
diff changeset
   300
        commandAllowed = EFalse;
hgs
parents:
diff changeset
   301
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   302
            CLaunchBrowserHandler::CommandAllowed icon without alpha id" )
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
    else if (
hgs
parents:
diff changeset
   305
        ( RMobilePhone::ERegisteredOnHomeNetwork != registrationStatus ) &&
hgs
parents:
diff changeset
   306
        ( RMobilePhone::ERegisteredRoaming != registrationStatus ) )
hgs
parents:
diff changeset
   307
        {
hgs
parents:
diff changeset
   308
        iLaunchBrowserRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   309
        iLaunchBrowserRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   310
        iLaunchBrowserRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   311
        iLaunchBrowserRsp.iAdditionalInfo[0] = RSat::KNoService;
hgs
parents:
diff changeset
   312
        commandAllowed = EFalse;
hgs
parents:
diff changeset
   313
        LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::CommandAllowed\
hgs
parents:
diff changeset
   314
             MS is out of service (Net. Reg. status wrong)" )
hgs
parents:
diff changeset
   315
        }
hgs
parents:
diff changeset
   316
    else if ( RSat::EBrowserSelectionNotSet == iLaunchBrowserData.iBrowserSel )
hgs
parents:
diff changeset
   317
        {
hgs
parents:
diff changeset
   318
        iLaunchBrowserRsp.iGeneralResult = RSat::KCmdTypeNotUnderstood;
hgs
parents:
diff changeset
   319
        commandAllowed = EFalse;
hgs
parents:
diff changeset
   320
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   321
            CLaunchBrowserHandler::CommandAllowed selection not set" )
hgs
parents:
diff changeset
   322
        }
hgs
parents:
diff changeset
   323
    else if ( RSat::ELaunchBrowserIfNotAlreadyLaunched ==
hgs
parents:
diff changeset
   324
        iLaunchBrowserData.iBrowserSel )
hgs
parents:
diff changeset
   325
        {
hgs
parents:
diff changeset
   326
        if ( BrowserExists() )
hgs
parents:
diff changeset
   327
            {
hgs
parents:
diff changeset
   328
            iLaunchBrowserRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   329
            iLaunchBrowserRsp.iAdditionalInfo.Append( 
hgs
parents:
diff changeset
   330
                RSat::KBrowserUnavailable );
hgs
parents:
diff changeset
   331
            commandAllowed = EFalse;
hgs
parents:
diff changeset
   332
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   333
                CLaunchBrowserHandler::CommandAllowed not launched" )
hgs
parents:
diff changeset
   334
            }
hgs
parents:
diff changeset
   335
        }
hgs
parents:
diff changeset
   336
    else
hgs
parents:
diff changeset
   337
        {
hgs
parents:
diff changeset
   338
        LOG( SIMPLE,
hgs
parents:
diff changeset
   339
            "LAUNCHBROWSER: CLaunchBrowserHandler::CommandAllowed ok" )
hgs
parents:
diff changeset
   340
        }
hgs
parents:
diff changeset
   341
hgs
parents:
diff changeset
   342
    if ( !commandAllowed )
hgs
parents:
diff changeset
   343
        {
hgs
parents:
diff changeset
   344
        LOG( SIMPLE,
hgs
parents:
diff changeset
   345
            "CLaunchBrowserHandler::CommandAllowed commandAllowed false" )
hgs
parents:
diff changeset
   346
        iLaunchBrowserRsp.SetPCmdNumber( iLaunchBrowserData.PCmdNumber() );
hgs
parents:
diff changeset
   347
        TerminalRsp( RSat::ELaunchBrowser, iLaunchBrowserRspPckg );
hgs
parents:
diff changeset
   348
        }
hgs
parents:
diff changeset
   349
    // Set icon command flag whether icon data was received and set qualifier
hgs
parents:
diff changeset
   350
    // to no icon id
hgs
parents:
diff changeset
   351
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   352
    else if ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   353
        iLaunchBrowserData.iIconId.iQualifier ) ||
hgs
parents:
diff changeset
   354
        ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   355
        iLaunchBrowserData.iIconId.iQualifier ) )
hgs
parents:
diff changeset
   356
        {
hgs
parents:
diff changeset
   357
         LOG( SIMPLE,
hgs
parents:
diff changeset
   358
            "CLaunchBrowserHandler::CommandAllowed commandAllowed ENoIconId" )
hgs
parents:
diff changeset
   359
        iIconCommand = ETrue;
hgs
parents:
diff changeset
   360
        iLaunchBrowserData.iIconId.iQualifier = RSat::ENoIconId;
hgs
parents:
diff changeset
   361
        }
hgs
parents:
diff changeset
   362
    else
hgs
parents:
diff changeset
   363
        {
hgs
parents:
diff changeset
   364
        iIconCommand = EFalse;
hgs
parents:
diff changeset
   365
        }
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   368
        "LAUNCHBROWSER: CLaunchBrowserHandler::CommandAllowed exiting, \
hgs
parents:
diff changeset
   369
         commandAllowed: %d", commandAllowed )
hgs
parents:
diff changeset
   370
    return commandAllowed;
hgs
parents:
diff changeset
   371
    }
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   374
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   375
// Answers for need of UI session.
hgs
parents:
diff changeset
   376
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   377
//
hgs
parents:
diff changeset
   378
TBool CLaunchBrowserHandler::NeedUiSession()
hgs
parents:
diff changeset
   379
    {
hgs
parents:
diff changeset
   380
    LOG( SIMPLE,
hgs
parents:
diff changeset
   381
        "LAUNCHBROWSER: CLaunchBrowserHandler::NeedUiSession calling" )
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
    const RSat::TAlphaId alphaId( iLaunchBrowserData.iAlphaId );
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
    iNeedUiSession = ETrue;
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
    if ( ( ( alphaId.iStatus == RSat::EAlphaIdProvided &&
hgs
parents:
diff changeset
   388
        alphaId.iAlphaId.Length() == 0 ) ||
hgs
parents:
diff changeset
   389
        alphaId.iStatus == RSat::EAlphaIdNull ) &&
hgs
parents:
diff changeset
   390
        ( !iUtils->SystemState().IsConfirmSatOperationsOn() ) )
hgs
parents:
diff changeset
   391
        {
hgs
parents:
diff changeset
   392
        iNeedUiSession = EFalse;
hgs
parents:
diff changeset
   393
        LOG( NORMAL,
hgs
parents:
diff changeset
   394
            "LAUNCHBROWSER: CLaunchBrowserHandler::NeedUiSession no  \
hgs
parents:
diff changeset
   395
            Ui session needed" )
hgs
parents:
diff changeset
   396
        }
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
    if ( iUtils->CoverUiSupported() && iNeedUiSession )
hgs
parents:
diff changeset
   399
        {
hgs
parents:
diff changeset
   400
        LOG( NORMAL,
hgs
parents:
diff changeset
   401
            "LAUNCHBROWSER: CLaunchBrowserHandler::NeedUiSession Ui session \
hgs
parents:
diff changeset
   402
            needed" )
hgs
parents:
diff changeset
   403
        TSatCommandData medEventData;
hgs
parents:
diff changeset
   404
        medEventData.iPCmdNumber = RSat::ELaunchBrowser;
hgs
parents:
diff changeset
   405
        medEventData.iAlphaId = iLaunchBrowserData.iAlphaId;
hgs
parents:
diff changeset
   406
hgs
parents:
diff changeset
   407
        if ( iUtils->SystemState().IsConfirmSatOperationsOn() )
hgs
parents:
diff changeset
   408
            {
hgs
parents:
diff changeset
   409
            LOG( NORMAL,
hgs
parents:
diff changeset
   410
            "LAUNCHBROWSER: CLaunchBrowserHandler::NeedUiSession \
hgs
parents:
diff changeset
   411
             KSatLongDuration" )
hgs
parents:
diff changeset
   412
            medEventData.iDuration.iNumOfUnits = KSatLongDuration;
hgs
parents:
diff changeset
   413
            }
hgs
parents:
diff changeset
   414
        else
hgs
parents:
diff changeset
   415
            {
hgs
parents:
diff changeset
   416
            medEventData.iDuration.iNumOfUnits = KSatDefaultDuration;
hgs
parents:
diff changeset
   417
            }
hgs
parents:
diff changeset
   418
hgs
parents:
diff changeset
   419
        medEventData.iDuration.iTimeUnit = RSat::ESeconds;
hgs
parents:
diff changeset
   420
        medEventData.iIconID = iLaunchBrowserData.iIconId;
hgs
parents:
diff changeset
   421
        TSatCommandPckg tPckg( medEventData );
hgs
parents:
diff changeset
   422
        iUtils->RaiseSatEvent( tPckg );
hgs
parents:
diff changeset
   423
        }
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   426
        "LAUNCHBROWSER: CLaunchBrowserHandler::NeedUiSession exiting, \
hgs
parents:
diff changeset
   427
         iNeedUiSession: %d", iNeedUiSession )
hgs
parents:
diff changeset
   428
    return iNeedUiSession;
hgs
parents:
diff changeset
   429
    }
hgs
parents:
diff changeset
   430
hgs
parents:
diff changeset
   431
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   432
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   433
// Called when USAT API notifies that command.
hgs
parents:
diff changeset
   434
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   435
//
hgs
parents:
diff changeset
   436
void CLaunchBrowserHandler::HandleCommand()
hgs
parents:
diff changeset
   437
    {
hgs
parents:
diff changeset
   438
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::HandleCommand calling" )
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
    // Register service request handler for LaunchBrowser command,
hgs
parents:
diff changeset
   441
    // If there is already service request for query, registering
hgs
parents:
diff changeset
   442
    // updates command handler, so client responses comes to this
hgs
parents:
diff changeset
   443
    // command handler
hgs
parents:
diff changeset
   444
    TRAPD( err, iUtils->RegisterServiceRequestL(
hgs
parents:
diff changeset
   445
        ESatSProactiveQuery,
hgs
parents:
diff changeset
   446
        ESatSProactiveQueryResponse,
hgs
parents:
diff changeset
   447
        this ) );
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
    if ( KErrNone != err )
hgs
parents:
diff changeset
   450
        {
hgs
parents:
diff changeset
   451
        iLaunchBrowserRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   452
        iLaunchBrowserRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   453
        iLaunchBrowserRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   454
        iLaunchBrowserRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
hgs
parents:
diff changeset
   455
        iLaunchBrowserRsp.SetPCmdNumber( iLaunchBrowserData.PCmdNumber() );
hgs
parents:
diff changeset
   456
        TerminalRsp( RSat::ELaunchBrowser, iLaunchBrowserRspPckg );
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
        LOG2( SIMPLE,
hgs
parents:
diff changeset
   459
        "LAUNCHBROWSER: CLaunchBrowserHandler::HandleCommand error: %i", err )
hgs
parents:
diff changeset
   460
        }
hgs
parents:
diff changeset
   461
    else if ( iNeedUiSession )
hgs
parents:
diff changeset
   462
        {
hgs
parents:
diff changeset
   463
        iQueryData.iCommand = ESatSLaunchBrowserQuery;
hgs
parents:
diff changeset
   464
        iQueryData.iQueryText = iLaunchBrowserData.iAlphaId.iAlphaId;
hgs
parents:
diff changeset
   465
        iQueryData.iIconId.iIdentifier =
hgs
parents:
diff changeset
   466
            iLaunchBrowserData.iIconId.iIdentifier;
hgs
parents:
diff changeset
   467
        LOG2( SIMPLE, "CLaunchBrowserHandler::HandleCommand \
hgs
parents:
diff changeset
   468
              iLaunchBrowserData.iIconId.iQualifier: %i", 
hgs
parents:
diff changeset
   469
              iLaunchBrowserData.iIconId.iQualifier )
hgs
parents:
diff changeset
   470
        switch ( iLaunchBrowserData.iIconId.iQualifier )
hgs
parents:
diff changeset
   471
            {
hgs
parents:
diff changeset
   472
            case RSat::ESelfExplanatory:
hgs
parents:
diff changeset
   473
                {
hgs
parents:
diff changeset
   474
                // Icon qualifier is self explanatory (to display instead
hgs
parents:
diff changeset
   475
                // of the alpha id or text string).
hgs
parents:
diff changeset
   476
                iQueryData.iIconId.iIconQualifier = ESatSelfExplanatory;
hgs
parents:
diff changeset
   477
                break;
hgs
parents:
diff changeset
   478
                }
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
            case RSat::ENotSelfExplanatory:
hgs
parents:
diff changeset
   481
                {
hgs
parents:
diff changeset
   482
                // Icon qualifier is not self explanatory.
hgs
parents:
diff changeset
   483
                iQueryData.iIconId.iIconQualifier = ESatNotSelfExplanatory;
hgs
parents:
diff changeset
   484
                break;
hgs
parents:
diff changeset
   485
                }
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
            default:
hgs
parents:
diff changeset
   488
                {
hgs
parents:
diff changeset
   489
                // Icon qualifier not present
hgs
parents:
diff changeset
   490
                iQueryData.iIconId.iIconQualifier = ESatENoIconId;
hgs
parents:
diff changeset
   491
                break;
hgs
parents:
diff changeset
   492
                }
hgs
parents:
diff changeset
   493
            }
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
        if ( RSat::EAlphaIdNotPresent == iLaunchBrowserData.iAlphaId.iStatus )
hgs
parents:
diff changeset
   496
            {
hgs
parents:
diff changeset
   497
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::HandleCommand \
hgs
parents:
diff changeset
   498
                 EAlphaIdNotPresent" )
hgs
parents:
diff changeset
   499
            iQueryData.iAlphaIdStatus = ESatAlphaIdNotProvided;
hgs
parents:
diff changeset
   500
            }
hgs
parents:
diff changeset
   501
        else if ( RSat::EAlphaIdProvided ==
hgs
parents:
diff changeset
   502
            iLaunchBrowserData.iAlphaId.iStatus )
hgs
parents:
diff changeset
   503
            {
hgs
parents:
diff changeset
   504
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::HandleCommand \
hgs
parents:
diff changeset
   505
                 EAlphaIdProvided" )
hgs
parents:
diff changeset
   506
            iQueryData.iAlphaIdStatus = ESatAlphaIdNotNull;
hgs
parents:
diff changeset
   507
            }
hgs
parents:
diff changeset
   508
        else
hgs
parents:
diff changeset
   509
            {
hgs
parents:
diff changeset
   510
            iQueryData.iAlphaIdStatus = ESatAlphaIdNull;
hgs
parents:
diff changeset
   511
            }
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
        iQueryData.iSimApplicationName = iUtils->SatAppName();
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
        // Ask the user permission to launch browser. Reply will come
hgs
parents:
diff changeset
   516
        // to ClientResponse() method.
hgs
parents:
diff changeset
   517
        iUtils->SatUiHandler().UiSession()->SendCommand(
hgs
parents:
diff changeset
   518
            &iQueryPckg,
hgs
parents:
diff changeset
   519
            &iQueryRspPckg,
hgs
parents:
diff changeset
   520
            ESatSProactiveQuery );
hgs
parents:
diff changeset
   521
        }
hgs
parents:
diff changeset
   522
    else // transparent launch
hgs
parents:
diff changeset
   523
        {
hgs
parents:
diff changeset
   524
        // Launch the Browser.
hgs
parents:
diff changeset
   525
        TRAP( err, LaunchBrowserL() );
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
        if ( KErrNone != err )
hgs
parents:
diff changeset
   528
            {
hgs
parents:
diff changeset
   529
            iLaunchBrowserRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   530
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
   531
                CLaunchBrowserHandler::HandleCommand error: %i", err )
hgs
parents:
diff changeset
   532
            }
hgs
parents:
diff changeset
   533
        else
hgs
parents:
diff changeset
   534
            {
hgs
parents:
diff changeset
   535
            LOG( SIMPLE,
hgs
parents:
diff changeset
   536
                "LAUNCHBROWSER: CLBH::CR ESetUpMenuRequested registered" )
hgs
parents:
diff changeset
   537
            TRAP_IGNORE( iUtils->RegisterL(
hgs
parents:
diff changeset
   538
                this, MSatUtils::ESetUpMenuRequested ) )
hgs
parents:
diff changeset
   539
            }
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
        TerminalRsp( RSat::ELaunchBrowser, iLaunchBrowserRspPckg );
hgs
parents:
diff changeset
   542
        }
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::HandleCommand exiting" )
hgs
parents:
diff changeset
   545
    }
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   548
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   549
// Indicates the failure of launching ui client.
hgs
parents:
diff changeset
   550
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   551
//
hgs
parents:
diff changeset
   552
void CLaunchBrowserHandler::UiLaunchFailed()
hgs
parents:
diff changeset
   553
    {
hgs
parents:
diff changeset
   554
    LOG( SIMPLE,
hgs
parents:
diff changeset
   555
        "LAUNCHBROWSER: CLaunchBrowserHandler::UiLaunchFailed calling" )
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
    iLaunchBrowserRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
hgs
parents:
diff changeset
   558
    iLaunchBrowserRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   559
    iLaunchBrowserRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   560
    iLaunchBrowserRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
hgs
parents:
diff changeset
   561
    iLaunchBrowserRsp.SetPCmdNumber( iLaunchBrowserData.PCmdNumber() );
hgs
parents:
diff changeset
   562
    TerminalRsp( RSat::ELaunchBrowser, iLaunchBrowserRspPckg );
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
    LOG( SIMPLE,
hgs
parents:
diff changeset
   565
        "LAUNCHBROWSER: CLaunchBrowserHandler::UiLaunchFailed exiting" )
hgs
parents:
diff changeset
   566
    }
hgs
parents:
diff changeset
   567
    
hgs
parents:
diff changeset
   568
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   569
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   570
// might leave.
hgs
parents:
diff changeset
   571
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   572
//
hgs
parents:
diff changeset
   573
//lint -e{1403, 1769} Can not be initialized, harmless.
hgs
parents:
diff changeset
   574
CLaunchBrowserHandler::CLaunchBrowserHandler() :
hgs
parents:
diff changeset
   575
    CSatCommandHandler(),
hgs
parents:
diff changeset
   576
    iLaunchBrowserData(),
hgs
parents:
diff changeset
   577
    iLaunchBrowserPckg( iLaunchBrowserData ),
hgs
parents:
diff changeset
   578
    iLaunchBrowserRsp(),
hgs
parents:
diff changeset
   579
    iLaunchBrowserRspPckg( iLaunchBrowserRsp ),
hgs
parents:
diff changeset
   580
    iQueryData(),
hgs
parents:
diff changeset
   581
    iQueryPckg( iQueryData ),
hgs
parents:
diff changeset
   582
    iQueryRsp(),
hgs
parents:
diff changeset
   583
    iQueryRspPckg( iQueryRsp ),
hgs
parents:
diff changeset
   584
    iUidWmlBrowser( TUid::Uid( KWmlcHandler ) ),
hgs
parents:
diff changeset
   585
    iAfterTimer( NULL ),
hgs
parents:
diff changeset
   586
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   587
    iIconCommand( EFalse )
hgs
parents:
diff changeset
   588
    {
hgs
parents:
diff changeset
   589
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::CLaunchBrowserHandler \
hgs
parents:
diff changeset
   590
        calling - exiting" )
hgs
parents:
diff changeset
   591
    }
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   594
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
   595
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   596
//
hgs
parents:
diff changeset
   597
void CLaunchBrowserHandler::ConstructL()
hgs
parents:
diff changeset
   598
    {
hgs
parents:
diff changeset
   599
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::ConstructL calling" )
hgs
parents:
diff changeset
   600
hgs
parents:
diff changeset
   601
    // Open the Window server session.
hgs
parents:
diff changeset
   602
    User::LeaveIfError( iWsSession.Connect() );
hgs
parents:
diff changeset
   603
hgs
parents:
diff changeset
   604
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::ConstructL exiting" )
hgs
parents:
diff changeset
   605
    }
hgs
parents:
diff changeset
   606
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   609
// Checks if Browser application is launched.
hgs
parents:
diff changeset
   610
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   611
//
hgs
parents:
diff changeset
   612
TBool CLaunchBrowserHandler::BrowserExists()
hgs
parents:
diff changeset
   613
    {
hgs
parents:
diff changeset
   614
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::BrowserExists calling" )
hgs
parents:
diff changeset
   615
    TBool browserExists( EFalse );
hgs
parents:
diff changeset
   616
hgs
parents:
diff changeset
   617
    TApaTaskList taskList( iWsSession );
hgs
parents:
diff changeset
   618
    TApaTask task = taskList.FindApp( iUidWmlBrowser );
hgs
parents:
diff changeset
   619
    browserExists = task.Exists();
hgs
parents:
diff changeset
   620
hgs
parents:
diff changeset
   621
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::BrowserExists exiting" )
hgs
parents:
diff changeset
   622
    return browserExists;
hgs
parents:
diff changeset
   623
    }
hgs
parents:
diff changeset
   624
hgs
parents:
diff changeset
   625
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   626
// The Launch Browser handler.
hgs
parents:
diff changeset
   627
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   628
//
hgs
parents:
diff changeset
   629
void CLaunchBrowserHandler::LaunchBrowserL()
hgs
parents:
diff changeset
   630
    {
hgs
parents:
diff changeset
   631
    LOG( SIMPLE,
hgs
parents:
diff changeset
   632
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL calling" )
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
    // Check the URL length.
hgs
parents:
diff changeset
   635
    const TInt urlLen( iLaunchBrowserData.iUrl.Length() );
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
    // ID of the accesspoint in the communications database.
hgs
parents:
diff changeset
   638
    TUid accesspointID( TUid::Uid( KErrNotFound ) );
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
    // If apId is given by SIM card, then we use that, otherwise,
hgs
parents:
diff changeset
   641
    // get default apId from default connection method.
hgs
parents:
diff changeset
   642
    TUint32 apId( 0 );
hgs
parents:
diff changeset
   643
    // GCF is supported since S60 5.0
hgs
parents:
diff changeset
   644
    apId = GetAccessPointByGatewayAddressL();
hgs
parents:
diff changeset
   645
    if ( apId )
hgs
parents:
diff changeset
   646
        {
hgs
parents:
diff changeset
   647
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   648
              "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL, \
hgs
parents:
diff changeset
   649
              Get gcf AP id = %d", apId )
hgs
parents:
diff changeset
   650
        accesspointID.iUid = static_cast<TInt32>( apId );
hgs
parents:
diff changeset
   651
        }    
hgs
parents:
diff changeset
   652
    
hgs
parents:
diff changeset
   653
    // Get default AP if GCF ap not found
hgs
parents:
diff changeset
   654
    if ( KErrNotFound == accesspointID.iUid )
hgs
parents:
diff changeset
   655
        {
hgs
parents:
diff changeset
   656
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   657
             "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL, \
hgs
parents:
diff changeset
   658
             no gcf AP id" )
hgs
parents:
diff changeset
   659
        apId = GetAccessPointByDefaultL();
hgs
parents:
diff changeset
   660
        if ( apId )
hgs
parents:
diff changeset
   661
            {
hgs
parents:
diff changeset
   662
            LOG2( SIMPLE, 
hgs
parents:
diff changeset
   663
                  "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL, \
hgs
parents:
diff changeset
   664
                  default AP id = %d", apId )            
hgs
parents:
diff changeset
   665
            accesspointID.iUid = static_cast<TInt32>( apId );
hgs
parents:
diff changeset
   666
            }
hgs
parents:
diff changeset
   667
        }
hgs
parents:
diff changeset
   668
    
hgs
parents:
diff changeset
   669
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL, \
hgs
parents:
diff changeset
   670
          accesspointID.iUid=%d", accesspointID.iUid )
hgs
parents:
diff changeset
   671
    
hgs
parents:
diff changeset
   672
    HBufC* param = NULL;
hgs
parents:
diff changeset
   673
    // If the URL is given by SIM, then we use that
hgs
parents:
diff changeset
   674
    if ( urlLen )
hgs
parents:
diff changeset
   675
        {
hgs
parents:
diff changeset
   676
        // Url is given by SIM, and we use that.
hgs
parents:
diff changeset
   677
        param = HBufC::NewLC( urlLen );
hgs
parents:
diff changeset
   678
        param->Des().Copy( iLaunchBrowserData.iUrl );
hgs
parents:
diff changeset
   679
        LOG3( SIMPLE, 
hgs
parents:
diff changeset
   680
              "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL,\
hgs
parents:
diff changeset
   681
              url is given by SIM, url=%s, length=%d", 
hgs
parents:
diff changeset
   682
              param, param->Des().Length() )
hgs
parents:
diff changeset
   683
        }  
hgs
parents:
diff changeset
   684
    // If no url from SIM, get default URL by selected access point.
hgs
parents:
diff changeset
   685
    else if ( !param && accesspointID.iUid > 0 )
hgs
parents:
diff changeset
   686
        {
hgs
parents:
diff changeset
   687
        param = GetDefaultUrlByAccessPointLC( 
hgs
parents:
diff changeset
   688
                static_cast<TUint32>( accesspointID.iUid) );
hgs
parents:
diff changeset
   689
        LOG3( SIMPLE, 
hgs
parents:
diff changeset
   690
              "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL,\
hgs
parents:
diff changeset
   691
              url is given by IAP, url=%s, length=%d",
hgs
parents:
diff changeset
   692
              param, param->Des().Length() )
hgs
parents:
diff changeset
   693
        }
hgs
parents:
diff changeset
   694
    else
hgs
parents:
diff changeset
   695
        {
hgs
parents:
diff changeset
   696
        param = KNullDesC().AllocLC();
hgs
parents:
diff changeset
   697
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   698
             "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL no url" )
hgs
parents:
diff changeset
   699
        }
hgs
parents:
diff changeset
   700
    
hgs
parents:
diff changeset
   701
    switch ( iLaunchBrowserData.iBrowserSel )
hgs
parents:
diff changeset
   702
        {
hgs
parents:
diff changeset
   703
        case RSat::ECloseExistingLaunchNewBrowserSession:
hgs
parents:
diff changeset
   704
            {
hgs
parents:
diff changeset
   705
            LOG( NORMAL, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
   706
                 LaunchBrowserL, ECloseExistingLaunchNewBrowserSession" )
hgs
parents:
diff changeset
   707
            CloseBrowser();  // Close Browser Session if it exists.
hgs
parents:
diff changeset
   708
            LaunchWithUrlL( param->Des(), accesspointID );
hgs
parents:
diff changeset
   709
            break;
hgs
parents:
diff changeset
   710
            }
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
        case RSat::ELaunchBrowserIfNotAlreadyLaunched:
hgs
parents:
diff changeset
   713
            {
hgs
parents:
diff changeset
   714
            LOG( NORMAL, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
   715
                 LaunchBrowserL, ELaunchBrowserIfNotAlreadyLaunched" )
hgs
parents:
diff changeset
   716
            if ( BrowserExists() )
hgs
parents:
diff changeset
   717
                {
hgs
parents:
diff changeset
   718
                LOG( SIMPLE,"CLaunchBrowserHandler::LaunchBrowserL \
hgs
parents:
diff changeset
   719
                     BrowserExists" )
hgs
parents:
diff changeset
   720
                // Browser exists, error response returned.
hgs
parents:
diff changeset
   721
                iLaunchBrowserRsp.iGeneralResult = RSat::KLaunchBrowserError;
hgs
parents:
diff changeset
   722
                iLaunchBrowserRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   723
                iLaunchBrowserRsp.iAdditionalInfo.Append( 
hgs
parents:
diff changeset
   724
                    RSat::KBrowserUnavailable );
hgs
parents:
diff changeset
   725
                }
hgs
parents:
diff changeset
   726
            else
hgs
parents:
diff changeset
   727
                {
hgs
parents:
diff changeset
   728
                LaunchWithUrlL( param->Des(), accesspointID );
hgs
parents:
diff changeset
   729
                }
hgs
parents:
diff changeset
   730
            break;
hgs
parents:
diff changeset
   731
            }
hgs
parents:
diff changeset
   732
hgs
parents:
diff changeset
   733
        case RSat::EUseExistingBrowser:
hgs
parents:
diff changeset
   734
            {
hgs
parents:
diff changeset
   735
            // SAT Shell Controller looks if browser already exists.
hgs
parents:
diff changeset
   736
            LOG( NORMAL, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
   737
                 LaunchBrowserL,EUseExistingBrowser" )
hgs
parents:
diff changeset
   738
            LaunchWithUrlL( param->Des(), accesspointID );
hgs
parents:
diff changeset
   739
            break;
hgs
parents:
diff changeset
   740
            }
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
        case RSat::EBrowserSelectionNotSet:
hgs
parents:
diff changeset
   743
        default:
hgs
parents:
diff changeset
   744
            __ASSERT_DEBUG( EFalse,
hgs
parents:
diff changeset
   745
                Panic( KLaunchBrowserHandlerName, KErrBadName ) );
hgs
parents:
diff changeset
   746
            break;
hgs
parents:
diff changeset
   747
        }
hgs
parents:
diff changeset
   748
hgs
parents:
diff changeset
   749
    CleanupStack::PopAndDestroy( param );
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
    LOG( SIMPLE,
hgs
parents:
diff changeset
   752
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchBrowserL exiting" )
hgs
parents:
diff changeset
   753
    }
hgs
parents:
diff changeset
   754
hgs
parents:
diff changeset
   755
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   756
// Closes the Browser application if it is active and waits until
hgs
parents:
diff changeset
   757
// closing is complete.
hgs
parents:
diff changeset
   758
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   759
//
hgs
parents:
diff changeset
   760
void CLaunchBrowserHandler::CloseBrowser()
hgs
parents:
diff changeset
   761
    {
hgs
parents:
diff changeset
   762
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   763
         "LAUNCHBROWSER: CLaunchBrowserHandler::CloseBrowser calling" )
hgs
parents:
diff changeset
   764
    TApaTaskList taskList( iWsSession );
hgs
parents:
diff changeset
   765
    TApaTask task = taskList.FindApp( iUidWmlBrowser );
hgs
parents:
diff changeset
   766
hgs
parents:
diff changeset
   767
    if ( task.Exists() )
hgs
parents:
diff changeset
   768
        {
hgs
parents:
diff changeset
   769
        task.SendSystemEvent( EApaSystemEventShutdown );
hgs
parents:
diff changeset
   770
hgs
parents:
diff changeset
   771
        TBool browserExists( ETrue );
hgs
parents:
diff changeset
   772
        TInt waitCount( 0 );
hgs
parents:
diff changeset
   773
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   774
              "CLaunchBrowserHandler::CloseBrowser browserExists: %d",
hgs
parents:
diff changeset
   775
              browserExists )
hgs
parents:
diff changeset
   776
        // Make sure that closing is completed.
hgs
parents:
diff changeset
   777
        while ( browserExists )
hgs
parents:
diff changeset
   778
            {
hgs
parents:
diff changeset
   779
            After( KSatSShortLoopTimeout );
hgs
parents:
diff changeset
   780
            ++waitCount;
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
            TApaTask newTask = taskList.FindApp( iUidWmlBrowser );
hgs
parents:
diff changeset
   783
            browserExists = newTask.Exists();
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
            if ( KSatSWaitCount <= waitCount )
hgs
parents:
diff changeset
   786
                {
hgs
parents:
diff changeset
   787
                newTask.KillTask();
hgs
parents:
diff changeset
   788
                browserExists = EFalse;
hgs
parents:
diff changeset
   789
                LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
   790
                    CloseBrowser force kill task" )
hgs
parents:
diff changeset
   791
                }
hgs
parents:
diff changeset
   792
            }
hgs
parents:
diff changeset
   793
        }
hgs
parents:
diff changeset
   794
hgs
parents:
diff changeset
   795
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   796
         "LAUNCHBROWSER: CLaunchBrowserHandler::CloseBrowser exiting" )
hgs
parents:
diff changeset
   797
    }
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   800
// Launches The Browser with URL.
hgs
parents:
diff changeset
   801
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   802
//
51
hgs
parents: 33
diff changeset
   803
void CLaunchBrowserHandler::LaunchWithUrlL( const TDesC& /*aParam*/,
hgs
parents: 33
diff changeset
   804
    const TUid& /*aAccessPointUid*/ )
33
hgs
parents:
diff changeset
   805
    {
hgs
parents:
diff changeset
   806
    LOG( SIMPLE,
hgs
parents:
diff changeset
   807
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL calling" )
51
hgs
parents: 33
diff changeset
   808
//    LOG3( SIMPLE,
hgs
parents: 33
diff changeset
   809
//         "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL\
hgs
parents: 33
diff changeset
   810
//          url=%s, IAP=%d", &aParam, aAccessPointUid.iUid )        
33
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
    // Browser launching called.
51
hgs
parents: 33
diff changeset
   813
//    TInt err = iUtils->SatUiHandler().ShellController().LaunchBrowserL(
hgs
parents: 33
diff changeset
   814
//        aParam, aAccessPointUid );
33
hgs
parents:
diff changeset
   815
    TInt err =  KErrNone;
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
    if ( KErrNone == err )
hgs
parents:
diff changeset
   818
        {
hgs
parents:
diff changeset
   819
        if ( !iQueryRsp.iRequestedIconDisplayed &&
hgs
parents:
diff changeset
   820
            ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   821
            iLaunchBrowserData.iIconId.iQualifier ) ||
hgs
parents:
diff changeset
   822
            ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   823
            iLaunchBrowserData.iIconId.iQualifier ) ) )
hgs
parents:
diff changeset
   824
            {
hgs
parents:
diff changeset
   825
            iLaunchBrowserRsp.iGeneralResult =
hgs
parents:
diff changeset
   826
                RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   827
            LOG( SIMPLE,
hgs
parents:
diff changeset
   828
                "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL \
hgs
parents:
diff changeset
   829
                no icon shown" )
hgs
parents:
diff changeset
   830
            }
hgs
parents:
diff changeset
   831
        else
hgs
parents:
diff changeset
   832
            {
hgs
parents:
diff changeset
   833
            iLaunchBrowserRsp.iGeneralResult = RSat::KSuccess;
hgs
parents:
diff changeset
   834
            LOG( SIMPLE,
hgs
parents:
diff changeset
   835
                "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL \
hgs
parents:
diff changeset
   836
                command ok" )
hgs
parents:
diff changeset
   837
            }
hgs
parents:
diff changeset
   838
        }
hgs
parents:
diff changeset
   839
    else
hgs
parents:
diff changeset
   840
        {
hgs
parents:
diff changeset
   841
        iLaunchBrowserRsp.iGeneralResult  = RSat::KLaunchBrowserError;
hgs
parents:
diff changeset
   842
        iLaunchBrowserRsp.iInfoType       = RSat::KMeProblem;
hgs
parents:
diff changeset
   843
        iLaunchBrowserRsp.iAdditionalInfo.Append( 
hgs
parents:
diff changeset
   844
                RSat::KBrowserUnavailable );
hgs
parents:
diff changeset
   845
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   846
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL error: %i", 
hgs
parents:
diff changeset
   847
        err )
hgs
parents:
diff changeset
   848
        }
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
    LOG( SIMPLE,
hgs
parents:
diff changeset
   851
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL exiting" )
hgs
parents:
diff changeset
   852
    }
hgs
parents:
diff changeset
   853
hgs
parents:
diff changeset
   854
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   855
// Starts timer. Function returns as the given time has elapsed or
hgs
parents:
diff changeset
   856
// timer is cancelled.
hgs
parents:
diff changeset
   857
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   858
void CLaunchBrowserHandler::After(
hgs
parents:
diff changeset
   859
    const TTimeIntervalMicroSeconds32& aDelay,
hgs
parents:
diff changeset
   860
    const TTimeIntervalMicroSeconds32& aInterval )
hgs
parents:
diff changeset
   861
    {
hgs
parents:
diff changeset
   862
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::After calling" )
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
    if ( !iAfterWait.IsStarted() )
hgs
parents:
diff changeset
   865
        {
hgs
parents:
diff changeset
   866
        TRAPD( err, iAfterTimer = CPeriodic::NewL( EPriorityStandard ) )
hgs
parents:
diff changeset
   867
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   868
        "LAUNCHBROWSER: CLaunchBrowserHandler::After err: %i", err )
hgs
parents:
diff changeset
   869
        if ( ( KErrNone == err ) && iAfterTimer )
hgs
parents:
diff changeset
   870
            {
hgs
parents:
diff changeset
   871
            iAfterTimer->Start(
hgs
parents:
diff changeset
   872
                aDelay, aInterval, TCallBack( DelayCallBack, this ) );
hgs
parents:
diff changeset
   873
            iAfterWait.Start();
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
            delete iAfterTimer;
hgs
parents:
diff changeset
   876
            iAfterTimer = NULL;
hgs
parents:
diff changeset
   877
            }
hgs
parents:
diff changeset
   878
        }
hgs
parents:
diff changeset
   879
hgs
parents:
diff changeset
   880
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::After exiting" )
hgs
parents:
diff changeset
   881
    }
hgs
parents:
diff changeset
   882
hgs
parents:
diff changeset
   883
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   884
// Timer call back function
hgs
parents:
diff changeset
   885
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   886
TInt CLaunchBrowserHandler::DelayCallBack( TAny* aPtr )
hgs
parents:
diff changeset
   887
    {
hgs
parents:
diff changeset
   888
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   889
    calling" )
hgs
parents:
diff changeset
   890
    CLaunchBrowserHandler* ptrThis =
hgs
parents:
diff changeset
   891
        static_cast<CLaunchBrowserHandler*>( aPtr );
hgs
parents:
diff changeset
   892
hgs
parents:
diff changeset
   893
    if ( ptrThis && ( ptrThis->iAfterWait.IsStarted() ) )
hgs
parents:
diff changeset
   894
        {
hgs
parents:
diff changeset
   895
        LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   896
             stop iAfterWait" )
hgs
parents:
diff changeset
   897
        ptrThis->iAfterWait.AsyncStop();
hgs
parents:
diff changeset
   898
        }
hgs
parents:
diff changeset
   899
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   900
    exiting" )
hgs
parents:
diff changeset
   901
    return ( EFalse );
hgs
parents:
diff changeset
   902
    }
hgs
parents:
diff changeset
   903
hgs
parents:
diff changeset
   904
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   905
// Create a new access point using the Access Point Engine.
hgs
parents:
diff changeset
   906
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   907
//
hgs
parents:
diff changeset
   908
TUint32 CLaunchBrowserHandler::CreateAccessPointL( 
hgs
parents:
diff changeset
   909
        const TDesC16& aApName,
hgs
parents:
diff changeset
   910
        const TDesC16& aProxyServerAddr,
hgs
parents:
diff changeset
   911
        const TUint32 aProxyPortNumber,
hgs
parents:
diff changeset
   912
        const RPacketContext::TProtocolType& aIPvType )
hgs
parents:
diff changeset
   913
    {
hgs
parents:
diff changeset
   914
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   915
         "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL calling" )
hgs
parents:
diff changeset
   916
hgs
parents:
diff changeset
   917
    // Connection method interface.
hgs
parents:
diff changeset
   918
    RCmConnectionMethod cm;
hgs
parents:
diff changeset
   919
    // Connection method manager interface.
hgs
parents:
diff changeset
   920
    RCmManager cmManager;
hgs
parents:
diff changeset
   921
    // Used to exit connection methods go through loop
hgs
parents:
diff changeset
   922
    TBool exitConnectionMethodsLoop( EFalse );
hgs
parents:
diff changeset
   923
    
hgs
parents:
diff changeset
   924
    cmManager.OpenLC();
hgs
parents:
diff changeset
   925
hgs
parents:
diff changeset
   926
    // Find if the access point with the same name is already exist.
hgs
parents:
diff changeset
   927
    // If such access point exists, delete it and then create a new one.
hgs
parents:
diff changeset
   928
     
hgs
parents:
diff changeset
   929
    // Get the Connection Methods does not belogns to any destination
hgs
parents:
diff changeset
   930
    RArray<TUint32> array = RArray<TUint32>( KSatCMGranularity );
hgs
parents:
diff changeset
   931
    CleanupClosePushL( array );
hgs
parents:
diff changeset
   932
hgs
parents:
diff changeset
   933
    cmManager.ConnectionMethodL( array );
hgs
parents:
diff changeset
   934
hgs
parents:
diff changeset
   935
    // Go through the Connection Method list to find if there is matched one
hgs
parents:
diff changeset
   936
     
hgs
parents:
diff changeset
   937
    for( TInt i = 0; 
hgs
parents:
diff changeset
   938
         ( i < array.Count() ) && !exitConnectionMethodsLoop; ++i)
hgs
parents:
diff changeset
   939
        {
hgs
parents:
diff changeset
   940
        cm = cmManager.ConnectionMethodL( array[i] );
hgs
parents:
diff changeset
   941
        CleanupClosePushL( cm );
hgs
parents:
diff changeset
   942
        
hgs
parents:
diff changeset
   943
        // query the access point name
hgs
parents:
diff changeset
   944
        HBufC * pa = NULL;
hgs
parents:
diff changeset
   945
        pa = cm.GetStringAttributeL( CMManager::ECmName );
hgs
parents:
diff changeset
   946
        CleanupStack::PushL(pa);
hgs
parents:
diff changeset
   947
        
hgs
parents:
diff changeset
   948
        if ( *pa == aApName )
hgs
parents:
diff changeset
   949
            {
hgs
parents:
diff changeset
   950
            // Find the matched connection method
hgs
parents:
diff changeset
   951
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
   952
                 CreateAccessPointL, find the existing ap" )
hgs
parents:
diff changeset
   953
            cm.DeleteL();
hgs
parents:
diff changeset
   954
            exitConnectionMethodsLoop = ETrue;
hgs
parents:
diff changeset
   955
            }
hgs
parents:
diff changeset
   956
        CleanupStack::PopAndDestroy( pa );
hgs
parents:
diff changeset
   957
        CleanupStack::PopAndDestroy( &cm ); 
hgs
parents:
diff changeset
   958
        } 
hgs
parents:
diff changeset
   959
    CleanupStack::PopAndDestroy( &array );
hgs
parents:
diff changeset
   960
hgs
parents:
diff changeset
   961
    // Create a connection method without destination.
hgs
parents:
diff changeset
   962
    cm = cmManager.CreateConnectionMethodL( KUidPacketDataBearerType );
hgs
parents:
diff changeset
   963
    CleanupClosePushL( cm );
hgs
parents:
diff changeset
   964
    
hgs
parents:
diff changeset
   965
    // Fulfill connection method params with default setting from OCC.
hgs
parents:
diff changeset
   966
    // We use trap to continue following operations even if leaving from 
hgs
parents:
diff changeset
   967
    // FulfillConnnectionMethodL.
hgs
parents:
diff changeset
   968
    TRAPD( errCode, FulfillConnnectionMethodL( cmManager, cm ) );
51
hgs
parents: 33
diff changeset
   969
    if ( errCode != KErrNone )
hgs
parents: 33
diff changeset
   970
        {
hgs
parents: 33
diff changeset
   971
        LOG3( SIMPLE, "SATENGINE: CLaunchBrowserHandler::CreateAccessPointL"
hgs
parents: 33
diff changeset
   972
            " error %d at line %d", errCode, __LINE__ )
hgs
parents: 33
diff changeset
   973
        }
33
hgs
parents:
diff changeset
   974
    // Set attributes of the connection method.
hgs
parents:
diff changeset
   975
    cm.SetStringAttributeL( CMManager::ECmName, aApName );
hgs
parents:
diff changeset
   976
    cm.SetIntAttributeL( CMManager::EPacketDataPDPType, aIPvType );
hgs
parents:
diff changeset
   977
    cm.SetStringAttributeL( CMManager::ECmWapIPGatewayAddress, 
hgs
parents:
diff changeset
   978
                            TPtrC( aProxyServerAddr ) );
hgs
parents:
diff changeset
   979
    cm.SetStringAttributeL( CMManager::ECmProxyServerName, 
hgs
parents:
diff changeset
   980
                            TPtrC( aProxyServerAddr ) );
hgs
parents:
diff changeset
   981
    cm.SetIntAttributeL( CMManager::ECmProxyPortNumber, aProxyPortNumber );
hgs
parents:
diff changeset
   982
        
hgs
parents:
diff changeset
   983
    // Update the access point ID for use later.
hgs
parents:
diff changeset
   984
    cm.UpdateL();
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
    TUint32 apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
   987
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
   988
          "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL apId=%d",
hgs
parents:
diff changeset
   989
          apId )
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
   992
    CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
   993
    
hgs
parents:
diff changeset
   994
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   995
         "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL exiting" )
hgs
parents:
diff changeset
   996
    
hgs
parents:
diff changeset
   997
    return apId;
hgs
parents:
diff changeset
   998
    }
hgs
parents:
diff changeset
   999
hgs
parents:
diff changeset
  1000
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1001
// Get a AP from the Connection Method Manager.
hgs
parents:
diff changeset
  1002
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1003
TUint32 CLaunchBrowserHandler::GetAccessPointByGatewayAddressL()
hgs
parents:
diff changeset
  1004
    {
hgs
parents:
diff changeset
  1005
    LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1006
        CLaunchBrowserHandler::GetAccessPointByGatewayAddressL calling" )
hgs
parents:
diff changeset
  1007
    // Access Point ID.
hgs
parents:
diff changeset
  1008
    TUint32 apId( 0 ); 
hgs
parents:
diff changeset
  1009
    // Unknown IP address type.
hgs
parents:
diff changeset
  1010
    TInt ipvType( 0 );
hgs
parents:
diff changeset
  1011
    // Get the gateway address.
hgs
parents:
diff changeset
  1012
    TPtrC gatewayAddrPtr( iLaunchBrowserData.iText );
hgs
parents:
diff changeset
  1013
    // Get the bearer list.
hgs
parents:
diff changeset
  1014
    TPtrC8 bearerListPtr( iLaunchBrowserData.iBearerList ); 
hgs
parents:
diff changeset
  1015
hgs
parents:
diff changeset
  1016
    // Proxy address.
hgs
parents:
diff changeset
  1017
    HBufC* proxyAddress = NULL;
hgs
parents:
diff changeset
  1018
    // Proxy port number.
hgs
parents:
diff changeset
  1019
    TUint32 proxyPortNumber( 0 );
hgs
parents:
diff changeset
  1020
    HBufC* pa = NULL;
hgs
parents:
diff changeset
  1021
    TUint32 pn( 0 );
hgs
parents:
diff changeset
  1022
hgs
parents:
diff changeset
  1023
    // Used to exit the connection method go through loop
hgs
parents:
diff changeset
  1024
    TBool exitConnectionMethodsLoop( EFalse );
hgs
parents:
diff changeset
  1025
    
hgs
parents:
diff changeset
  1026
    // SAT access point name.
hgs
parents:
diff changeset
  1027
    TPtrC satAPN( KNullDesC );
hgs
parents:
diff changeset
  1028
    
hgs
parents:
diff changeset
  1029
    // Use SAT application name as SAT APN.
hgs
parents:
diff changeset
  1030
    satAPN.Set( iUtils->SatAppName() );
hgs
parents:
diff changeset
  1031
    // Use default SAT APN if SAT application name is not available.
hgs
parents:
diff changeset
  1032
    if ( satAPN == KNullDesC )
hgs
parents:
diff changeset
  1033
        {
hgs
parents:
diff changeset
  1034
        LOG( SIMPLE, 
hgs
parents:
diff changeset
  1035
             "CLaunchBrowserHandler::GetAccessPointByGatewayAddressL\
hgs
parents:
diff changeset
  1036
             satAPN == KNullDesC" )
hgs
parents:
diff changeset
  1037
        satAPN.Set( KSatAccessPointName );
hgs
parents:
diff changeset
  1038
        }
hgs
parents:
diff changeset
  1039
        
hgs
parents:
diff changeset
  1040
    // Get the proxy address and port number
hgs
parents:
diff changeset
  1041
    proxyAddress = HBufC::NewLC( gatewayAddrPtr.Length() );
hgs
parents:
diff changeset
  1042
    TPtr proxyAddrPtr( proxyAddress->Des() );
hgs
parents:
diff changeset
  1043
    SeparatePortNumberFromAddress( gatewayAddrPtr, proxyAddrPtr, 
hgs
parents:
diff changeset
  1044
        proxyPortNumber );
hgs
parents:
diff changeset
  1045
    proxyAddrPtr.TrimAll();
hgs
parents:
diff changeset
  1046
    
hgs
parents:
diff changeset
  1047
    // Check the launch browser package for gateway setting.
hgs
parents:
diff changeset
  1048
    ipvType = ValidateGatewayAddress( proxyAddrPtr );
hgs
parents:
diff changeset
  1049
    
hgs
parents:
diff changeset
  1050
    if ( RPacketContext::EPdpTypeIPv4 == ipvType || \
hgs
parents:
diff changeset
  1051
         RPacketContext::EPdpTypeIPv6 == ipvType )
hgs
parents:
diff changeset
  1052
        {
hgs
parents:
diff changeset
  1053
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1054
              "CLaunchBrowserHandler::GetAccessPointByGatewayAddressL \
hgs
parents:
diff changeset
  1055
              gatewayAddrPtr.Length(): %d", gatewayAddrPtr.Length() )
hgs
parents:
diff changeset
  1056
        // Check the launch browser package for bearer setting if the gateway
hgs
parents:
diff changeset
  1057
        // address is valid.
hgs
parents:
diff changeset
  1058
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1059
              "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
  1060
              GetAccessPointByGatewayAddressL, IPvType is %d",
hgs
parents:
diff changeset
  1061
              ipvType)
hgs
parents:
diff changeset
  1062
        if ( gatewayAddrPtr.Length() )
hgs
parents:
diff changeset
  1063
            {
hgs
parents:
diff changeset
  1064
            // The bearer is GPRS.
hgs
parents:
diff changeset
  1065
            if ( bearerListPtr != KNullDesC8 && bearerListPtr.Length() > 0 
hgs
parents:
diff changeset
  1066
                    && RSat::KGprsBearer == bearerListPtr[0] )
hgs
parents:
diff changeset
  1067
                {
hgs
parents:
diff changeset
  1068
                
hgs
parents:
diff changeset
  1069
                // Go through the candidate connection methods to find 
hgs
parents:
diff changeset
  1070
                // the one matched the gateway address. If a matched one 
hgs
parents:
diff changeset
  1071
                // is found,using it as the access point for SIM service, 
hgs
parents:
diff changeset
  1072
                // else a new one is created.      
hgs
parents:
diff changeset
  1073
                RCmManager cmManager;
hgs
parents:
diff changeset
  1074
                cmManager.OpenLC();
hgs
parents:
diff changeset
  1075
hgs
parents:
diff changeset
  1076
                // Get the Connection Methods does not belongs to 
hgs
parents:
diff changeset
  1077
                // any destination
hgs
parents:
diff changeset
  1078
                RArray<TUint32> array = RArray<TUint32>( 
hgs
parents:
diff changeset
  1079
                                        KSatCMGranularity );
hgs
parents:
diff changeset
  1080
                CleanupClosePushL( array );
hgs
parents:
diff changeset
  1081
hgs
parents:
diff changeset
  1082
                cmManager.ConnectionMethodL( array );
hgs
parents:
diff changeset
  1083
hgs
parents:
diff changeset
  1084
                // Go through the Connection Method list to find 
hgs
parents:
diff changeset
  1085
                // if there is matched one
hgs
parents:
diff changeset
  1086
                 
hgs
parents:
diff changeset
  1087
                for( TInt i = 0; 
hgs
parents:
diff changeset
  1088
                     ( i < array.Count() ) && !exitConnectionMethodsLoop; 
hgs
parents:
diff changeset
  1089
                     ++i )
hgs
parents:
diff changeset
  1090
                    {
hgs
parents:
diff changeset
  1091
                    RCmConnectionMethod cm = cmManager.ConnectionMethodL(
hgs
parents:
diff changeset
  1092
                                                          array[i] );
hgs
parents:
diff changeset
  1093
                    CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1094
                    
hgs
parents:
diff changeset
  1095
                    // query the Gateway proxy address 
hgs
parents:
diff changeset
  1096
                    // of the Connection Method
hgs
parents:
diff changeset
  1097
                    pa = cm.GetStringAttributeL( 
hgs
parents:
diff changeset
  1098
                         CMManager::ECmWapIPGatewayAddress );
hgs
parents:
diff changeset
  1099
                    CleanupStack::PushL(pa);
hgs
parents:
diff changeset
  1100
                    
hgs
parents:
diff changeset
  1101
                    // query the Gateway proxy port number of the Connection 
hgs
parents:
diff changeset
  1102
                    // Method
hgs
parents:
diff changeset
  1103
                    pn = cm.GetIntAttributeL( 
hgs
parents:
diff changeset
  1104
                            CMManager::ECmProxyPortNumber );
hgs
parents:
diff changeset
  1105
                    
hgs
parents:
diff changeset
  1106
                    if (( pn == proxyPortNumber ) && 
hgs
parents:
diff changeset
  1107
                        ( *pa == *proxyAddress ))
hgs
parents:
diff changeset
  1108
                        {
hgs
parents:
diff changeset
  1109
                        // Find the matched connection method
hgs
parents:
diff changeset
  1110
                        apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
  1111
                        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1112
                              "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1113
                              GetAccessPointByGatewayAddressL, apId=%d",
hgs
parents:
diff changeset
  1114
                              apId )
hgs
parents:
diff changeset
  1115
                        exitConnectionMethodsLoop = ETrue;
hgs
parents:
diff changeset
  1116
                        }
hgs
parents:
diff changeset
  1117
                        
hgs
parents:
diff changeset
  1118
                    CleanupStack::PopAndDestroy( pa );
hgs
parents:
diff changeset
  1119
                    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1120
                    }
hgs
parents:
diff changeset
  1121
            
hgs
parents:
diff changeset
  1122
                CleanupStack::PopAndDestroy( &array );
hgs
parents:
diff changeset
  1123
                CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1124
                
hgs
parents:
diff changeset
  1125
                LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
  1126
                      GetAccessPointByGatewayAddressL apId=%d", apId )
hgs
parents:
diff changeset
  1127
                           
hgs
parents:
diff changeset
  1128
                if ( !apId )
hgs
parents:
diff changeset
  1129
                    {
hgs
parents:
diff changeset
  1130
                    // Create a new AP if there is not a matched one.
hgs
parents:
diff changeset
  1131
                    apId = CreateAccessPointL( 
hgs
parents:
diff changeset
  1132
                            satAPN,
hgs
parents:
diff changeset
  1133
                            proxyAddrPtr,
hgs
parents:
diff changeset
  1134
                            proxyPortNumber,
hgs
parents:
diff changeset
  1135
                            static_cast<RPacketContext::TProtocolType>(
hgs
parents:
diff changeset
  1136
                                                              ipvType ) );
hgs
parents:
diff changeset
  1137
                    }
hgs
parents:
diff changeset
  1138
                }
hgs
parents:
diff changeset
  1139
            }
hgs
parents:
diff changeset
  1140
        }
hgs
parents:
diff changeset
  1141
    CleanupStack::PopAndDestroy( proxyAddress );
hgs
parents:
diff changeset
  1142
    
hgs
parents:
diff changeset
  1143
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1144
          "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1145
          GetAccessPointByGatewayAddressL exiting, apId=%d", apId )
hgs
parents:
diff changeset
  1146
    
hgs
parents:
diff changeset
  1147
    // return the AP.
hgs
parents:
diff changeset
  1148
    return apId;
hgs
parents:
diff changeset
  1149
    }
hgs
parents:
diff changeset
  1150
hgs
parents:
diff changeset
  1151
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1152
// Get an Access Point by default.
hgs
parents:
diff changeset
  1153
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1154
TUint32 CLaunchBrowserHandler::GetAccessPointByDefaultL()
hgs
parents:
diff changeset
  1155
    {
hgs
parents:
diff changeset
  1156
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1157
         GetAccessPointByDefaultL calling" )
hgs
parents:
diff changeset
  1158
         
hgs
parents:
diff changeset
  1159
    TUint32 apId ( KErrNone );
hgs
parents:
diff changeset
  1160
    RCmManager cmManager;
hgs
parents:
diff changeset
  1161
    cmManager.OpenLC();
hgs
parents:
diff changeset
  1162
    RCmConnectionMethod cm;
hgs
parents:
diff changeset
  1163
    CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1164
    
hgs
parents:
diff changeset
  1165
    // Get a default connection method
hgs
parents:
diff changeset
  1166
    TInt ret( KErrNotFound );
hgs
parents:
diff changeset
  1167
    GetDefConnMethodL( cmManager, cm, ret );
hgs
parents:
diff changeset
  1168
    if ( !ret )
hgs
parents:
diff changeset
  1169
        {
hgs
parents:
diff changeset
  1170
        LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1171
             GetAccessPointByDefaultL default connection found" )        
hgs
parents:
diff changeset
  1172
        apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
  1173
        }
hgs
parents:
diff changeset
  1174
    
hgs
parents:
diff changeset
  1175
    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1176
    CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1177
    
hgs
parents:
diff changeset
  1178
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1179
          GetAccessPointByDefaultL exiting, apId=%d", apId )
hgs
parents:
diff changeset
  1180
    
hgs
parents:
diff changeset
  1181
    return apId;
hgs
parents:
diff changeset
  1182
    }
hgs
parents:
diff changeset
  1183
hgs
parents:
diff changeset
  1184
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1185
// Get default URL by access point
hgs
parents:
diff changeset
  1186
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1187
HBufC* CLaunchBrowserHandler::GetDefaultUrlByAccessPointLC( TUint32 aApId )
hgs
parents:
diff changeset
  1188
    {
hgs
parents:
diff changeset
  1189
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1190
         GetDefaultUrlByAccessPointLC calling, aApId=%d", aApId )
hgs
parents:
diff changeset
  1191
    
hgs
parents:
diff changeset
  1192
    HBufC* url = NULL;
hgs
parents:
diff changeset
  1193
    if ( aApId > 0 )
hgs
parents:
diff changeset
  1194
        {
hgs
parents:
diff changeset
  1195
        // Create CMManager session
hgs
parents:
diff changeset
  1196
        RCmManager cmManager;
hgs
parents:
diff changeset
  1197
        cmManager.OpenLC();
hgs
parents:
diff changeset
  1198
        
hgs
parents:
diff changeset
  1199
        // get the connection method by apId
hgs
parents:
diff changeset
  1200
        RCmConnectionMethod cm = cmManager.ConnectionMethodL( aApId );
hgs
parents:
diff changeset
  1201
        CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1202
        
hgs
parents:
diff changeset
  1203
        // Get the default URL from default accesspoint
hgs
parents:
diff changeset
  1204
        // If the access point doesn't include the default URL,
hgs
parents:
diff changeset
  1205
        // the empty string is returned.
hgs
parents:
diff changeset
  1206
        url = cm.GetStringAttributeL( CMManager::ECmStartPage );
hgs
parents:
diff changeset
  1207
        
hgs
parents:
diff changeset
  1208
        CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1209
        CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1210
hgs
parents:
diff changeset
  1211
        CleanupStack::PushL( url );  
hgs
parents:
diff changeset
  1212
        }
hgs
parents:
diff changeset
  1213
    
hgs
parents:
diff changeset
  1214
    if ( !url )
hgs
parents:
diff changeset
  1215
        {
hgs
parents:
diff changeset
  1216
        url = KNullDesC().AllocLC();
hgs
parents:
diff changeset
  1217
        }
hgs
parents:
diff changeset
  1218
    
hgs
parents:
diff changeset
  1219
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1220
          GetDefaultUrlByAccessPointLC exiting, url=%s", url )
hgs
parents:
diff changeset
  1221
    return url;
hgs
parents:
diff changeset
  1222
    }
hgs
parents:
diff changeset
  1223
hgs
parents:
diff changeset
  1224
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1225
// Convert a descriptor into a integer.
hgs
parents:
diff changeset
  1226
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1227
TInt CLaunchBrowserHandler::ConvertDesToInt( const TDesC16& aDes )
hgs
parents:
diff changeset
  1228
    {
hgs
parents:
diff changeset
  1229
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1230
          CLaunchBrowserHandler::ConvertDesToInt calling,length of aDes:%d",
hgs
parents:
diff changeset
  1231
          aDes.Length() )
hgs
parents:
diff changeset
  1232
hgs
parents:
diff changeset
  1233
    TLex converter;
hgs
parents:
diff changeset
  1234
    TInt intValue( KErrNotFound );
hgs
parents:
diff changeset
  1235
    TBool digital( ETrue );
hgs
parents:
diff changeset
  1236
hgs
parents:
diff changeset
  1237
    if ( aDes != KNullDesC && aDes.Length() > 0 )
hgs
parents:
diff changeset
  1238
        {
hgs
parents:
diff changeset
  1239
        // The literal value of every element in the descriptor 
hgs
parents:
diff changeset
  1240
        // should be numerical.
hgs
parents:
diff changeset
  1241
        for ( TInt i = 0; i < aDes.Length() && digital; i++ )
hgs
parents:
diff changeset
  1242
            {
hgs
parents:
diff changeset
  1243
            TChar ch( aDes[i] );
hgs
parents:
diff changeset
  1244
            
hgs
parents:
diff changeset
  1245
            if ( !ch.IsDigit() )
hgs
parents:
diff changeset
  1246
                {
hgs
parents:
diff changeset
  1247
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1248
                CLaunchBrowserHandler::ConvertDesToInt not digit" )
hgs
parents:
diff changeset
  1249
                digital = EFalse;
hgs
parents:
diff changeset
  1250
                }
hgs
parents:
diff changeset
  1251
            }
hgs
parents:
diff changeset
  1252
            
hgs
parents:
diff changeset
  1253
        if ( digital )
hgs
parents:
diff changeset
  1254
            {
hgs
parents:
diff changeset
  1255
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1256
            CLaunchBrowserHandler::ConvertDesToInt digit" )
hgs
parents:
diff changeset
  1257
            // Converting.
hgs
parents:
diff changeset
  1258
            converter.Assign( aDes );
hgs
parents:
diff changeset
  1259
            converter.Val( intValue );
hgs
parents:
diff changeset
  1260
            }
hgs
parents:
diff changeset
  1261
        }
hgs
parents:
diff changeset
  1262
hgs
parents:
diff changeset
  1263
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1264
          CLaunchBrowserHandler::ConvertDesToInt exiting,intValue:%d", 
hgs
parents:
diff changeset
  1265
          intValue )
hgs
parents:
diff changeset
  1266
hgs
parents:
diff changeset
  1267
    return intValue;
hgs
parents:
diff changeset
  1268
    }
hgs
parents:
diff changeset
  1269
hgs
parents:
diff changeset
  1270
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1271
// Check the validity of a descriptor in hex.
hgs
parents:
diff changeset
  1272
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1273
TBool CLaunchBrowserHandler::ValidateHexadecimal( const TDesC16& aHex )
hgs
parents:
diff changeset
  1274
    {
hgs
parents:
diff changeset
  1275
    LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1276
        CLaunchBrowserHandler::ValidateHexadecimal calling" )
hgs
parents:
diff changeset
  1277
hgs
parents:
diff changeset
  1278
    // The hexadecimal descriptor can be null.
hgs
parents:
diff changeset
  1279
    TInt length( aHex.Length() );
hgs
parents:
diff changeset
  1280
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1281
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1282
        CLaunchBrowserHandler::ValidateHexadecimal length:%d", length )
hgs
parents:
diff changeset
  1283
hgs
parents:
diff changeset
  1284
    // Validate characters one by one.
hgs
parents:
diff changeset
  1285
    for ( TInt i = 0; i < length && retVal; i++ )
hgs
parents:
diff changeset
  1286
        {
hgs
parents:
diff changeset
  1287
        TChar ch( aHex[i] );
hgs
parents:
diff changeset
  1288
        
hgs
parents:
diff changeset
  1289
        if ( !ch.IsHexDigit() )
hgs
parents:
diff changeset
  1290
            {
hgs
parents:
diff changeset
  1291
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1292
            CLaunchBrowserHandler::ValidateHexadecimal hex digit,i: %d",
hgs
parents:
diff changeset
  1293
            i )
hgs
parents:
diff changeset
  1294
            retVal = EFalse;
hgs
parents:
diff changeset
  1295
            }
hgs
parents:
diff changeset
  1296
        }
hgs
parents:
diff changeset
  1297
hgs
parents:
diff changeset
  1298
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1299
          CLaunchBrowserHandler::ValidateHexadecimal exiting, retVal:%d",
hgs
parents:
diff changeset
  1300
          retVal )
hgs
parents:
diff changeset
  1301
        
hgs
parents:
diff changeset
  1302
    return retVal;
hgs
parents:
diff changeset
  1303
    }
hgs
parents:
diff changeset
  1304
hgs
parents:
diff changeset
  1305
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1306
// Check the validity of a IPv4 address. For example, 210.13.246.172.
hgs
parents:
diff changeset
  1307
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1308
TBool CLaunchBrowserHandler::ValidateIPv4Address( 
hgs
parents:
diff changeset
  1309
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1310
    {
hgs
parents:
diff changeset
  1311
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1312
    CLaunchBrowserHandler::ValidateIPv4Address calling,aAddress: %s",
hgs
parents:
diff changeset
  1313
    &aAddress )
hgs
parents:
diff changeset
  1314
hgs
parents:
diff changeset
  1315
    // Separate the address to be three segments using dot and validate
hgs
parents:
diff changeset
  1316
    // each segment.
hgs
parents:
diff changeset
  1317
    TPtrC segPtr( aAddress );
hgs
parents:
diff changeset
  1318
    TBuf<KSatMaxIPv4SegmentLength> segment;
hgs
parents:
diff changeset
  1319
    TInt posInDes( KErrNone );
hgs
parents:
diff changeset
  1320
    TInt posInPtr( KErrNone );
hgs
parents:
diff changeset
  1321
    TInt segCounter( KErrNone );
hgs
parents:
diff changeset
  1322
    TBool first( ETrue );
hgs
parents:
diff changeset
  1323
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1324
    // Segment value in integer.
hgs
parents:
diff changeset
  1325
    TInt intValue( KErrNone );
hgs
parents:
diff changeset
  1326
        
hgs
parents:
diff changeset
  1327
    // Convert each segment into integer.
hgs
parents:
diff changeset
  1328
    while ( KErrNotFound != ( posInPtr = segPtr.Find( KSatIPv4Delimiter ) )
hgs
parents:
diff changeset
  1329
            && retVal )
hgs
parents:
diff changeset
  1330
        {
hgs
parents:
diff changeset
  1331
        
hgs
parents:
diff changeset
  1332
        if ( KSatMaxIPv4SegmentLength >= posInPtr && 0 < posInPtr )
hgs
parents:
diff changeset
  1333
            {
hgs
parents:
diff changeset
  1334
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1335
            CLaunchBrowserHandler::ValidateIPv4Address posInPtr valid" )
hgs
parents:
diff changeset
  1336
            segCounter++;
hgs
parents:
diff changeset
  1337
            posInDes += posInPtr;
hgs
parents:
diff changeset
  1338
            segment = segPtr.Mid( 0, posInPtr );
hgs
parents:
diff changeset
  1339
            
hgs
parents:
diff changeset
  1340
            // The first integer should be > 0 and < 255, others should be 
hgs
parents:
diff changeset
  1341
            // >=0 and < 255.
hgs
parents:
diff changeset
  1342
            intValue = ConvertDesToInt( segment );
hgs
parents:
diff changeset
  1343
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1344
            CLaunchBrowserHandler::ValidateIPv4Address first:%d",first )
hgs
parents:
diff changeset
  1345
            if ( first )
hgs
parents:
diff changeset
  1346
                {
hgs
parents:
diff changeset
  1347
                first = EFalse;
hgs
parents:
diff changeset
  1348
                
hgs
parents:
diff changeset
  1349
                if ( !( KSatIPv4Network < intValue && 
hgs
parents:
diff changeset
  1350
                        KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1351
                    {
hgs
parents:
diff changeset
  1352
                    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1353
                         ValidateIPv4Address intValue valid" )
hgs
parents:
diff changeset
  1354
                    retVal = EFalse;
hgs
parents:
diff changeset
  1355
                    }
hgs
parents:
diff changeset
  1356
                }
hgs
parents:
diff changeset
  1357
            else
hgs
parents:
diff changeset
  1358
                {
hgs
parents:
diff changeset
  1359
                
hgs
parents:
diff changeset
  1360
                if ( !( KSatIPv4Network <= intValue && 
hgs
parents:
diff changeset
  1361
                        KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1362
                    {
hgs
parents:
diff changeset
  1363
                    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1364
                         ValidateIPv4Address intValue range" )
hgs
parents:
diff changeset
  1365
                    retVal = EFalse;
hgs
parents:
diff changeset
  1366
                    }
hgs
parents:
diff changeset
  1367
                }
hgs
parents:
diff changeset
  1368
            // Skip dot.
hgs
parents:
diff changeset
  1369
            posInDes++;
hgs
parents:
diff changeset
  1370
            segPtr.Set( aAddress.Mid( posInDes, 
hgs
parents:
diff changeset
  1371
                aAddress.Length() - posInDes ) );
hgs
parents:
diff changeset
  1372
            }
hgs
parents:
diff changeset
  1373
        else
hgs
parents:
diff changeset
  1374
            {
hgs
parents:
diff changeset
  1375
            retVal = EFalse;
hgs
parents:
diff changeset
  1376
            }
hgs
parents:
diff changeset
  1377
        }
hgs
parents:
diff changeset
  1378
    
hgs
parents:
diff changeset
  1379
    // IPv4 address is consist of 4 segment
hgs
parents:
diff changeset
  1380
    if ( KSatMaxIPv4SegmentCounter == segCounter && retVal )
hgs
parents:
diff changeset
  1381
        {
hgs
parents:
diff changeset
  1382
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1383
        CLaunchBrowserHandler::ValidateIPv4Address valid address" )
hgs
parents:
diff changeset
  1384
        // Validate the last segment.
hgs
parents:
diff changeset
  1385
        segment = segPtr;
hgs
parents:
diff changeset
  1386
        
hgs
parents:
diff changeset
  1387
        if ( KSatMaxIPv4SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1388
            {
hgs
parents:
diff changeset
  1389
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1390
            CLaunchBrowserHandler::ValidateIPv4Address address invalid" )
hgs
parents:
diff changeset
  1391
            retVal = EFalse;
hgs
parents:
diff changeset
  1392
            }
hgs
parents:
diff changeset
  1393
            
hgs
parents:
diff changeset
  1394
        intValue = ConvertDesToInt( segment );
hgs
parents:
diff changeset
  1395
        
hgs
parents:
diff changeset
  1396
        if ( !( KSatIPv4Network < intValue && 
hgs
parents:
diff changeset
  1397
                KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1398
            {
hgs
parents:
diff changeset
  1399
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1400
            CLaunchBrowserHandler::ValidateIPv4Address intValue range" )
hgs
parents:
diff changeset
  1401
            retVal = EFalse;
hgs
parents:
diff changeset
  1402
            }
hgs
parents:
diff changeset
  1403
        }
hgs
parents:
diff changeset
  1404
    else
hgs
parents:
diff changeset
  1405
        {
hgs
parents:
diff changeset
  1406
        retVal = EFalse;
hgs
parents:
diff changeset
  1407
        }
hgs
parents:
diff changeset
  1408
        
hgs
parents:
diff changeset
  1409
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1410
        CLaunchBrowserHandler::ValidateIPv4Address exiting,retVal:%d",
hgs
parents:
diff changeset
  1411
        retVal )
hgs
parents:
diff changeset
  1412
hgs
parents:
diff changeset
  1413
    return retVal;
hgs
parents:
diff changeset
  1414
    }
hgs
parents:
diff changeset
  1415
hgs
parents:
diff changeset
  1416
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1417
// Check the validity of a IPv6 address. For example,
hgs
parents:
diff changeset
  1418
// 3ffe:ffff:101::230:6eff:fe04:d9ff.
hgs
parents:
diff changeset
  1419
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1420
TBool CLaunchBrowserHandler::ValidateIPv6Address( 
hgs
parents:
diff changeset
  1421
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1422
    {
hgs
parents:
diff changeset
  1423
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1424
    CLaunchBrowserHandler::ValidateIPv6Address calling,aAddress: %s",
hgs
parents:
diff changeset
  1425
    &aAddress )
hgs
parents:
diff changeset
  1426
hgs
parents:
diff changeset
  1427
    // Separate the address to be eight segments using colon and validate
hgs
parents:
diff changeset
  1428
    // each segment.
hgs
parents:
diff changeset
  1429
    TPtrC segPtr( aAddress );
hgs
parents:
diff changeset
  1430
    TBuf<KSatMaxIPv6SegmentLength> segment;
hgs
parents:
diff changeset
  1431
    TInt posInDes( KErrNone );
hgs
parents:
diff changeset
  1432
    TInt posInPtr( KErrNone );
hgs
parents:
diff changeset
  1433
    TInt segCounter( KErrNone );
hgs
parents:
diff changeset
  1434
    TBool first( ETrue );
hgs
parents:
diff changeset
  1435
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1436
    
hgs
parents:
diff changeset
  1437
    while ( KErrNotFound != ( posInPtr = segPtr.Find( KSatIPv6Delimiter ) )
hgs
parents:
diff changeset
  1438
            && retVal )
hgs
parents:
diff changeset
  1439
        {
hgs
parents:
diff changeset
  1440
        
hgs
parents:
diff changeset
  1441
        if ( KSatMaxIPv6SegmentLength >= posInPtr && 0 <= posInPtr )
hgs
parents:
diff changeset
  1442
            {
hgs
parents:
diff changeset
  1443
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1444
            CLaunchBrowserHandler::ValidateIPv6Address posInPtr valid" )
hgs
parents:
diff changeset
  1445
            segCounter++;
hgs
parents:
diff changeset
  1446
            posInDes += posInPtr;
hgs
parents:
diff changeset
  1447
            segment = segPtr.Mid( 0, posInPtr );
hgs
parents:
diff changeset
  1448
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1449
            CLaunchBrowserHandler::ValidateIPv6Address first:%d",first )
hgs
parents:
diff changeset
  1450
            if ( first )
hgs
parents:
diff changeset
  1451
                {
hgs
parents:
diff changeset
  1452
                first = EFalse;
hgs
parents:
diff changeset
  1453
                
hgs
parents:
diff changeset
  1454
                if ( 0 >= segment.Length() )
hgs
parents:
diff changeset
  1455
                    {
hgs
parents:
diff changeset
  1456
                    retVal = EFalse;
hgs
parents:
diff changeset
  1457
                    }
hgs
parents:
diff changeset
  1458
                }
hgs
parents:
diff changeset
  1459
                
hgs
parents:
diff changeset
  1460
            if ( KSatMaxIPv6SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1461
                {
hgs
parents:
diff changeset
  1462
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1463
                CLaunchBrowserHandler::ValidateIPv6Address address invalid" )
hgs
parents:
diff changeset
  1464
                retVal = EFalse;
hgs
parents:
diff changeset
  1465
                }
hgs
parents:
diff changeset
  1466
                
hgs
parents:
diff changeset
  1467
            if ( !ValidateHexadecimal( segment ) )
hgs
parents:
diff changeset
  1468
                {
hgs
parents:
diff changeset
  1469
                LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1470
                ValidateIPv6Address address invalid hex" )
hgs
parents:
diff changeset
  1471
                retVal = EFalse;
hgs
parents:
diff changeset
  1472
                }
hgs
parents:
diff changeset
  1473
            
hgs
parents:
diff changeset
  1474
            // Skip colon.
hgs
parents:
diff changeset
  1475
            posInDes++; 
hgs
parents:
diff changeset
  1476
            segPtr.Set( aAddress.Mid( posInDes, 
hgs
parents:
diff changeset
  1477
                aAddress.Length() - posInDes ) );
hgs
parents:
diff changeset
  1478
            }
hgs
parents:
diff changeset
  1479
        else 
hgs
parents:
diff changeset
  1480
            {
hgs
parents:
diff changeset
  1481
            retVal = EFalse;
hgs
parents:
diff changeset
  1482
            }
hgs
parents:
diff changeset
  1483
        }
hgs
parents:
diff changeset
  1484
hgs
parents:
diff changeset
  1485
    // IPv6 address is consist of 8 segment
hgs
parents:
diff changeset
  1486
    if ( KSatMaxIPv6SegmentCounter == segCounter && retVal )
hgs
parents:
diff changeset
  1487
        {
hgs
parents:
diff changeset
  1488
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1489
        CLaunchBrowserHandler::ValidateIPv6Address valid address" )
hgs
parents:
diff changeset
  1490
        // Validate the last segment.
hgs
parents:
diff changeset
  1491
        segment = segPtr;
hgs
parents:
diff changeset
  1492
        
hgs
parents:
diff changeset
  1493
        if ( KSatMaxIPv6SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1494
            {
hgs
parents:
diff changeset
  1495
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1496
            CLaunchBrowserHandler::ValidateIPv6Address address invalid" )
hgs
parents:
diff changeset
  1497
            retVal = EFalse;
hgs
parents:
diff changeset
  1498
            }
hgs
parents:
diff changeset
  1499
            
hgs
parents:
diff changeset
  1500
        if ( !ValidateHexadecimal( segment ) )
hgs
parents:
diff changeset
  1501
            {
hgs
parents:
diff changeset
  1502
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1503
            ValidateIPv6Address address invalid hex" )
hgs
parents:
diff changeset
  1504
            retVal = EFalse;
hgs
parents:
diff changeset
  1505
            }
hgs
parents:
diff changeset
  1506
        }
hgs
parents:
diff changeset
  1507
    else
hgs
parents:
diff changeset
  1508
        {
hgs
parents:
diff changeset
  1509
        retVal = EFalse;
hgs
parents:
diff changeset
  1510
        }
hgs
parents:
diff changeset
  1511
    
hgs
parents:
diff changeset
  1512
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1513
          CLaunchBrowserHandler::ValidateIPv6Address exiting,retVal:%d", 
hgs
parents:
diff changeset
  1514
          retVal )
hgs
parents:
diff changeset
  1515
hgs
parents:
diff changeset
  1516
    return retVal;
hgs
parents:
diff changeset
  1517
    }
hgs
parents:
diff changeset
  1518
    
hgs
parents:
diff changeset
  1519
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1520
// Check the validity of a gateway IP address. Either it is IPv4 or IPv6. 
hgs
parents:
diff changeset
  1521
// For example, 210.13.246.172 or 3ffe:ffff:101::230:6eff:fe04:d9ff.
hgs
parents:
diff changeset
  1522
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1523
TInt CLaunchBrowserHandler::ValidateGatewayAddress( 
hgs
parents:
diff changeset
  1524
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1525
    {
hgs
parents:
diff changeset
  1526
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1527
          CLaunchBrowserHandler::ValidateGatewayAddress calling,length of \
hgs
parents:
diff changeset
  1528
          aAddress: %d", aAddress.Length() )
hgs
parents:
diff changeset
  1529
    
hgs
parents:
diff changeset
  1530
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1531
    CLaunchBrowserHandler::ValidateGatewayAddress aAddress: %s", &aAddress )
hgs
parents:
diff changeset
  1532
    TInt ipvType( KSatInvalidPdpType );
hgs
parents:
diff changeset
  1533
    TInt length( aAddress.Length() );
hgs
parents:
diff changeset
  1534
    
hgs
parents:
diff changeset
  1535
    if ( length )
hgs
parents:
diff changeset
  1536
        {
hgs
parents:
diff changeset
  1537
        // The maximum length of a IP address is less than 39.
hgs
parents:
diff changeset
  1538
        if ( KSatMaxIPv4AddressLength >= length && 
hgs
parents:
diff changeset
  1539
                KSatMinIPv4AddressLength <= length )
hgs
parents:
diff changeset
  1540
            {
hgs
parents:
diff changeset
  1541
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1542
            CLaunchBrowserHandler::ValidateGatewayAddress IPV4 address" )
hgs
parents:
diff changeset
  1543
            // aAddress is a IPv4 address.
hgs
parents:
diff changeset
  1544
            if ( ValidateIPv4Address( aAddress ) )
hgs
parents:
diff changeset
  1545
                {
hgs
parents:
diff changeset
  1546
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1547
                CLaunchBrowserHandler::ValidateGatewayAddress valid IPV4 \
hgs
parents:
diff changeset
  1548
                address" )
hgs
parents:
diff changeset
  1549
                ipvType = RPacketContext::EPdpTypeIPv4;
hgs
parents:
diff changeset
  1550
                }
hgs
parents:
diff changeset
  1551
            }
hgs
parents:
diff changeset
  1552
        else if ( KSatMaxIPv6AddressLength >= length && 
hgs
parents:
diff changeset
  1553
                    KSatMinIPv6AddressLength <= length )
hgs
parents:
diff changeset
  1554
            {
hgs
parents:
diff changeset
  1555
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1556
            CLaunchBrowserHandler::ValidateGatewayAddress IPV6 address" )
hgs
parents:
diff changeset
  1557
            // aAddress is a IPv6 address.
hgs
parents:
diff changeset
  1558
            if ( ValidateIPv6Address( aAddress ) )
hgs
parents:
diff changeset
  1559
                {
hgs
parents:
diff changeset
  1560
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1561
                CLaunchBrowserHandler::ValidateGatewayAddress valid IPV6 \
hgs
parents:
diff changeset
  1562
                address" )
hgs
parents:
diff changeset
  1563
                ipvType = RPacketContext::EPdpTypeIPv6;
hgs
parents:
diff changeset
  1564
                }
hgs
parents:
diff changeset
  1565
            }
hgs
parents:
diff changeset
  1566
        }
hgs
parents:
diff changeset
  1567
    
hgs
parents:
diff changeset
  1568
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1569
        CLaunchBrowserHandler::ValidateGatewayAddress exiting,ipvType:%d",
hgs
parents:
diff changeset
  1570
        ipvType )
hgs
parents:
diff changeset
  1571
hgs
parents:
diff changeset
  1572
    // Returned IP address.
hgs
parents:
diff changeset
  1573
    return ipvType;
hgs
parents:
diff changeset
  1574
    }
hgs
parents:
diff changeset
  1575
hgs
parents:
diff changeset
  1576
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1577
// Separate the port number from a address if it is existing. For example,
hgs
parents:
diff changeset
  1578
// 210.13.246.172:8080.
hgs
parents:
diff changeset
  1579
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1580
void CLaunchBrowserHandler::SeparatePortNumberFromAddress( 
hgs
parents:
diff changeset
  1581
    const TDesC16& aAddress, 
hgs
parents:
diff changeset
  1582
    TDes16& aPureAddr,
hgs
parents:
diff changeset
  1583
    TUint32& aPortNumber )
hgs
parents:
diff changeset
  1584
    {
hgs
parents:
diff changeset
  1585
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1586
    CLaunchBrowserHandler::SeparatePortNumberFromAddress calling,\
hgs
parents:
diff changeset
  1587
    aAddress: %s", &aAddress )
hgs
parents:
diff changeset
  1588
hgs
parents:
diff changeset
  1589
    // The following three variables are used to locate the port number.
hgs
parents:
diff changeset
  1590
    TBool isSeparator( EFalse );
hgs
parents:
diff changeset
  1591
    TBool portNumberBegin( EFalse );
hgs
parents:
diff changeset
  1592
    TBool portNumberEnd( EFalse );
hgs
parents:
diff changeset
  1593
    TBool pureAddrEnd( EFalse );
hgs
parents:
diff changeset
  1594
    // Count delimiters in the address.
hgs
parents:
diff changeset
  1595
    TInt delimiterCounter( 0 );
hgs
parents:
diff changeset
  1596
    // Count symbols in a segment of the address.
hgs
parents:
diff changeset
  1597
    TInt symbolCounter( 0 );
hgs
parents:
diff changeset
  1598
    // Currsent position of the address descriptor.
hgs
parents:
diff changeset
  1599
    TInt curPos( 0 );
hgs
parents:
diff changeset
  1600
    TInt posOffset( 0 );
hgs
parents:
diff changeset
  1601
    // The position of the last valid character.
hgs
parents:
diff changeset
  1602
    TInt rightBound( 0 );
hgs
parents:
diff changeset
  1603
    // Digital port number.
hgs
parents:
diff changeset
  1604
    TUint32 portNumber( KSatLaunchBrowserProxyPortNumber );
hgs
parents:
diff changeset
  1605
    // The descriptor pointer for the address.
hgs
parents:
diff changeset
  1606
    TPtrC addrPtr;
hgs
parents:
diff changeset
  1607
    // The length of the address.
hgs
parents:
diff changeset
  1608
    TInt addrLen( 0 );
hgs
parents:
diff changeset
  1609
    
hgs
parents:
diff changeset
  1610
    // The address is a valid descriptor.
hgs
parents:
diff changeset
  1611
    if ( NULL != &aAddress &&
hgs
parents:
diff changeset
  1612
            KSatMinIPv4AddressLength <= aAddress.Length() )
hgs
parents:
diff changeset
  1613
        {
hgs
parents:
diff changeset
  1614
        addrPtr.Set( aAddress );
hgs
parents:
diff changeset
  1615
        addrLen = aAddress.Length();
hgs
parents:
diff changeset
  1616
        curPos = addrPtr.Find( KSatIPv4Delimiter );
hgs
parents:
diff changeset
  1617
        
hgs
parents:
diff changeset
  1618
        LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1619
        SeparatePortNumberFromAddress curPos: %i", curPos )
hgs
parents:
diff changeset
  1620
        if ( KErrNotFound != curPos )
hgs
parents:
diff changeset
  1621
            {
hgs
parents:
diff changeset
  1622
            // Skip three delimiters in the IPv4 address.
hgs
parents:
diff changeset
  1623
            delimiterCounter++;
hgs
parents:
diff changeset
  1624
     
hgs
parents:
diff changeset
  1625
            while ( KSatMaxIPv4SegmentCounter > delimiterCounter
hgs
parents:
diff changeset
  1626
                        && curPos < addrLen )
hgs
parents:
diff changeset
  1627
                {
hgs
parents:
diff changeset
  1628
                curPos++;
hgs
parents:
diff changeset
  1629
                posOffset = addrPtr.Right( addrLen - curPos ).Find( 
hgs
parents:
diff changeset
  1630
                                KSatIPv4Delimiter );
hgs
parents:
diff changeset
  1631
                LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1632
                SeparatePortNumberFromAddress posOffset: %i", posOffset )
hgs
parents:
diff changeset
  1633
                if ( KErrNotFound != posOffset )
hgs
parents:
diff changeset
  1634
                    {
hgs
parents:
diff changeset
  1635
                    delimiterCounter++;
hgs
parents:
diff changeset
  1636
                    curPos += posOffset;
hgs
parents:
diff changeset
  1637
                    }
hgs
parents:
diff changeset
  1638
                else
hgs
parents:
diff changeset
  1639
                    {
hgs
parents:
diff changeset
  1640
                    delimiterCounter = KSatMaxIPv4SegmentCounter;
hgs
parents:
diff changeset
  1641
                    }
hgs
parents:
diff changeset
  1642
                }
hgs
parents:
diff changeset
  1643
hgs
parents:
diff changeset
  1644
            // Locate the separator between the pure address and 
hgs
parents:
diff changeset
  1645
            // the port number.
hgs
parents:
diff changeset
  1646
            curPos++;
hgs
parents:
diff changeset
  1647
     
hgs
parents:
diff changeset
  1648
            while ( curPos < addrLen 
hgs
parents:
diff changeset
  1649
                &&  KSatMaxIPv4SegmentLength > symbolCounter 
hgs
parents:
diff changeset
  1650
                && !isSeparator )
hgs
parents:
diff changeset
  1651
                {
hgs
parents:
diff changeset
  1652
                TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1653
     
hgs
parents:
diff changeset
  1654
                if ( ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1655
                    {
hgs
parents:
diff changeset
  1656
                    LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1657
                    SeparatePortNumberFromAddress AlphaDigit" )
hgs
parents:
diff changeset
  1658
                    symbolCounter++;
hgs
parents:
diff changeset
  1659
                    }
hgs
parents:
diff changeset
  1660
                else
hgs
parents:
diff changeset
  1661
                    {
hgs
parents:
diff changeset
  1662
                    isSeparator = ETrue;
hgs
parents:
diff changeset
  1663
                    }
hgs
parents:
diff changeset
  1664
hgs
parents:
diff changeset
  1665
                curPos++;
hgs
parents:
diff changeset
  1666
                }
hgs
parents:
diff changeset
  1667
            }
hgs
parents:
diff changeset
  1668
        else
hgs
parents:
diff changeset
  1669
            {
hgs
parents:
diff changeset
  1670
            curPos = addrPtr.Find( KSatIPv6Delimiter );
hgs
parents:
diff changeset
  1671
            LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1672
            SeparatePortNumberFromAddress curPos: %i", curPos )
hgs
parents:
diff changeset
  1673
            if ( KErrNotFound != curPos )
hgs
parents:
diff changeset
  1674
                {
hgs
parents:
diff changeset
  1675
                // Skip seven delimiters in the IPv6 address.
hgs
parents:
diff changeset
  1676
                delimiterCounter++;
hgs
parents:
diff changeset
  1677
     
hgs
parents:
diff changeset
  1678
                while ( KSatMaxIPv6SegmentCounter > delimiterCounter
hgs
parents:
diff changeset
  1679
                            && curPos < addrLen )
hgs
parents:
diff changeset
  1680
                    {
hgs
parents:
diff changeset
  1681
                    curPos++;
hgs
parents:
diff changeset
  1682
                    posOffset = addrPtr.Right( addrLen - curPos ).Find( 
hgs
parents:
diff changeset
  1683
                                    KSatIPv6Delimiter );
hgs
parents:
diff changeset
  1684
                    LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1685
                    SeparatePortNumberFromAddress posOffset: %i", posOffset )
hgs
parents:
diff changeset
  1686
                    if ( KErrNotFound != posOffset )
hgs
parents:
diff changeset
  1687
                        {
hgs
parents:
diff changeset
  1688
                        delimiterCounter++;
hgs
parents:
diff changeset
  1689
                        curPos += posOffset;
hgs
parents:
diff changeset
  1690
                        }
hgs
parents:
diff changeset
  1691
                    }
hgs
parents:
diff changeset
  1692
hgs
parents:
diff changeset
  1693
                // Locate the separator between the pure address and 
hgs
parents:
diff changeset
  1694
                // the port number.
hgs
parents:
diff changeset
  1695
                curPos++;
hgs
parents:
diff changeset
  1696
     
hgs
parents:
diff changeset
  1697
                while ( curPos < addrLen && 
hgs
parents:
diff changeset
  1698
                            KSatMaxIPv6SegmentLength > symbolCounter && 
hgs
parents:
diff changeset
  1699
                            !isSeparator )
hgs
parents:
diff changeset
  1700
                    {
hgs
parents:
diff changeset
  1701
                    TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1702
     
hgs
parents:
diff changeset
  1703
                    if ( ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1704
                        {
hgs
parents:
diff changeset
  1705
                        LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1706
                        SeparatePortNumberFromAddress AlphaDigit" )
hgs
parents:
diff changeset
  1707
                        symbolCounter++;
hgs
parents:
diff changeset
  1708
                        }
hgs
parents:
diff changeset
  1709
                    else
hgs
parents:
diff changeset
  1710
                        {
hgs
parents:
diff changeset
  1711
                        isSeparator = ETrue;
hgs
parents:
diff changeset
  1712
                        }
hgs
parents:
diff changeset
  1713
hgs
parents:
diff changeset
  1714
                    curPos++;
hgs
parents:
diff changeset
  1715
                    }
hgs
parents:
diff changeset
  1716
                }
hgs
parents:
diff changeset
  1717
            }
hgs
parents:
diff changeset
  1718
hgs
parents:
diff changeset
  1719
        // Extract the pure address.
hgs
parents:
diff changeset
  1720
        while ( curPos < addrLen && KSatMinIPv4AddressLength < curPos 
hgs
parents:
diff changeset
  1721
                && !pureAddrEnd )
hgs
parents:
diff changeset
  1722
            {
hgs
parents:
diff changeset
  1723
            TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1724
            
hgs
parents:
diff changeset
  1725
            if ( !ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1726
                {
hgs
parents:
diff changeset
  1727
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1728
                SeparatePortNumberFromAddress not AlphaDigit" )
hgs
parents:
diff changeset
  1729
                curPos--;
hgs
parents:
diff changeset
  1730
                }
hgs
parents:
diff changeset
  1731
            else
hgs
parents:
diff changeset
  1732
                {
hgs
parents:
diff changeset
  1733
                pureAddrEnd = ETrue;
hgs
parents:
diff changeset
  1734
                }
hgs
parents:
diff changeset
  1735
            }
hgs
parents:
diff changeset
  1736
hgs
parents:
diff changeset
  1737
        if ( curPos <= addrLen )
hgs
parents:
diff changeset
  1738
            {
hgs
parents:
diff changeset
  1739
            aPureAddr.Copy( addrPtr.Left( curPos + 1 ) );
hgs
parents:
diff changeset
  1740
            }
hgs
parents:
diff changeset
  1741
hgs
parents:
diff changeset
  1742
        // Extract the port number.
hgs
parents:
diff changeset
  1743
        // Locate the beginning of the port number.
hgs
parents:
diff changeset
  1744
        curPos++;
hgs
parents:
diff changeset
  1745
    
hgs
parents:
diff changeset
  1746
        while ( curPos < addrLen && !portNumberBegin)
hgs
parents:
diff changeset
  1747
            {
hgs
parents:
diff changeset
  1748
            TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1749
hgs
parents:
diff changeset
  1750
            if ( ch.IsDigit() )
hgs
parents:
diff changeset
  1751
                {
hgs
parents:
diff changeset
  1752
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1753
                SeparatePortNumberFromAddress Digit" )
hgs
parents:
diff changeset
  1754
                portNumberBegin = ETrue;
hgs
parents:
diff changeset
  1755
                }
hgs
parents:
diff changeset
  1756
            else
hgs
parents:
diff changeset
  1757
                {
hgs
parents:
diff changeset
  1758
                curPos++;
hgs
parents:
diff changeset
  1759
                }
hgs
parents:
diff changeset
  1760
            }
hgs
parents:
diff changeset
  1761
        
hgs
parents:
diff changeset
  1762
        // Locate the end of the port number.    
hgs
parents:
diff changeset
  1763
        rightBound = addrLen;
hgs
parents:
diff changeset
  1764
        rightBound--;
hgs
parents:
diff changeset
  1765
hgs
parents:
diff changeset
  1766
        while ( rightBound > curPos && !portNumberEnd )
hgs
parents:
diff changeset
  1767
            {
hgs
parents:
diff changeset
  1768
            TChar ch( addrPtr[rightBound] );
hgs
parents:
diff changeset
  1769
hgs
parents:
diff changeset
  1770
            if ( ch.IsDigit() )
hgs
parents:
diff changeset
  1771
                {
hgs
parents:
diff changeset
  1772
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1773
                SeparatePortNumberFromAddress Digit" )
hgs
parents:
diff changeset
  1774
                portNumberEnd = ETrue;
hgs
parents:
diff changeset
  1775
                }
hgs
parents:
diff changeset
  1776
            else 
hgs
parents:
diff changeset
  1777
                {
hgs
parents:
diff changeset
  1778
                rightBound--;
hgs
parents:
diff changeset
  1779
                }
hgs
parents:
diff changeset
  1780
            }
hgs
parents:
diff changeset
  1781
        
hgs
parents:
diff changeset
  1782
        // Convert the port number and validate it.
hgs
parents:
diff changeset
  1783
        // Set the port number to default port number
hgs
parents:
diff changeset
  1784
        aPortNumber = portNumber; 
hgs
parents:
diff changeset
  1785
        if ( curPos < rightBound && rightBound < addrLen )
hgs
parents:
diff changeset
  1786
            {
hgs
parents:
diff changeset
  1787
            portNumber = ConvertDesToInt( 
hgs
parents:
diff changeset
  1788
                addrPtr.Mid( curPos, rightBound - curPos + 1 ) );
hgs
parents:
diff changeset
  1789
hgs
parents:
diff changeset
  1790
            if ( KSatMaxProxyPortNumber > portNumber &&
hgs
parents:
diff changeset
  1791
                    KSatMinProxyPortNumber < portNumber )
hgs
parents:
diff changeset
  1792
                {
hgs
parents:
diff changeset
  1793
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1794
                SeparatePortNumberFromAddress valid portNumber" )
hgs
parents:
diff changeset
  1795
                aPortNumber = portNumber;
hgs
parents:
diff changeset
  1796
                }
hgs
parents:
diff changeset
  1797
            }
hgs
parents:
diff changeset
  1798
        }
hgs
parents:
diff changeset
  1799
        
hgs
parents:
diff changeset
  1800
    LOG( SIMPLE, 
hgs
parents:
diff changeset
  1801
    "LAUNCHBROWSER: CLaunchBrowserHandler::SeparatePortNumberFromAddress \
hgs
parents:
diff changeset
  1802
    exiting" )
hgs
parents:
diff changeset
  1803
    }
hgs
parents:
diff changeset
  1804
hgs
parents:
diff changeset
  1805
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1806
// Fulfill connecion method params with default params.
hgs
parents:
diff changeset
  1807
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1808
void CLaunchBrowserHandler::FulfillConnnectionMethodL( 
hgs
parents:
diff changeset
  1809
    RCmManager& aCmManager,
hgs
parents:
diff changeset
  1810
    RCmConnectionMethod& aCm )
hgs
parents:
diff changeset
  1811
    {
hgs
parents:
diff changeset
  1812
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1813
        FulfillConnnectionMethodL calling" )
hgs
parents:
diff changeset
  1814
    
hgs
parents:
diff changeset
  1815
    // The following 3 lines are used to preset the default parameters
hgs
parents:
diff changeset
  1816
    // to avoid doing nothing for them if leaving.
hgs
parents:
diff changeset
  1817
    aCm.SetStringAttributeL( CMManager::EPacketDataAPName, 
hgs
parents:
diff changeset
  1818
        KSatGprsAccessPointName );
hgs
parents:
diff changeset
  1819
    aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, EFalse );
hgs
parents:
diff changeset
  1820
    aCm.SetBoolAttributeL( CMManager::ECmDisablePlainTextAuth, EFalse );
hgs
parents:
diff changeset
  1821
        
hgs
parents:
diff changeset
  1822
    // Get default access point ID.
hgs
parents:
diff changeset
  1823
    RCmConnectionMethod defCm;
hgs
parents:
diff changeset
  1824
    CleanupClosePushL( defCm );
hgs
parents:
diff changeset
  1825
    
hgs
parents:
diff changeset
  1826
    TInt ret ( KErrNotFound );
hgs
parents:
diff changeset
  1827
    GetDefConnMethodL( aCmManager, defCm, ret );
hgs
parents:
diff changeset
  1828
    
hgs
parents:
diff changeset
  1829
    if ( !ret )
hgs
parents:
diff changeset
  1830
        {
hgs
parents:
diff changeset
  1831
        // Default AP found! Copy parameters from
hgs
parents:
diff changeset
  1832
        // default AP to new created AP.
hgs
parents:
diff changeset
  1833
        
hgs
parents:
diff changeset
  1834
        // Copy AP name.
hgs
parents:
diff changeset
  1835
        HBufC* strValue = defCm.GetStringAttributeL( 
hgs
parents:
diff changeset
  1836
            CMManager::EPacketDataAPName );
hgs
parents:
diff changeset
  1837
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1838
            FulfillConnnectionMethodL AP Name is %s", strValue )
hgs
parents:
diff changeset
  1839
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1840
        aCm.SetStringAttributeL( CMManager::EPacketDataAPName, *strValue );
hgs
parents:
diff changeset
  1841
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1842
        
hgs
parents:
diff changeset
  1843
        // Copy authentic name
hgs
parents:
diff changeset
  1844
        strValue = defCm.GetStringAttributeL( CMManager::ECmIFAuthName );
hgs
parents:
diff changeset
  1845
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1846
            FulfillConnnectionMethodL Auch name is %s", strValue )
hgs
parents:
diff changeset
  1847
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1848
        aCm.SetStringAttributeL( CMManager::ECmIFAuthName, *strValue );
hgs
parents:
diff changeset
  1849
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1850
        
hgs
parents:
diff changeset
  1851
        // Copy authentic pass
hgs
parents:
diff changeset
  1852
        strValue = defCm.GetStringAttributeL( CMManager::ECmIFAuthPass );
hgs
parents:
diff changeset
  1853
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1854
            FulfillConnnectionMethodL Auch pass is %s", strValue )
hgs
parents:
diff changeset
  1855
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1856
        aCm.SetStringAttributeL( CMManager::ECmIFAuthPass, *strValue );
hgs
parents:
diff changeset
  1857
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1858
        
hgs
parents:
diff changeset
  1859
        // Copy default URL
hgs
parents:
diff changeset
  1860
        strValue = defCm.GetStringAttributeL( CMManager::ECmStartPage );
hgs
parents:
diff changeset
  1861
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1862
            FulfillConnnectionMethodL Start page pass is %s", strValue )
hgs
parents:
diff changeset
  1863
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1864
        aCm.SetStringAttributeL( CMManager::ECmStartPage, *strValue );
hgs
parents:
diff changeset
  1865
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1866
        
hgs
parents:
diff changeset
  1867
        // Copy status if prompt for auth
hgs
parents:
diff changeset
  1868
        TBool bValue = defCm.GetBoolAttributeL( 
hgs
parents:
diff changeset
  1869
                CMManager::ECmIFPromptForAuth );
hgs
parents:
diff changeset
  1870
        aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, bValue );
hgs
parents:
diff changeset
  1871
        
hgs
parents:
diff changeset
  1872
        // Copy security status.
hgs
parents:
diff changeset
  1873
        bValue = defCm.GetBoolAttributeL( 
hgs
parents:
diff changeset
  1874
                CMManager::ECmDisablePlainTextAuth );
hgs
parents:
diff changeset
  1875
        aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, bValue );
hgs
parents:
diff changeset
  1876
        }
hgs
parents:
diff changeset
  1877
        
hgs
parents:
diff changeset
  1878
    CleanupStack::PopAndDestroy( &defCm );
hgs
parents:
diff changeset
  1879
    
hgs
parents:
diff changeset
  1880
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1881
        FulfillConnnectionMethodL exiting" )
hgs
parents:
diff changeset
  1882
    }
hgs
parents:
diff changeset
  1883
hgs
parents:
diff changeset
  1884
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1885
// Check the validity of offered bearer type
hgs
parents:
diff changeset
  1886
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1887
void CLaunchBrowserHandler::ValidateBearerTypeL( RCmConnectionMethod& aCm, 
hgs
parents:
diff changeset
  1888
                                                 TInt& aIsValid )
hgs
parents:
diff changeset
  1889
    {
hgs
parents:
diff changeset
  1890
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1891
         ValidateBearerTypeL calling" )
hgs
parents:
diff changeset
  1892
        
hgs
parents:
diff changeset
  1893
    TUint32 bearerType = aCm.GetIntAttributeL( 
hgs
parents:
diff changeset
  1894
        CMManager::ECmBearerType );
hgs
parents:
diff changeset
  1895
    LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1896
        ValidateBearerTypeL bearerType=0x%x", bearerType )
hgs
parents:
diff changeset
  1897
    
hgs
parents:
diff changeset
  1898
    if ( KUidPacketDataBearerType == bearerType )
hgs
parents:
diff changeset
  1899
        {
hgs
parents:
diff changeset
  1900
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1901
            ValidateBearerTypeL bearer type is GPRS" )
hgs
parents:
diff changeset
  1902
        aIsValid = KErrNone;
hgs
parents:
diff changeset
  1903
        }
hgs
parents:
diff changeset
  1904
    
hgs
parents:
diff changeset
  1905
    LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1906
          ValidateBearerTypeL exiting, aIsValid=%d", aIsValid )
hgs
parents:
diff changeset
  1907
    }
hgs
parents:
diff changeset
  1908
hgs
parents:
diff changeset
  1909
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1910
// Get default connection method
hgs
parents:
diff changeset
  1911
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1912
void CLaunchBrowserHandler::GetDefConnMethodL( RCmManager& aCmManager,
hgs
parents:
diff changeset
  1913
                                               RCmConnectionMethod& aDefCm,
hgs
parents:
diff changeset
  1914
                                               TInt& aIsValid )
hgs
parents:
diff changeset
  1915
    {
hgs
parents:
diff changeset
  1916
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1917
         GetDefConnMethodL calling" )   
hgs
parents:
diff changeset
  1918
         
hgs
parents:
diff changeset
  1919
    // Go through the default connection methods to find 
hgs
parents:
diff changeset
  1920
    // the one valid connection method.   
hgs
parents:
diff changeset
  1921
    TCmDefConnValue defConn;
hgs
parents:
diff changeset
  1922
    aCmManager.ReadDefConnL( defConn );
hgs
parents:
diff changeset
  1923
    
hgs
parents:
diff changeset
  1924
    LOG3( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1925
      GetDefConnMethodL DefConn type=%d, id=%d", 
hgs
parents:
diff changeset
  1926
      defConn.iType, defConn.iId )
hgs
parents:
diff changeset
  1927
    
hgs
parents:
diff changeset
  1928
    // Mark aIsFound as KErrNone if there is one valid 
hgs
parents:
diff changeset
  1929
    // connection method, otherwise KErrNotFound.
hgs
parents:
diff changeset
  1930
    aIsValid = KErrNotFound;
hgs
parents:
diff changeset
  1931
    
hgs
parents:
diff changeset
  1932
    // Default setting is a connection method
hgs
parents:
diff changeset
  1933
    if ( ECmDefConnConnectionMethod == defConn.iType )
hgs
parents:
diff changeset
  1934
        {
hgs
parents:
diff changeset
  1935
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1936
             GetDefConnMethodL ECmDefConnConnectionMethod" )
hgs
parents:
diff changeset
  1937
        aDefCm = aCmManager.ConnectionMethodL( defConn.iId );
hgs
parents:
diff changeset
  1938
        // Check bearer type, leave if not GPRS
hgs
parents:
diff changeset
  1939
        ValidateBearerTypeL( aDefCm, aIsValid );
hgs
parents:
diff changeset
  1940
        }
hgs
parents:
diff changeset
  1941
hgs
parents:
diff changeset
  1942
    // Default setting is a destination
hgs
parents:
diff changeset
  1943
    else if ( ECmDefConnDestination == defConn.iType )
hgs
parents:
diff changeset
  1944
        {
hgs
parents:
diff changeset
  1945
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1946
            GetDefConnMethodL ECmDefConnDestination" )
hgs
parents:
diff changeset
  1947
        RCmDestination defDes = aCmManager.DestinationL( defConn.iId );
hgs
parents:
diff changeset
  1948
        
hgs
parents:
diff changeset
  1949
        TInt desCount = defDes.ConnectionMethodCount();
hgs
parents:
diff changeset
  1950
        
hgs
parents:
diff changeset
  1951
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1952
            GetDefConnMethodL ECmDefConnDestination count=%d",
hgs
parents:
diff changeset
  1953
            desCount )
hgs
parents:
diff changeset
  1954
        
hgs
parents:
diff changeset
  1955
        for ( TInt i = 0; 
hgs
parents:
diff changeset
  1956
              desCount > 0 && aIsValid != KErrNone && i < desCount; i++ )
hgs
parents:
diff changeset
  1957
            {
hgs
parents:
diff changeset
  1958
            // Go through all the connection methods, 
hgs
parents:
diff changeset
  1959
            // until find a valid one.
hgs
parents:
diff changeset
  1960
            aDefCm = defDes.ConnectionMethodL( i );
hgs
parents:
diff changeset
  1961
            ValidateBearerTypeL( aDefCm, aIsValid );
hgs
parents:
diff changeset
  1962
            }
hgs
parents:
diff changeset
  1963
        }
hgs
parents:
diff changeset
  1964
    else
hgs
parents:
diff changeset
  1965
        {
hgs
parents:
diff changeset
  1966
        aIsValid = KErrNotFound;
hgs
parents:
diff changeset
  1967
        }
hgs
parents:
diff changeset
  1968
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::GetDefConnMethodL exit" )
hgs
parents:
diff changeset
  1969
    }
hgs
parents:
diff changeset
  1970
// End Of File