satengine/satserver/Commands/LaunchBrowserCmd/src/CLaunchBrowserHandler.cpp
author hgs
Fri, 15 Oct 2010 13:21:28 +0300
changeset 53 25b8d29b7c59
parent 51 12bc758d6a02
permissions -rw-r--r--
201041
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
//
53
hgs
parents: 51
diff changeset
   803
void CLaunchBrowserHandler::LaunchWithUrlL( const TDesC& aParam,
hgs
parents: 51
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" )
53
hgs
parents: 51
diff changeset
   808
    LOG3( SIMPLE,
hgs
parents: 51
diff changeset
   809
         "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL\
hgs
parents: 51
diff changeset
   810
          url=%s, IAP=%d", &aParam, aAccessPointUid.iUid )        
33
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
    // Browser launching called.
53
hgs
parents: 51
diff changeset
   813
    TInt err = iUtils->SatUiHandler().ShellController().LaunchBrowserL(
hgs
parents: 51
diff changeset
   814
        aParam, aAccessPointUid );
33
hgs
parents:
diff changeset
   815
hgs
parents:
diff changeset
   816
    if ( KErrNone == err )
hgs
parents:
diff changeset
   817
        {
hgs
parents:
diff changeset
   818
        if ( !iQueryRsp.iRequestedIconDisplayed &&
hgs
parents:
diff changeset
   819
            ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   820
            iLaunchBrowserData.iIconId.iQualifier ) ||
hgs
parents:
diff changeset
   821
            ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   822
            iLaunchBrowserData.iIconId.iQualifier ) ) )
hgs
parents:
diff changeset
   823
            {
hgs
parents:
diff changeset
   824
            iLaunchBrowserRsp.iGeneralResult =
hgs
parents:
diff changeset
   825
                RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   826
            LOG( SIMPLE,
hgs
parents:
diff changeset
   827
                "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL \
hgs
parents:
diff changeset
   828
                no icon shown" )
hgs
parents:
diff changeset
   829
            }
hgs
parents:
diff changeset
   830
        else
hgs
parents:
diff changeset
   831
            {
hgs
parents:
diff changeset
   832
            iLaunchBrowserRsp.iGeneralResult = RSat::KSuccess;
hgs
parents:
diff changeset
   833
            LOG( SIMPLE,
hgs
parents:
diff changeset
   834
                "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL \
hgs
parents:
diff changeset
   835
                command ok" )
hgs
parents:
diff changeset
   836
            }
hgs
parents:
diff changeset
   837
        }
hgs
parents:
diff changeset
   838
    else
hgs
parents:
diff changeset
   839
        {
hgs
parents:
diff changeset
   840
        iLaunchBrowserRsp.iGeneralResult  = RSat::KLaunchBrowserError;
hgs
parents:
diff changeset
   841
        iLaunchBrowserRsp.iInfoType       = RSat::KMeProblem;
hgs
parents:
diff changeset
   842
        iLaunchBrowserRsp.iAdditionalInfo.Append( 
hgs
parents:
diff changeset
   843
                RSat::KBrowserUnavailable );
hgs
parents:
diff changeset
   844
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   845
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL error: %i", 
hgs
parents:
diff changeset
   846
        err )
hgs
parents:
diff changeset
   847
        }
hgs
parents:
diff changeset
   848
hgs
parents:
diff changeset
   849
    LOG( SIMPLE,
hgs
parents:
diff changeset
   850
        "LAUNCHBROWSER: CLaunchBrowserHandler::LaunchWithUrlL exiting" )
hgs
parents:
diff changeset
   851
    }
hgs
parents:
diff changeset
   852
hgs
parents:
diff changeset
   853
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   854
// Starts timer. Function returns as the given time has elapsed or
hgs
parents:
diff changeset
   855
// timer is cancelled.
hgs
parents:
diff changeset
   856
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   857
void CLaunchBrowserHandler::After(
hgs
parents:
diff changeset
   858
    const TTimeIntervalMicroSeconds32& aDelay,
hgs
parents:
diff changeset
   859
    const TTimeIntervalMicroSeconds32& aInterval )
hgs
parents:
diff changeset
   860
    {
hgs
parents:
diff changeset
   861
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::After calling" )
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
    if ( !iAfterWait.IsStarted() )
hgs
parents:
diff changeset
   864
        {
hgs
parents:
diff changeset
   865
        TRAPD( err, iAfterTimer = CPeriodic::NewL( EPriorityStandard ) )
hgs
parents:
diff changeset
   866
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   867
        "LAUNCHBROWSER: CLaunchBrowserHandler::After err: %i", err )
hgs
parents:
diff changeset
   868
        if ( ( KErrNone == err ) && iAfterTimer )
hgs
parents:
diff changeset
   869
            {
hgs
parents:
diff changeset
   870
            iAfterTimer->Start(
hgs
parents:
diff changeset
   871
                aDelay, aInterval, TCallBack( DelayCallBack, this ) );
hgs
parents:
diff changeset
   872
            iAfterWait.Start();
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
            delete iAfterTimer;
hgs
parents:
diff changeset
   875
            iAfterTimer = NULL;
hgs
parents:
diff changeset
   876
            }
hgs
parents:
diff changeset
   877
        }
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::After exiting" )
hgs
parents:
diff changeset
   880
    }
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   883
// Timer call back function
hgs
parents:
diff changeset
   884
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   885
TInt CLaunchBrowserHandler::DelayCallBack( TAny* aPtr )
hgs
parents:
diff changeset
   886
    {
hgs
parents:
diff changeset
   887
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   888
    calling" )
hgs
parents:
diff changeset
   889
    CLaunchBrowserHandler* ptrThis =
hgs
parents:
diff changeset
   890
        static_cast<CLaunchBrowserHandler*>( aPtr );
hgs
parents:
diff changeset
   891
hgs
parents:
diff changeset
   892
    if ( ptrThis && ( ptrThis->iAfterWait.IsStarted() ) )
hgs
parents:
diff changeset
   893
        {
hgs
parents:
diff changeset
   894
        LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   895
             stop iAfterWait" )
hgs
parents:
diff changeset
   896
        ptrThis->iAfterWait.AsyncStop();
hgs
parents:
diff changeset
   897
        }
hgs
parents:
diff changeset
   898
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::DelayCallBack \
hgs
parents:
diff changeset
   899
    exiting" )
hgs
parents:
diff changeset
   900
    return ( EFalse );
hgs
parents:
diff changeset
   901
    }
hgs
parents:
diff changeset
   902
hgs
parents:
diff changeset
   903
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   904
// Create a new access point using the Access Point Engine.
hgs
parents:
diff changeset
   905
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   906
//
hgs
parents:
diff changeset
   907
TUint32 CLaunchBrowserHandler::CreateAccessPointL( 
hgs
parents:
diff changeset
   908
        const TDesC16& aApName,
hgs
parents:
diff changeset
   909
        const TDesC16& aProxyServerAddr,
hgs
parents:
diff changeset
   910
        const TUint32 aProxyPortNumber,
hgs
parents:
diff changeset
   911
        const RPacketContext::TProtocolType& aIPvType )
hgs
parents:
diff changeset
   912
    {
hgs
parents:
diff changeset
   913
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   914
         "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL calling" )
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
    // Connection method interface.
hgs
parents:
diff changeset
   917
    RCmConnectionMethod cm;
hgs
parents:
diff changeset
   918
    // Connection method manager interface.
hgs
parents:
diff changeset
   919
    RCmManager cmManager;
hgs
parents:
diff changeset
   920
    // Used to exit connection methods go through loop
hgs
parents:
diff changeset
   921
    TBool exitConnectionMethodsLoop( EFalse );
hgs
parents:
diff changeset
   922
    
hgs
parents:
diff changeset
   923
    cmManager.OpenLC();
hgs
parents:
diff changeset
   924
hgs
parents:
diff changeset
   925
    // Find if the access point with the same name is already exist.
hgs
parents:
diff changeset
   926
    // If such access point exists, delete it and then create a new one.
hgs
parents:
diff changeset
   927
     
hgs
parents:
diff changeset
   928
    // Get the Connection Methods does not belogns to any destination
hgs
parents:
diff changeset
   929
    RArray<TUint32> array = RArray<TUint32>( KSatCMGranularity );
hgs
parents:
diff changeset
   930
    CleanupClosePushL( array );
hgs
parents:
diff changeset
   931
hgs
parents:
diff changeset
   932
    cmManager.ConnectionMethodL( array );
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
    // Go through the Connection Method list to find if there is matched one
hgs
parents:
diff changeset
   935
     
hgs
parents:
diff changeset
   936
    for( TInt i = 0; 
hgs
parents:
diff changeset
   937
         ( i < array.Count() ) && !exitConnectionMethodsLoop; ++i)
hgs
parents:
diff changeset
   938
        {
hgs
parents:
diff changeset
   939
        cm = cmManager.ConnectionMethodL( array[i] );
hgs
parents:
diff changeset
   940
        CleanupClosePushL( cm );
hgs
parents:
diff changeset
   941
        
hgs
parents:
diff changeset
   942
        // query the access point name
hgs
parents:
diff changeset
   943
        HBufC * pa = NULL;
hgs
parents:
diff changeset
   944
        pa = cm.GetStringAttributeL( CMManager::ECmName );
hgs
parents:
diff changeset
   945
        CleanupStack::PushL(pa);
hgs
parents:
diff changeset
   946
        
hgs
parents:
diff changeset
   947
        if ( *pa == aApName )
hgs
parents:
diff changeset
   948
            {
hgs
parents:
diff changeset
   949
            // Find the matched connection method
hgs
parents:
diff changeset
   950
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
   951
                 CreateAccessPointL, find the existing ap" )
hgs
parents:
diff changeset
   952
            cm.DeleteL();
hgs
parents:
diff changeset
   953
            exitConnectionMethodsLoop = ETrue;
hgs
parents:
diff changeset
   954
            }
hgs
parents:
diff changeset
   955
        CleanupStack::PopAndDestroy( pa );
hgs
parents:
diff changeset
   956
        CleanupStack::PopAndDestroy( &cm ); 
hgs
parents:
diff changeset
   957
        } 
hgs
parents:
diff changeset
   958
    CleanupStack::PopAndDestroy( &array );
hgs
parents:
diff changeset
   959
hgs
parents:
diff changeset
   960
    // Create a connection method without destination.
hgs
parents:
diff changeset
   961
    cm = cmManager.CreateConnectionMethodL( KUidPacketDataBearerType );
hgs
parents:
diff changeset
   962
    CleanupClosePushL( cm );
hgs
parents:
diff changeset
   963
    
hgs
parents:
diff changeset
   964
    // Fulfill connection method params with default setting from OCC.
hgs
parents:
diff changeset
   965
    // We use trap to continue following operations even if leaving from 
hgs
parents:
diff changeset
   966
    // FulfillConnnectionMethodL.
hgs
parents:
diff changeset
   967
    TRAPD( errCode, FulfillConnnectionMethodL( cmManager, cm ) );
51
hgs
parents: 33
diff changeset
   968
    if ( errCode != KErrNone )
hgs
parents: 33
diff changeset
   969
        {
hgs
parents: 33
diff changeset
   970
        LOG3( SIMPLE, "SATENGINE: CLaunchBrowserHandler::CreateAccessPointL"
hgs
parents: 33
diff changeset
   971
            " error %d at line %d", errCode, __LINE__ )
hgs
parents: 33
diff changeset
   972
        }
33
hgs
parents:
diff changeset
   973
    // Set attributes of the connection method.
hgs
parents:
diff changeset
   974
    cm.SetStringAttributeL( CMManager::ECmName, aApName );
hgs
parents:
diff changeset
   975
    cm.SetIntAttributeL( CMManager::EPacketDataPDPType, aIPvType );
hgs
parents:
diff changeset
   976
    cm.SetStringAttributeL( CMManager::ECmWapIPGatewayAddress, 
hgs
parents:
diff changeset
   977
                            TPtrC( aProxyServerAddr ) );
hgs
parents:
diff changeset
   978
    cm.SetStringAttributeL( CMManager::ECmProxyServerName, 
hgs
parents:
diff changeset
   979
                            TPtrC( aProxyServerAddr ) );
hgs
parents:
diff changeset
   980
    cm.SetIntAttributeL( CMManager::ECmProxyPortNumber, aProxyPortNumber );
hgs
parents:
diff changeset
   981
        
hgs
parents:
diff changeset
   982
    // Update the access point ID for use later.
hgs
parents:
diff changeset
   983
    cm.UpdateL();
hgs
parents:
diff changeset
   984
hgs
parents:
diff changeset
   985
    TUint32 apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
   986
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
   987
          "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL apId=%d",
hgs
parents:
diff changeset
   988
          apId )
hgs
parents:
diff changeset
   989
hgs
parents:
diff changeset
   990
    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
   991
    CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
   992
    
hgs
parents:
diff changeset
   993
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   994
         "LAUNCHBROWSER: CLaunchBrowserHandler::CreateAccessPointL exiting" )
hgs
parents:
diff changeset
   995
    
hgs
parents:
diff changeset
   996
    return apId;
hgs
parents:
diff changeset
   997
    }
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1000
// Get a AP from the Connection Method Manager.
hgs
parents:
diff changeset
  1001
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1002
TUint32 CLaunchBrowserHandler::GetAccessPointByGatewayAddressL()
hgs
parents:
diff changeset
  1003
    {
hgs
parents:
diff changeset
  1004
    LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1005
        CLaunchBrowserHandler::GetAccessPointByGatewayAddressL calling" )
hgs
parents:
diff changeset
  1006
    // Access Point ID.
hgs
parents:
diff changeset
  1007
    TUint32 apId( 0 ); 
hgs
parents:
diff changeset
  1008
    // Unknown IP address type.
hgs
parents:
diff changeset
  1009
    TInt ipvType( 0 );
hgs
parents:
diff changeset
  1010
    // Get the gateway address.
hgs
parents:
diff changeset
  1011
    TPtrC gatewayAddrPtr( iLaunchBrowserData.iText );
hgs
parents:
diff changeset
  1012
    // Get the bearer list.
hgs
parents:
diff changeset
  1013
    TPtrC8 bearerListPtr( iLaunchBrowserData.iBearerList ); 
hgs
parents:
diff changeset
  1014
hgs
parents:
diff changeset
  1015
    // Proxy address.
hgs
parents:
diff changeset
  1016
    HBufC* proxyAddress = NULL;
hgs
parents:
diff changeset
  1017
    // Proxy port number.
hgs
parents:
diff changeset
  1018
    TUint32 proxyPortNumber( 0 );
hgs
parents:
diff changeset
  1019
    HBufC* pa = NULL;
hgs
parents:
diff changeset
  1020
    TUint32 pn( 0 );
hgs
parents:
diff changeset
  1021
hgs
parents:
diff changeset
  1022
    // Used to exit the connection method go through loop
hgs
parents:
diff changeset
  1023
    TBool exitConnectionMethodsLoop( EFalse );
hgs
parents:
diff changeset
  1024
    
hgs
parents:
diff changeset
  1025
    // SAT access point name.
hgs
parents:
diff changeset
  1026
    TPtrC satAPN( KNullDesC );
hgs
parents:
diff changeset
  1027
    
hgs
parents:
diff changeset
  1028
    // Use SAT application name as SAT APN.
hgs
parents:
diff changeset
  1029
    satAPN.Set( iUtils->SatAppName() );
hgs
parents:
diff changeset
  1030
    // Use default SAT APN if SAT application name is not available.
hgs
parents:
diff changeset
  1031
    if ( satAPN == KNullDesC )
hgs
parents:
diff changeset
  1032
        {
hgs
parents:
diff changeset
  1033
        LOG( SIMPLE, 
hgs
parents:
diff changeset
  1034
             "CLaunchBrowserHandler::GetAccessPointByGatewayAddressL\
hgs
parents:
diff changeset
  1035
             satAPN == KNullDesC" )
hgs
parents:
diff changeset
  1036
        satAPN.Set( KSatAccessPointName );
hgs
parents:
diff changeset
  1037
        }
hgs
parents:
diff changeset
  1038
        
hgs
parents:
diff changeset
  1039
    // Get the proxy address and port number
hgs
parents:
diff changeset
  1040
    proxyAddress = HBufC::NewLC( gatewayAddrPtr.Length() );
hgs
parents:
diff changeset
  1041
    TPtr proxyAddrPtr( proxyAddress->Des() );
hgs
parents:
diff changeset
  1042
    SeparatePortNumberFromAddress( gatewayAddrPtr, proxyAddrPtr, 
hgs
parents:
diff changeset
  1043
        proxyPortNumber );
hgs
parents:
diff changeset
  1044
    proxyAddrPtr.TrimAll();
hgs
parents:
diff changeset
  1045
    
hgs
parents:
diff changeset
  1046
    // Check the launch browser package for gateway setting.
hgs
parents:
diff changeset
  1047
    ipvType = ValidateGatewayAddress( proxyAddrPtr );
hgs
parents:
diff changeset
  1048
    
hgs
parents:
diff changeset
  1049
    if ( RPacketContext::EPdpTypeIPv4 == ipvType || \
hgs
parents:
diff changeset
  1050
         RPacketContext::EPdpTypeIPv6 == ipvType )
hgs
parents:
diff changeset
  1051
        {
hgs
parents:
diff changeset
  1052
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1053
              "CLaunchBrowserHandler::GetAccessPointByGatewayAddressL \
hgs
parents:
diff changeset
  1054
              gatewayAddrPtr.Length(): %d", gatewayAddrPtr.Length() )
hgs
parents:
diff changeset
  1055
        // Check the launch browser package for bearer setting if the gateway
hgs
parents:
diff changeset
  1056
        // address is valid.
hgs
parents:
diff changeset
  1057
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1058
              "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
  1059
              GetAccessPointByGatewayAddressL, IPvType is %d",
hgs
parents:
diff changeset
  1060
              ipvType)
hgs
parents:
diff changeset
  1061
        if ( gatewayAddrPtr.Length() )
hgs
parents:
diff changeset
  1062
            {
hgs
parents:
diff changeset
  1063
            // The bearer is GPRS.
hgs
parents:
diff changeset
  1064
            if ( bearerListPtr != KNullDesC8 && bearerListPtr.Length() > 0 
hgs
parents:
diff changeset
  1065
                    && RSat::KGprsBearer == bearerListPtr[0] )
hgs
parents:
diff changeset
  1066
                {
hgs
parents:
diff changeset
  1067
                
hgs
parents:
diff changeset
  1068
                // Go through the candidate connection methods to find 
hgs
parents:
diff changeset
  1069
                // the one matched the gateway address. If a matched one 
hgs
parents:
diff changeset
  1070
                // is found,using it as the access point for SIM service, 
hgs
parents:
diff changeset
  1071
                // else a new one is created.      
hgs
parents:
diff changeset
  1072
                RCmManager cmManager;
hgs
parents:
diff changeset
  1073
                cmManager.OpenLC();
hgs
parents:
diff changeset
  1074
hgs
parents:
diff changeset
  1075
                // Get the Connection Methods does not belongs to 
hgs
parents:
diff changeset
  1076
                // any destination
hgs
parents:
diff changeset
  1077
                RArray<TUint32> array = RArray<TUint32>( 
hgs
parents:
diff changeset
  1078
                                        KSatCMGranularity );
hgs
parents:
diff changeset
  1079
                CleanupClosePushL( array );
hgs
parents:
diff changeset
  1080
hgs
parents:
diff changeset
  1081
                cmManager.ConnectionMethodL( array );
hgs
parents:
diff changeset
  1082
hgs
parents:
diff changeset
  1083
                // Go through the Connection Method list to find 
hgs
parents:
diff changeset
  1084
                // if there is matched one
hgs
parents:
diff changeset
  1085
                 
hgs
parents:
diff changeset
  1086
                for( TInt i = 0; 
hgs
parents:
diff changeset
  1087
                     ( i < array.Count() ) && !exitConnectionMethodsLoop; 
hgs
parents:
diff changeset
  1088
                     ++i )
hgs
parents:
diff changeset
  1089
                    {
hgs
parents:
diff changeset
  1090
                    RCmConnectionMethod cm = cmManager.ConnectionMethodL(
hgs
parents:
diff changeset
  1091
                                                          array[i] );
hgs
parents:
diff changeset
  1092
                    CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1093
                    
hgs
parents:
diff changeset
  1094
                    // query the Gateway proxy address 
hgs
parents:
diff changeset
  1095
                    // of the Connection Method
hgs
parents:
diff changeset
  1096
                    pa = cm.GetStringAttributeL( 
hgs
parents:
diff changeset
  1097
                         CMManager::ECmWapIPGatewayAddress );
hgs
parents:
diff changeset
  1098
                    CleanupStack::PushL(pa);
hgs
parents:
diff changeset
  1099
                    
hgs
parents:
diff changeset
  1100
                    // query the Gateway proxy port number of the Connection 
hgs
parents:
diff changeset
  1101
                    // Method
hgs
parents:
diff changeset
  1102
                    pn = cm.GetIntAttributeL( 
hgs
parents:
diff changeset
  1103
                            CMManager::ECmProxyPortNumber );
hgs
parents:
diff changeset
  1104
                    
hgs
parents:
diff changeset
  1105
                    if (( pn == proxyPortNumber ) && 
hgs
parents:
diff changeset
  1106
                        ( *pa == *proxyAddress ))
hgs
parents:
diff changeset
  1107
                        {
hgs
parents:
diff changeset
  1108
                        // Find the matched connection method
hgs
parents:
diff changeset
  1109
                        apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
  1110
                        LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1111
                              "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1112
                              GetAccessPointByGatewayAddressL, apId=%d",
hgs
parents:
diff changeset
  1113
                              apId )
hgs
parents:
diff changeset
  1114
                        exitConnectionMethodsLoop = ETrue;
hgs
parents:
diff changeset
  1115
                        }
hgs
parents:
diff changeset
  1116
                        
hgs
parents:
diff changeset
  1117
                    CleanupStack::PopAndDestroy( pa );
hgs
parents:
diff changeset
  1118
                    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1119
                    }
hgs
parents:
diff changeset
  1120
            
hgs
parents:
diff changeset
  1121
                CleanupStack::PopAndDestroy( &array );
hgs
parents:
diff changeset
  1122
                CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1123
                
hgs
parents:
diff changeset
  1124
                LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler:: \
hgs
parents:
diff changeset
  1125
                      GetAccessPointByGatewayAddressL apId=%d", apId )
hgs
parents:
diff changeset
  1126
                           
hgs
parents:
diff changeset
  1127
                if ( !apId )
hgs
parents:
diff changeset
  1128
                    {
hgs
parents:
diff changeset
  1129
                    // Create a new AP if there is not a matched one.
hgs
parents:
diff changeset
  1130
                    apId = CreateAccessPointL( 
hgs
parents:
diff changeset
  1131
                            satAPN,
hgs
parents:
diff changeset
  1132
                            proxyAddrPtr,
hgs
parents:
diff changeset
  1133
                            proxyPortNumber,
hgs
parents:
diff changeset
  1134
                            static_cast<RPacketContext::TProtocolType>(
hgs
parents:
diff changeset
  1135
                                                              ipvType ) );
hgs
parents:
diff changeset
  1136
                    }
hgs
parents:
diff changeset
  1137
                }
hgs
parents:
diff changeset
  1138
            }
hgs
parents:
diff changeset
  1139
        }
hgs
parents:
diff changeset
  1140
    CleanupStack::PopAndDestroy( proxyAddress );
hgs
parents:
diff changeset
  1141
    
hgs
parents:
diff changeset
  1142
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1143
          "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1144
          GetAccessPointByGatewayAddressL exiting, apId=%d", apId )
hgs
parents:
diff changeset
  1145
    
hgs
parents:
diff changeset
  1146
    // return the AP.
hgs
parents:
diff changeset
  1147
    return apId;
hgs
parents:
diff changeset
  1148
    }
hgs
parents:
diff changeset
  1149
hgs
parents:
diff changeset
  1150
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1151
// Get an Access Point by default.
hgs
parents:
diff changeset
  1152
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1153
TUint32 CLaunchBrowserHandler::GetAccessPointByDefaultL()
hgs
parents:
diff changeset
  1154
    {
hgs
parents:
diff changeset
  1155
    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1156
         GetAccessPointByDefaultL calling" )
hgs
parents:
diff changeset
  1157
         
hgs
parents:
diff changeset
  1158
    TUint32 apId ( KErrNone );
hgs
parents:
diff changeset
  1159
    RCmManager cmManager;
hgs
parents:
diff changeset
  1160
    cmManager.OpenLC();
hgs
parents:
diff changeset
  1161
    RCmConnectionMethod cm;
hgs
parents:
diff changeset
  1162
    CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1163
    
hgs
parents:
diff changeset
  1164
    // Get a default connection method
hgs
parents:
diff changeset
  1165
    TInt ret( KErrNotFound );
hgs
parents:
diff changeset
  1166
    GetDefConnMethodL( cmManager, cm, ret );
hgs
parents:
diff changeset
  1167
    if ( !ret )
hgs
parents:
diff changeset
  1168
        {
hgs
parents:
diff changeset
  1169
        LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1170
             GetAccessPointByDefaultL default connection found" )        
hgs
parents:
diff changeset
  1171
        apId = cm.GetIntAttributeL( CMManager::ECmIapId );
hgs
parents:
diff changeset
  1172
        }
hgs
parents:
diff changeset
  1173
    
hgs
parents:
diff changeset
  1174
    CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1175
    CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1176
    
hgs
parents:
diff changeset
  1177
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1178
          GetAccessPointByDefaultL exiting, apId=%d", apId )
hgs
parents:
diff changeset
  1179
    
hgs
parents:
diff changeset
  1180
    return apId;
hgs
parents:
diff changeset
  1181
    }
hgs
parents:
diff changeset
  1182
hgs
parents:
diff changeset
  1183
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1184
// Get default URL by access point
hgs
parents:
diff changeset
  1185
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1186
HBufC* CLaunchBrowserHandler::GetDefaultUrlByAccessPointLC( TUint32 aApId )
hgs
parents:
diff changeset
  1187
    {
hgs
parents:
diff changeset
  1188
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1189
         GetDefaultUrlByAccessPointLC calling, aApId=%d", aApId )
hgs
parents:
diff changeset
  1190
    
hgs
parents:
diff changeset
  1191
    HBufC* url = NULL;
hgs
parents:
diff changeset
  1192
    if ( aApId > 0 )
hgs
parents:
diff changeset
  1193
        {
hgs
parents:
diff changeset
  1194
        // Create CMManager session
hgs
parents:
diff changeset
  1195
        RCmManager cmManager;
hgs
parents:
diff changeset
  1196
        cmManager.OpenLC();
hgs
parents:
diff changeset
  1197
        
hgs
parents:
diff changeset
  1198
        // get the connection method by apId
hgs
parents:
diff changeset
  1199
        RCmConnectionMethod cm = cmManager.ConnectionMethodL( aApId );
hgs
parents:
diff changeset
  1200
        CleanupClosePushL( cm );
hgs
parents:
diff changeset
  1201
        
hgs
parents:
diff changeset
  1202
        // Get the default URL from default accesspoint
hgs
parents:
diff changeset
  1203
        // If the access point doesn't include the default URL,
hgs
parents:
diff changeset
  1204
        // the empty string is returned.
hgs
parents:
diff changeset
  1205
        url = cm.GetStringAttributeL( CMManager::ECmStartPage );
hgs
parents:
diff changeset
  1206
        
hgs
parents:
diff changeset
  1207
        CleanupStack::PopAndDestroy( &cm );
hgs
parents:
diff changeset
  1208
        CleanupStack::PopAndDestroy( &cmManager );
hgs
parents:
diff changeset
  1209
hgs
parents:
diff changeset
  1210
        CleanupStack::PushL( url );  
hgs
parents:
diff changeset
  1211
        }
hgs
parents:
diff changeset
  1212
    
hgs
parents:
diff changeset
  1213
    if ( !url )
hgs
parents:
diff changeset
  1214
        {
hgs
parents:
diff changeset
  1215
        url = KNullDesC().AllocLC();
hgs
parents:
diff changeset
  1216
        }
hgs
parents:
diff changeset
  1217
    
hgs
parents:
diff changeset
  1218
    LOG2( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1219
          GetDefaultUrlByAccessPointLC exiting, url=%s", url )
hgs
parents:
diff changeset
  1220
    return url;
hgs
parents:
diff changeset
  1221
    }
hgs
parents:
diff changeset
  1222
hgs
parents:
diff changeset
  1223
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1224
// Convert a descriptor into a integer.
hgs
parents:
diff changeset
  1225
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1226
TInt CLaunchBrowserHandler::ConvertDesToInt( const TDesC16& aDes )
hgs
parents:
diff changeset
  1227
    {
hgs
parents:
diff changeset
  1228
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1229
          CLaunchBrowserHandler::ConvertDesToInt calling,length of aDes:%d",
hgs
parents:
diff changeset
  1230
          aDes.Length() )
hgs
parents:
diff changeset
  1231
hgs
parents:
diff changeset
  1232
    TLex converter;
hgs
parents:
diff changeset
  1233
    TInt intValue( KErrNotFound );
hgs
parents:
diff changeset
  1234
    TBool digital( ETrue );
hgs
parents:
diff changeset
  1235
hgs
parents:
diff changeset
  1236
    if ( aDes != KNullDesC && aDes.Length() > 0 )
hgs
parents:
diff changeset
  1237
        {
hgs
parents:
diff changeset
  1238
        // The literal value of every element in the descriptor 
hgs
parents:
diff changeset
  1239
        // should be numerical.
hgs
parents:
diff changeset
  1240
        for ( TInt i = 0; i < aDes.Length() && digital; i++ )
hgs
parents:
diff changeset
  1241
            {
hgs
parents:
diff changeset
  1242
            TChar ch( aDes[i] );
hgs
parents:
diff changeset
  1243
            
hgs
parents:
diff changeset
  1244
            if ( !ch.IsDigit() )
hgs
parents:
diff changeset
  1245
                {
hgs
parents:
diff changeset
  1246
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1247
                CLaunchBrowserHandler::ConvertDesToInt not digit" )
hgs
parents:
diff changeset
  1248
                digital = EFalse;
hgs
parents:
diff changeset
  1249
                }
hgs
parents:
diff changeset
  1250
            }
hgs
parents:
diff changeset
  1251
            
hgs
parents:
diff changeset
  1252
        if ( digital )
hgs
parents:
diff changeset
  1253
            {
hgs
parents:
diff changeset
  1254
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1255
            CLaunchBrowserHandler::ConvertDesToInt digit" )
hgs
parents:
diff changeset
  1256
            // Converting.
hgs
parents:
diff changeset
  1257
            converter.Assign( aDes );
hgs
parents:
diff changeset
  1258
            converter.Val( intValue );
hgs
parents:
diff changeset
  1259
            }
hgs
parents:
diff changeset
  1260
        }
hgs
parents:
diff changeset
  1261
hgs
parents:
diff changeset
  1262
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1263
          CLaunchBrowserHandler::ConvertDesToInt exiting,intValue:%d", 
hgs
parents:
diff changeset
  1264
          intValue )
hgs
parents:
diff changeset
  1265
hgs
parents:
diff changeset
  1266
    return intValue;
hgs
parents:
diff changeset
  1267
    }
hgs
parents:
diff changeset
  1268
hgs
parents:
diff changeset
  1269
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1270
// Check the validity of a descriptor in hex.
hgs
parents:
diff changeset
  1271
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1272
TBool CLaunchBrowserHandler::ValidateHexadecimal( const TDesC16& aHex )
hgs
parents:
diff changeset
  1273
    {
hgs
parents:
diff changeset
  1274
    LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1275
        CLaunchBrowserHandler::ValidateHexadecimal calling" )
hgs
parents:
diff changeset
  1276
hgs
parents:
diff changeset
  1277
    // The hexadecimal descriptor can be null.
hgs
parents:
diff changeset
  1278
    TInt length( aHex.Length() );
hgs
parents:
diff changeset
  1279
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1280
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1281
        CLaunchBrowserHandler::ValidateHexadecimal length:%d", length )
hgs
parents:
diff changeset
  1282
hgs
parents:
diff changeset
  1283
    // Validate characters one by one.
hgs
parents:
diff changeset
  1284
    for ( TInt i = 0; i < length && retVal; i++ )
hgs
parents:
diff changeset
  1285
        {
hgs
parents:
diff changeset
  1286
        TChar ch( aHex[i] );
hgs
parents:
diff changeset
  1287
        
hgs
parents:
diff changeset
  1288
        if ( !ch.IsHexDigit() )
hgs
parents:
diff changeset
  1289
            {
hgs
parents:
diff changeset
  1290
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1291
            CLaunchBrowserHandler::ValidateHexadecimal hex digit,i: %d",
hgs
parents:
diff changeset
  1292
            i )
hgs
parents:
diff changeset
  1293
            retVal = EFalse;
hgs
parents:
diff changeset
  1294
            }
hgs
parents:
diff changeset
  1295
        }
hgs
parents:
diff changeset
  1296
hgs
parents:
diff changeset
  1297
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1298
          CLaunchBrowserHandler::ValidateHexadecimal exiting, retVal:%d",
hgs
parents:
diff changeset
  1299
          retVal )
hgs
parents:
diff changeset
  1300
        
hgs
parents:
diff changeset
  1301
    return retVal;
hgs
parents:
diff changeset
  1302
    }
hgs
parents:
diff changeset
  1303
hgs
parents:
diff changeset
  1304
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1305
// Check the validity of a IPv4 address. For example, 210.13.246.172.
hgs
parents:
diff changeset
  1306
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1307
TBool CLaunchBrowserHandler::ValidateIPv4Address( 
hgs
parents:
diff changeset
  1308
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1309
    {
hgs
parents:
diff changeset
  1310
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1311
    CLaunchBrowserHandler::ValidateIPv4Address calling,aAddress: %s",
hgs
parents:
diff changeset
  1312
    &aAddress )
hgs
parents:
diff changeset
  1313
hgs
parents:
diff changeset
  1314
    // Separate the address to be three segments using dot and validate
hgs
parents:
diff changeset
  1315
    // each segment.
hgs
parents:
diff changeset
  1316
    TPtrC segPtr( aAddress );
hgs
parents:
diff changeset
  1317
    TBuf<KSatMaxIPv4SegmentLength> segment;
hgs
parents:
diff changeset
  1318
    TInt posInDes( KErrNone );
hgs
parents:
diff changeset
  1319
    TInt posInPtr( KErrNone );
hgs
parents:
diff changeset
  1320
    TInt segCounter( KErrNone );
hgs
parents:
diff changeset
  1321
    TBool first( ETrue );
hgs
parents:
diff changeset
  1322
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1323
    // Segment value in integer.
hgs
parents:
diff changeset
  1324
    TInt intValue( KErrNone );
hgs
parents:
diff changeset
  1325
        
hgs
parents:
diff changeset
  1326
    // Convert each segment into integer.
hgs
parents:
diff changeset
  1327
    while ( KErrNotFound != ( posInPtr = segPtr.Find( KSatIPv4Delimiter ) )
hgs
parents:
diff changeset
  1328
            && retVal )
hgs
parents:
diff changeset
  1329
        {
hgs
parents:
diff changeset
  1330
        
hgs
parents:
diff changeset
  1331
        if ( KSatMaxIPv4SegmentLength >= posInPtr && 0 < posInPtr )
hgs
parents:
diff changeset
  1332
            {
hgs
parents:
diff changeset
  1333
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1334
            CLaunchBrowserHandler::ValidateIPv4Address posInPtr valid" )
hgs
parents:
diff changeset
  1335
            segCounter++;
hgs
parents:
diff changeset
  1336
            posInDes += posInPtr;
hgs
parents:
diff changeset
  1337
            segment = segPtr.Mid( 0, posInPtr );
hgs
parents:
diff changeset
  1338
            
hgs
parents:
diff changeset
  1339
            // The first integer should be > 0 and < 255, others should be 
hgs
parents:
diff changeset
  1340
            // >=0 and < 255.
hgs
parents:
diff changeset
  1341
            intValue = ConvertDesToInt( segment );
hgs
parents:
diff changeset
  1342
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1343
            CLaunchBrowserHandler::ValidateIPv4Address first:%d",first )
hgs
parents:
diff changeset
  1344
            if ( first )
hgs
parents:
diff changeset
  1345
                {
hgs
parents:
diff changeset
  1346
                first = EFalse;
hgs
parents:
diff changeset
  1347
                
hgs
parents:
diff changeset
  1348
                if ( !( KSatIPv4Network < intValue && 
hgs
parents:
diff changeset
  1349
                        KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1350
                    {
hgs
parents:
diff changeset
  1351
                    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1352
                         ValidateIPv4Address intValue valid" )
hgs
parents:
diff changeset
  1353
                    retVal = EFalse;
hgs
parents:
diff changeset
  1354
                    }
hgs
parents:
diff changeset
  1355
                }
hgs
parents:
diff changeset
  1356
            else
hgs
parents:
diff changeset
  1357
                {
hgs
parents:
diff changeset
  1358
                
hgs
parents:
diff changeset
  1359
                if ( !( KSatIPv4Network <= intValue && 
hgs
parents:
diff changeset
  1360
                        KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1361
                    {
hgs
parents:
diff changeset
  1362
                    LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1363
                         ValidateIPv4Address intValue range" )
hgs
parents:
diff changeset
  1364
                    retVal = EFalse;
hgs
parents:
diff changeset
  1365
                    }
hgs
parents:
diff changeset
  1366
                }
hgs
parents:
diff changeset
  1367
            // Skip dot.
hgs
parents:
diff changeset
  1368
            posInDes++;
hgs
parents:
diff changeset
  1369
            segPtr.Set( aAddress.Mid( posInDes, 
hgs
parents:
diff changeset
  1370
                aAddress.Length() - posInDes ) );
hgs
parents:
diff changeset
  1371
            }
hgs
parents:
diff changeset
  1372
        else
hgs
parents:
diff changeset
  1373
            {
hgs
parents:
diff changeset
  1374
            retVal = EFalse;
hgs
parents:
diff changeset
  1375
            }
hgs
parents:
diff changeset
  1376
        }
hgs
parents:
diff changeset
  1377
    
hgs
parents:
diff changeset
  1378
    // IPv4 address is consist of 4 segment
hgs
parents:
diff changeset
  1379
    if ( KSatMaxIPv4SegmentCounter == segCounter && retVal )
hgs
parents:
diff changeset
  1380
        {
hgs
parents:
diff changeset
  1381
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1382
        CLaunchBrowserHandler::ValidateIPv4Address valid address" )
hgs
parents:
diff changeset
  1383
        // Validate the last segment.
hgs
parents:
diff changeset
  1384
        segment = segPtr;
hgs
parents:
diff changeset
  1385
        
hgs
parents:
diff changeset
  1386
        if ( KSatMaxIPv4SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1387
            {
hgs
parents:
diff changeset
  1388
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1389
            CLaunchBrowserHandler::ValidateIPv4Address address invalid" )
hgs
parents:
diff changeset
  1390
            retVal = EFalse;
hgs
parents:
diff changeset
  1391
            }
hgs
parents:
diff changeset
  1392
            
hgs
parents:
diff changeset
  1393
        intValue = ConvertDesToInt( segment );
hgs
parents:
diff changeset
  1394
        
hgs
parents:
diff changeset
  1395
        if ( !( KSatIPv4Network < intValue && 
hgs
parents:
diff changeset
  1396
                KSatIPv4Broadcast > intValue ) )
hgs
parents:
diff changeset
  1397
            {
hgs
parents:
diff changeset
  1398
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1399
            CLaunchBrowserHandler::ValidateIPv4Address intValue range" )
hgs
parents:
diff changeset
  1400
            retVal = EFalse;
hgs
parents:
diff changeset
  1401
            }
hgs
parents:
diff changeset
  1402
        }
hgs
parents:
diff changeset
  1403
    else
hgs
parents:
diff changeset
  1404
        {
hgs
parents:
diff changeset
  1405
        retVal = EFalse;
hgs
parents:
diff changeset
  1406
        }
hgs
parents:
diff changeset
  1407
        
hgs
parents:
diff changeset
  1408
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1409
        CLaunchBrowserHandler::ValidateIPv4Address exiting,retVal:%d",
hgs
parents:
diff changeset
  1410
        retVal )
hgs
parents:
diff changeset
  1411
hgs
parents:
diff changeset
  1412
    return retVal;
hgs
parents:
diff changeset
  1413
    }
hgs
parents:
diff changeset
  1414
hgs
parents:
diff changeset
  1415
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1416
// Check the validity of a IPv6 address. For example,
hgs
parents:
diff changeset
  1417
// 3ffe:ffff:101::230:6eff:fe04:d9ff.
hgs
parents:
diff changeset
  1418
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1419
TBool CLaunchBrowserHandler::ValidateIPv6Address( 
hgs
parents:
diff changeset
  1420
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1421
    {
hgs
parents:
diff changeset
  1422
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1423
    CLaunchBrowserHandler::ValidateIPv6Address calling,aAddress: %s",
hgs
parents:
diff changeset
  1424
    &aAddress )
hgs
parents:
diff changeset
  1425
hgs
parents:
diff changeset
  1426
    // Separate the address to be eight segments using colon and validate
hgs
parents:
diff changeset
  1427
    // each segment.
hgs
parents:
diff changeset
  1428
    TPtrC segPtr( aAddress );
hgs
parents:
diff changeset
  1429
    TBuf<KSatMaxIPv6SegmentLength> segment;
hgs
parents:
diff changeset
  1430
    TInt posInDes( KErrNone );
hgs
parents:
diff changeset
  1431
    TInt posInPtr( KErrNone );
hgs
parents:
diff changeset
  1432
    TInt segCounter( KErrNone );
hgs
parents:
diff changeset
  1433
    TBool first( ETrue );
hgs
parents:
diff changeset
  1434
    TBool retVal( ETrue );
hgs
parents:
diff changeset
  1435
    
hgs
parents:
diff changeset
  1436
    while ( KErrNotFound != ( posInPtr = segPtr.Find( KSatIPv6Delimiter ) )
hgs
parents:
diff changeset
  1437
            && retVal )
hgs
parents:
diff changeset
  1438
        {
hgs
parents:
diff changeset
  1439
        
hgs
parents:
diff changeset
  1440
        if ( KSatMaxIPv6SegmentLength >= posInPtr && 0 <= posInPtr )
hgs
parents:
diff changeset
  1441
            {
hgs
parents:
diff changeset
  1442
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1443
            CLaunchBrowserHandler::ValidateIPv6Address posInPtr valid" )
hgs
parents:
diff changeset
  1444
            segCounter++;
hgs
parents:
diff changeset
  1445
            posInDes += posInPtr;
hgs
parents:
diff changeset
  1446
            segment = segPtr.Mid( 0, posInPtr );
hgs
parents:
diff changeset
  1447
            LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1448
            CLaunchBrowserHandler::ValidateIPv6Address first:%d",first )
hgs
parents:
diff changeset
  1449
            if ( first )
hgs
parents:
diff changeset
  1450
                {
hgs
parents:
diff changeset
  1451
                first = EFalse;
hgs
parents:
diff changeset
  1452
                
hgs
parents:
diff changeset
  1453
                if ( 0 >= segment.Length() )
hgs
parents:
diff changeset
  1454
                    {
hgs
parents:
diff changeset
  1455
                    retVal = EFalse;
hgs
parents:
diff changeset
  1456
                    }
hgs
parents:
diff changeset
  1457
                }
hgs
parents:
diff changeset
  1458
                
hgs
parents:
diff changeset
  1459
            if ( KSatMaxIPv6SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1460
                {
hgs
parents:
diff changeset
  1461
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1462
                CLaunchBrowserHandler::ValidateIPv6Address address invalid" )
hgs
parents:
diff changeset
  1463
                retVal = EFalse;
hgs
parents:
diff changeset
  1464
                }
hgs
parents:
diff changeset
  1465
                
hgs
parents:
diff changeset
  1466
            if ( !ValidateHexadecimal( segment ) )
hgs
parents:
diff changeset
  1467
                {
hgs
parents:
diff changeset
  1468
                LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1469
                ValidateIPv6Address address invalid hex" )
hgs
parents:
diff changeset
  1470
                retVal = EFalse;
hgs
parents:
diff changeset
  1471
                }
hgs
parents:
diff changeset
  1472
            
hgs
parents:
diff changeset
  1473
            // Skip colon.
hgs
parents:
diff changeset
  1474
            posInDes++; 
hgs
parents:
diff changeset
  1475
            segPtr.Set( aAddress.Mid( posInDes, 
hgs
parents:
diff changeset
  1476
                aAddress.Length() - posInDes ) );
hgs
parents:
diff changeset
  1477
            }
hgs
parents:
diff changeset
  1478
        else 
hgs
parents:
diff changeset
  1479
            {
hgs
parents:
diff changeset
  1480
            retVal = EFalse;
hgs
parents:
diff changeset
  1481
            }
hgs
parents:
diff changeset
  1482
        }
hgs
parents:
diff changeset
  1483
hgs
parents:
diff changeset
  1484
    // IPv6 address is consist of 8 segment
hgs
parents:
diff changeset
  1485
    if ( KSatMaxIPv6SegmentCounter == segCounter && retVal )
hgs
parents:
diff changeset
  1486
        {
hgs
parents:
diff changeset
  1487
        LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1488
        CLaunchBrowserHandler::ValidateIPv6Address valid address" )
hgs
parents:
diff changeset
  1489
        // Validate the last segment.
hgs
parents:
diff changeset
  1490
        segment = segPtr;
hgs
parents:
diff changeset
  1491
        
hgs
parents:
diff changeset
  1492
        if ( KSatMaxIPv6SegmentLength < segment.Length() )
hgs
parents:
diff changeset
  1493
            {
hgs
parents:
diff changeset
  1494
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1495
            CLaunchBrowserHandler::ValidateIPv6Address address invalid" )
hgs
parents:
diff changeset
  1496
            retVal = EFalse;
hgs
parents:
diff changeset
  1497
            }
hgs
parents:
diff changeset
  1498
            
hgs
parents:
diff changeset
  1499
        if ( !ValidateHexadecimal( segment ) )
hgs
parents:
diff changeset
  1500
            {
hgs
parents:
diff changeset
  1501
            LOG( SIMPLE, "LAUNCHBROWSER: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1502
            ValidateIPv6Address address invalid hex" )
hgs
parents:
diff changeset
  1503
            retVal = EFalse;
hgs
parents:
diff changeset
  1504
            }
hgs
parents:
diff changeset
  1505
        }
hgs
parents:
diff changeset
  1506
    else
hgs
parents:
diff changeset
  1507
        {
hgs
parents:
diff changeset
  1508
        retVal = EFalse;
hgs
parents:
diff changeset
  1509
        }
hgs
parents:
diff changeset
  1510
    
hgs
parents:
diff changeset
  1511
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1512
          CLaunchBrowserHandler::ValidateIPv6Address exiting,retVal:%d", 
hgs
parents:
diff changeset
  1513
          retVal )
hgs
parents:
diff changeset
  1514
hgs
parents:
diff changeset
  1515
    return retVal;
hgs
parents:
diff changeset
  1516
    }
hgs
parents:
diff changeset
  1517
    
hgs
parents:
diff changeset
  1518
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1519
// Check the validity of a gateway IP address. Either it is IPv4 or IPv6. 
hgs
parents:
diff changeset
  1520
// For example, 210.13.246.172 or 3ffe:ffff:101::230:6eff:fe04:d9ff.
hgs
parents:
diff changeset
  1521
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1522
TInt CLaunchBrowserHandler::ValidateGatewayAddress( 
hgs
parents:
diff changeset
  1523
        const TDesC16& aAddress )
hgs
parents:
diff changeset
  1524
    {
hgs
parents:
diff changeset
  1525
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1526
          CLaunchBrowserHandler::ValidateGatewayAddress calling,length of \
hgs
parents:
diff changeset
  1527
          aAddress: %d", aAddress.Length() )
hgs
parents:
diff changeset
  1528
    
hgs
parents:
diff changeset
  1529
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1530
    CLaunchBrowserHandler::ValidateGatewayAddress aAddress: %s", &aAddress )
hgs
parents:
diff changeset
  1531
    TInt ipvType( KSatInvalidPdpType );
hgs
parents:
diff changeset
  1532
    TInt length( aAddress.Length() );
hgs
parents:
diff changeset
  1533
    
hgs
parents:
diff changeset
  1534
    if ( length )
hgs
parents:
diff changeset
  1535
        {
hgs
parents:
diff changeset
  1536
        // The maximum length of a IP address is less than 39.
hgs
parents:
diff changeset
  1537
        if ( KSatMaxIPv4AddressLength >= length && 
hgs
parents:
diff changeset
  1538
                KSatMinIPv4AddressLength <= length )
hgs
parents:
diff changeset
  1539
            {
hgs
parents:
diff changeset
  1540
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1541
            CLaunchBrowserHandler::ValidateGatewayAddress IPV4 address" )
hgs
parents:
diff changeset
  1542
            // aAddress is a IPv4 address.
hgs
parents:
diff changeset
  1543
            if ( ValidateIPv4Address( aAddress ) )
hgs
parents:
diff changeset
  1544
                {
hgs
parents:
diff changeset
  1545
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1546
                CLaunchBrowserHandler::ValidateGatewayAddress valid IPV4 \
hgs
parents:
diff changeset
  1547
                address" )
hgs
parents:
diff changeset
  1548
                ipvType = RPacketContext::EPdpTypeIPv4;
hgs
parents:
diff changeset
  1549
                }
hgs
parents:
diff changeset
  1550
            }
hgs
parents:
diff changeset
  1551
        else if ( KSatMaxIPv6AddressLength >= length && 
hgs
parents:
diff changeset
  1552
                    KSatMinIPv6AddressLength <= length )
hgs
parents:
diff changeset
  1553
            {
hgs
parents:
diff changeset
  1554
            LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1555
            CLaunchBrowserHandler::ValidateGatewayAddress IPV6 address" )
hgs
parents:
diff changeset
  1556
            // aAddress is a IPv6 address.
hgs
parents:
diff changeset
  1557
            if ( ValidateIPv6Address( aAddress ) )
hgs
parents:
diff changeset
  1558
                {
hgs
parents:
diff changeset
  1559
                LOG( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1560
                CLaunchBrowserHandler::ValidateGatewayAddress valid IPV6 \
hgs
parents:
diff changeset
  1561
                address" )
hgs
parents:
diff changeset
  1562
                ipvType = RPacketContext::EPdpTypeIPv6;
hgs
parents:
diff changeset
  1563
                }
hgs
parents:
diff changeset
  1564
            }
hgs
parents:
diff changeset
  1565
        }
hgs
parents:
diff changeset
  1566
    
hgs
parents:
diff changeset
  1567
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1568
        CLaunchBrowserHandler::ValidateGatewayAddress exiting,ipvType:%d",
hgs
parents:
diff changeset
  1569
        ipvType )
hgs
parents:
diff changeset
  1570
hgs
parents:
diff changeset
  1571
    // Returned IP address.
hgs
parents:
diff changeset
  1572
    return ipvType;
hgs
parents:
diff changeset
  1573
    }
hgs
parents:
diff changeset
  1574
hgs
parents:
diff changeset
  1575
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1576
// Separate the port number from a address if it is existing. For example,
hgs
parents:
diff changeset
  1577
// 210.13.246.172:8080.
hgs
parents:
diff changeset
  1578
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1579
void CLaunchBrowserHandler::SeparatePortNumberFromAddress( 
hgs
parents:
diff changeset
  1580
    const TDesC16& aAddress, 
hgs
parents:
diff changeset
  1581
    TDes16& aPureAddr,
hgs
parents:
diff changeset
  1582
    TUint32& aPortNumber )
hgs
parents:
diff changeset
  1583
    {
hgs
parents:
diff changeset
  1584
    LOG2( SIMPLE, "LAUNCHBROWSER: \
hgs
parents:
diff changeset
  1585
    CLaunchBrowserHandler::SeparatePortNumberFromAddress calling,\
hgs
parents:
diff changeset
  1586
    aAddress: %s", &aAddress )
hgs
parents:
diff changeset
  1587
hgs
parents:
diff changeset
  1588
    // The following three variables are used to locate the port number.
hgs
parents:
diff changeset
  1589
    TBool isSeparator( EFalse );
hgs
parents:
diff changeset
  1590
    TBool portNumberBegin( EFalse );
hgs
parents:
diff changeset
  1591
    TBool portNumberEnd( EFalse );
hgs
parents:
diff changeset
  1592
    TBool pureAddrEnd( EFalse );
hgs
parents:
diff changeset
  1593
    // Count delimiters in the address.
hgs
parents:
diff changeset
  1594
    TInt delimiterCounter( 0 );
hgs
parents:
diff changeset
  1595
    // Count symbols in a segment of the address.
hgs
parents:
diff changeset
  1596
    TInt symbolCounter( 0 );
hgs
parents:
diff changeset
  1597
    // Currsent position of the address descriptor.
hgs
parents:
diff changeset
  1598
    TInt curPos( 0 );
hgs
parents:
diff changeset
  1599
    TInt posOffset( 0 );
hgs
parents:
diff changeset
  1600
    // The position of the last valid character.
hgs
parents:
diff changeset
  1601
    TInt rightBound( 0 );
hgs
parents:
diff changeset
  1602
    // Digital port number.
hgs
parents:
diff changeset
  1603
    TUint32 portNumber( KSatLaunchBrowserProxyPortNumber );
hgs
parents:
diff changeset
  1604
    // The descriptor pointer for the address.
hgs
parents:
diff changeset
  1605
    TPtrC addrPtr;
hgs
parents:
diff changeset
  1606
    // The length of the address.
hgs
parents:
diff changeset
  1607
    TInt addrLen( 0 );
hgs
parents:
diff changeset
  1608
    
hgs
parents:
diff changeset
  1609
    // The address is a valid descriptor.
hgs
parents:
diff changeset
  1610
    if ( NULL != &aAddress &&
hgs
parents:
diff changeset
  1611
            KSatMinIPv4AddressLength <= aAddress.Length() )
hgs
parents:
diff changeset
  1612
        {
hgs
parents:
diff changeset
  1613
        addrPtr.Set( aAddress );
hgs
parents:
diff changeset
  1614
        addrLen = aAddress.Length();
hgs
parents:
diff changeset
  1615
        curPos = addrPtr.Find( KSatIPv4Delimiter );
hgs
parents:
diff changeset
  1616
        
hgs
parents:
diff changeset
  1617
        LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1618
        SeparatePortNumberFromAddress curPos: %i", curPos )
hgs
parents:
diff changeset
  1619
        if ( KErrNotFound != curPos )
hgs
parents:
diff changeset
  1620
            {
hgs
parents:
diff changeset
  1621
            // Skip three delimiters in the IPv4 address.
hgs
parents:
diff changeset
  1622
            delimiterCounter++;
hgs
parents:
diff changeset
  1623
     
hgs
parents:
diff changeset
  1624
            while ( KSatMaxIPv4SegmentCounter > delimiterCounter
hgs
parents:
diff changeset
  1625
                        && curPos < addrLen )
hgs
parents:
diff changeset
  1626
                {
hgs
parents:
diff changeset
  1627
                curPos++;
hgs
parents:
diff changeset
  1628
                posOffset = addrPtr.Right( addrLen - curPos ).Find( 
hgs
parents:
diff changeset
  1629
                                KSatIPv4Delimiter );
hgs
parents:
diff changeset
  1630
                LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1631
                SeparatePortNumberFromAddress posOffset: %i", posOffset )
hgs
parents:
diff changeset
  1632
                if ( KErrNotFound != posOffset )
hgs
parents:
diff changeset
  1633
                    {
hgs
parents:
diff changeset
  1634
                    delimiterCounter++;
hgs
parents:
diff changeset
  1635
                    curPos += posOffset;
hgs
parents:
diff changeset
  1636
                    }
hgs
parents:
diff changeset
  1637
                else
hgs
parents:
diff changeset
  1638
                    {
hgs
parents:
diff changeset
  1639
                    delimiterCounter = KSatMaxIPv4SegmentCounter;
hgs
parents:
diff changeset
  1640
                    }
hgs
parents:
diff changeset
  1641
                }
hgs
parents:
diff changeset
  1642
hgs
parents:
diff changeset
  1643
            // Locate the separator between the pure address and 
hgs
parents:
diff changeset
  1644
            // the port number.
hgs
parents:
diff changeset
  1645
            curPos++;
hgs
parents:
diff changeset
  1646
     
hgs
parents:
diff changeset
  1647
            while ( curPos < addrLen 
hgs
parents:
diff changeset
  1648
                &&  KSatMaxIPv4SegmentLength > symbolCounter 
hgs
parents:
diff changeset
  1649
                && !isSeparator )
hgs
parents:
diff changeset
  1650
                {
hgs
parents:
diff changeset
  1651
                TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1652
     
hgs
parents:
diff changeset
  1653
                if ( ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1654
                    {
hgs
parents:
diff changeset
  1655
                    LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1656
                    SeparatePortNumberFromAddress AlphaDigit" )
hgs
parents:
diff changeset
  1657
                    symbolCounter++;
hgs
parents:
diff changeset
  1658
                    }
hgs
parents:
diff changeset
  1659
                else
hgs
parents:
diff changeset
  1660
                    {
hgs
parents:
diff changeset
  1661
                    isSeparator = ETrue;
hgs
parents:
diff changeset
  1662
                    }
hgs
parents:
diff changeset
  1663
hgs
parents:
diff changeset
  1664
                curPos++;
hgs
parents:
diff changeset
  1665
                }
hgs
parents:
diff changeset
  1666
            }
hgs
parents:
diff changeset
  1667
        else
hgs
parents:
diff changeset
  1668
            {
hgs
parents:
diff changeset
  1669
            curPos = addrPtr.Find( KSatIPv6Delimiter );
hgs
parents:
diff changeset
  1670
            LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1671
            SeparatePortNumberFromAddress curPos: %i", curPos )
hgs
parents:
diff changeset
  1672
            if ( KErrNotFound != curPos )
hgs
parents:
diff changeset
  1673
                {
hgs
parents:
diff changeset
  1674
                // Skip seven delimiters in the IPv6 address.
hgs
parents:
diff changeset
  1675
                delimiterCounter++;
hgs
parents:
diff changeset
  1676
     
hgs
parents:
diff changeset
  1677
                while ( KSatMaxIPv6SegmentCounter > delimiterCounter
hgs
parents:
diff changeset
  1678
                            && curPos < addrLen )
hgs
parents:
diff changeset
  1679
                    {
hgs
parents:
diff changeset
  1680
                    curPos++;
hgs
parents:
diff changeset
  1681
                    posOffset = addrPtr.Right( addrLen - curPos ).Find( 
hgs
parents:
diff changeset
  1682
                                    KSatIPv6Delimiter );
hgs
parents:
diff changeset
  1683
                    LOG2( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1684
                    SeparatePortNumberFromAddress posOffset: %i", posOffset )
hgs
parents:
diff changeset
  1685
                    if ( KErrNotFound != posOffset )
hgs
parents:
diff changeset
  1686
                        {
hgs
parents:
diff changeset
  1687
                        delimiterCounter++;
hgs
parents:
diff changeset
  1688
                        curPos += posOffset;
hgs
parents:
diff changeset
  1689
                        }
hgs
parents:
diff changeset
  1690
                    }
hgs
parents:
diff changeset
  1691
hgs
parents:
diff changeset
  1692
                // Locate the separator between the pure address and 
hgs
parents:
diff changeset
  1693
                // the port number.
hgs
parents:
diff changeset
  1694
                curPos++;
hgs
parents:
diff changeset
  1695
     
hgs
parents:
diff changeset
  1696
                while ( curPos < addrLen && 
hgs
parents:
diff changeset
  1697
                            KSatMaxIPv6SegmentLength > symbolCounter && 
hgs
parents:
diff changeset
  1698
                            !isSeparator )
hgs
parents:
diff changeset
  1699
                    {
hgs
parents:
diff changeset
  1700
                    TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1701
     
hgs
parents:
diff changeset
  1702
                    if ( ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1703
                        {
hgs
parents:
diff changeset
  1704
                        LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1705
                        SeparatePortNumberFromAddress AlphaDigit" )
hgs
parents:
diff changeset
  1706
                        symbolCounter++;
hgs
parents:
diff changeset
  1707
                        }
hgs
parents:
diff changeset
  1708
                    else
hgs
parents:
diff changeset
  1709
                        {
hgs
parents:
diff changeset
  1710
                        isSeparator = ETrue;
hgs
parents:
diff changeset
  1711
                        }
hgs
parents:
diff changeset
  1712
hgs
parents:
diff changeset
  1713
                    curPos++;
hgs
parents:
diff changeset
  1714
                    }
hgs
parents:
diff changeset
  1715
                }
hgs
parents:
diff changeset
  1716
            }
hgs
parents:
diff changeset
  1717
hgs
parents:
diff changeset
  1718
        // Extract the pure address.
hgs
parents:
diff changeset
  1719
        while ( curPos < addrLen && KSatMinIPv4AddressLength < curPos 
hgs
parents:
diff changeset
  1720
                && !pureAddrEnd )
hgs
parents:
diff changeset
  1721
            {
hgs
parents:
diff changeset
  1722
            TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1723
            
hgs
parents:
diff changeset
  1724
            if ( !ch.IsAlphaDigit() )
hgs
parents:
diff changeset
  1725
                {
hgs
parents:
diff changeset
  1726
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1727
                SeparatePortNumberFromAddress not AlphaDigit" )
hgs
parents:
diff changeset
  1728
                curPos--;
hgs
parents:
diff changeset
  1729
                }
hgs
parents:
diff changeset
  1730
            else
hgs
parents:
diff changeset
  1731
                {
hgs
parents:
diff changeset
  1732
                pureAddrEnd = ETrue;
hgs
parents:
diff changeset
  1733
                }
hgs
parents:
diff changeset
  1734
            }
hgs
parents:
diff changeset
  1735
hgs
parents:
diff changeset
  1736
        if ( curPos <= addrLen )
hgs
parents:
diff changeset
  1737
            {
hgs
parents:
diff changeset
  1738
            aPureAddr.Copy( addrPtr.Left( curPos + 1 ) );
hgs
parents:
diff changeset
  1739
            }
hgs
parents:
diff changeset
  1740
hgs
parents:
diff changeset
  1741
        // Extract the port number.
hgs
parents:
diff changeset
  1742
        // Locate the beginning of the port number.
hgs
parents:
diff changeset
  1743
        curPos++;
hgs
parents:
diff changeset
  1744
    
hgs
parents:
diff changeset
  1745
        while ( curPos < addrLen && !portNumberBegin)
hgs
parents:
diff changeset
  1746
            {
hgs
parents:
diff changeset
  1747
            TChar ch( addrPtr[curPos] );
hgs
parents:
diff changeset
  1748
hgs
parents:
diff changeset
  1749
            if ( ch.IsDigit() )
hgs
parents:
diff changeset
  1750
                {
hgs
parents:
diff changeset
  1751
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1752
                SeparatePortNumberFromAddress Digit" )
hgs
parents:
diff changeset
  1753
                portNumberBegin = ETrue;
hgs
parents:
diff changeset
  1754
                }
hgs
parents:
diff changeset
  1755
            else
hgs
parents:
diff changeset
  1756
                {
hgs
parents:
diff changeset
  1757
                curPos++;
hgs
parents:
diff changeset
  1758
                }
hgs
parents:
diff changeset
  1759
            }
hgs
parents:
diff changeset
  1760
        
hgs
parents:
diff changeset
  1761
        // Locate the end of the port number.    
hgs
parents:
diff changeset
  1762
        rightBound = addrLen;
hgs
parents:
diff changeset
  1763
        rightBound--;
hgs
parents:
diff changeset
  1764
hgs
parents:
diff changeset
  1765
        while ( rightBound > curPos && !portNumberEnd )
hgs
parents:
diff changeset
  1766
            {
hgs
parents:
diff changeset
  1767
            TChar ch( addrPtr[rightBound] );
hgs
parents:
diff changeset
  1768
hgs
parents:
diff changeset
  1769
            if ( ch.IsDigit() )
hgs
parents:
diff changeset
  1770
                {
hgs
parents:
diff changeset
  1771
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1772
                SeparatePortNumberFromAddress Digit" )
hgs
parents:
diff changeset
  1773
                portNumberEnd = ETrue;
hgs
parents:
diff changeset
  1774
                }
hgs
parents:
diff changeset
  1775
            else 
hgs
parents:
diff changeset
  1776
                {
hgs
parents:
diff changeset
  1777
                rightBound--;
hgs
parents:
diff changeset
  1778
                }
hgs
parents:
diff changeset
  1779
            }
hgs
parents:
diff changeset
  1780
        
hgs
parents:
diff changeset
  1781
        // Convert the port number and validate it.
hgs
parents:
diff changeset
  1782
        // Set the port number to default port number
hgs
parents:
diff changeset
  1783
        aPortNumber = portNumber; 
hgs
parents:
diff changeset
  1784
        if ( curPos < rightBound && rightBound < addrLen )
hgs
parents:
diff changeset
  1785
            {
hgs
parents:
diff changeset
  1786
            portNumber = ConvertDesToInt( 
hgs
parents:
diff changeset
  1787
                addrPtr.Mid( curPos, rightBound - curPos + 1 ) );
hgs
parents:
diff changeset
  1788
hgs
parents:
diff changeset
  1789
            if ( KSatMaxProxyPortNumber > portNumber &&
hgs
parents:
diff changeset
  1790
                    KSatMinProxyPortNumber < portNumber )
hgs
parents:
diff changeset
  1791
                {
hgs
parents:
diff changeset
  1792
                LOG( SIMPLE, "CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1793
                SeparatePortNumberFromAddress valid portNumber" )
hgs
parents:
diff changeset
  1794
                aPortNumber = portNumber;
hgs
parents:
diff changeset
  1795
                }
hgs
parents:
diff changeset
  1796
            }
hgs
parents:
diff changeset
  1797
        }
hgs
parents:
diff changeset
  1798
        
hgs
parents:
diff changeset
  1799
    LOG( SIMPLE, 
hgs
parents:
diff changeset
  1800
    "LAUNCHBROWSER: CLaunchBrowserHandler::SeparatePortNumberFromAddress \
hgs
parents:
diff changeset
  1801
    exiting" )
hgs
parents:
diff changeset
  1802
    }
hgs
parents:
diff changeset
  1803
hgs
parents:
diff changeset
  1804
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1805
// Fulfill connecion method params with default params.
hgs
parents:
diff changeset
  1806
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1807
void CLaunchBrowserHandler::FulfillConnnectionMethodL( 
hgs
parents:
diff changeset
  1808
    RCmManager& aCmManager,
hgs
parents:
diff changeset
  1809
    RCmConnectionMethod& aCm )
hgs
parents:
diff changeset
  1810
    {
hgs
parents:
diff changeset
  1811
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1812
        FulfillConnnectionMethodL calling" )
hgs
parents:
diff changeset
  1813
    
hgs
parents:
diff changeset
  1814
    // The following 3 lines are used to preset the default parameters
hgs
parents:
diff changeset
  1815
    // to avoid doing nothing for them if leaving.
hgs
parents:
diff changeset
  1816
    aCm.SetStringAttributeL( CMManager::EPacketDataAPName, 
hgs
parents:
diff changeset
  1817
        KSatGprsAccessPointName );
hgs
parents:
diff changeset
  1818
    aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, EFalse );
hgs
parents:
diff changeset
  1819
    aCm.SetBoolAttributeL( CMManager::ECmDisablePlainTextAuth, EFalse );
hgs
parents:
diff changeset
  1820
        
hgs
parents:
diff changeset
  1821
    // Get default access point ID.
hgs
parents:
diff changeset
  1822
    RCmConnectionMethod defCm;
hgs
parents:
diff changeset
  1823
    CleanupClosePushL( defCm );
hgs
parents:
diff changeset
  1824
    
hgs
parents:
diff changeset
  1825
    TInt ret ( KErrNotFound );
hgs
parents:
diff changeset
  1826
    GetDefConnMethodL( aCmManager, defCm, ret );
hgs
parents:
diff changeset
  1827
    
hgs
parents:
diff changeset
  1828
    if ( !ret )
hgs
parents:
diff changeset
  1829
        {
hgs
parents:
diff changeset
  1830
        // Default AP found! Copy parameters from
hgs
parents:
diff changeset
  1831
        // default AP to new created AP.
hgs
parents:
diff changeset
  1832
        
hgs
parents:
diff changeset
  1833
        // Copy AP name.
hgs
parents:
diff changeset
  1834
        HBufC* strValue = defCm.GetStringAttributeL( 
hgs
parents:
diff changeset
  1835
            CMManager::EPacketDataAPName );
hgs
parents:
diff changeset
  1836
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1837
            FulfillConnnectionMethodL AP Name is %s", strValue )
hgs
parents:
diff changeset
  1838
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1839
        aCm.SetStringAttributeL( CMManager::EPacketDataAPName, *strValue );
hgs
parents:
diff changeset
  1840
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1841
        
hgs
parents:
diff changeset
  1842
        // Copy authentic name
hgs
parents:
diff changeset
  1843
        strValue = defCm.GetStringAttributeL( CMManager::ECmIFAuthName );
hgs
parents:
diff changeset
  1844
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1845
            FulfillConnnectionMethodL Auch name is %s", strValue )
hgs
parents:
diff changeset
  1846
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1847
        aCm.SetStringAttributeL( CMManager::ECmIFAuthName, *strValue );
hgs
parents:
diff changeset
  1848
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1849
        
hgs
parents:
diff changeset
  1850
        // Copy authentic pass
hgs
parents:
diff changeset
  1851
        strValue = defCm.GetStringAttributeL( CMManager::ECmIFAuthPass );
hgs
parents:
diff changeset
  1852
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1853
            FulfillConnnectionMethodL Auch pass is %s", strValue )
hgs
parents:
diff changeset
  1854
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1855
        aCm.SetStringAttributeL( CMManager::ECmIFAuthPass, *strValue );
hgs
parents:
diff changeset
  1856
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1857
        
hgs
parents:
diff changeset
  1858
        // Copy default URL
hgs
parents:
diff changeset
  1859
        strValue = defCm.GetStringAttributeL( CMManager::ECmStartPage );
hgs
parents:
diff changeset
  1860
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1861
            FulfillConnnectionMethodL Start page pass is %s", strValue )
hgs
parents:
diff changeset
  1862
        CleanupStack::PushL( strValue );
hgs
parents:
diff changeset
  1863
        aCm.SetStringAttributeL( CMManager::ECmStartPage, *strValue );
hgs
parents:
diff changeset
  1864
        CleanupStack::PopAndDestroy( strValue );
hgs
parents:
diff changeset
  1865
        
hgs
parents:
diff changeset
  1866
        // Copy status if prompt for auth
hgs
parents:
diff changeset
  1867
        TBool bValue = defCm.GetBoolAttributeL( 
hgs
parents:
diff changeset
  1868
                CMManager::ECmIFPromptForAuth );
hgs
parents:
diff changeset
  1869
        aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, bValue );
hgs
parents:
diff changeset
  1870
        
hgs
parents:
diff changeset
  1871
        // Copy security status.
hgs
parents:
diff changeset
  1872
        bValue = defCm.GetBoolAttributeL( 
hgs
parents:
diff changeset
  1873
                CMManager::ECmDisablePlainTextAuth );
hgs
parents:
diff changeset
  1874
        aCm.SetBoolAttributeL( CMManager::ECmIFPromptForAuth, bValue );
hgs
parents:
diff changeset
  1875
        }
hgs
parents:
diff changeset
  1876
        
hgs
parents:
diff changeset
  1877
    CleanupStack::PopAndDestroy( &defCm );
hgs
parents:
diff changeset
  1878
    
hgs
parents:
diff changeset
  1879
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1880
        FulfillConnnectionMethodL exiting" )
hgs
parents:
diff changeset
  1881
    }
hgs
parents:
diff changeset
  1882
hgs
parents:
diff changeset
  1883
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1884
// Check the validity of offered bearer type
hgs
parents:
diff changeset
  1885
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1886
void CLaunchBrowserHandler::ValidateBearerTypeL( RCmConnectionMethod& aCm, 
hgs
parents:
diff changeset
  1887
                                                 TInt& aIsValid )
hgs
parents:
diff changeset
  1888
    {
hgs
parents:
diff changeset
  1889
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1890
         ValidateBearerTypeL calling" )
hgs
parents:
diff changeset
  1891
        
hgs
parents:
diff changeset
  1892
    TUint32 bearerType = aCm.GetIntAttributeL( 
hgs
parents:
diff changeset
  1893
        CMManager::ECmBearerType );
hgs
parents:
diff changeset
  1894
    LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1895
        ValidateBearerTypeL bearerType=0x%x", bearerType )
hgs
parents:
diff changeset
  1896
    
hgs
parents:
diff changeset
  1897
    if ( KUidPacketDataBearerType == bearerType )
hgs
parents:
diff changeset
  1898
        {
hgs
parents:
diff changeset
  1899
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1900
            ValidateBearerTypeL bearer type is GPRS" )
hgs
parents:
diff changeset
  1901
        aIsValid = KErrNone;
hgs
parents:
diff changeset
  1902
        }
hgs
parents:
diff changeset
  1903
    
hgs
parents:
diff changeset
  1904
    LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1905
          ValidateBearerTypeL exiting, aIsValid=%d", aIsValid )
hgs
parents:
diff changeset
  1906
    }
hgs
parents:
diff changeset
  1907
hgs
parents:
diff changeset
  1908
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1909
// Get default connection method
hgs
parents:
diff changeset
  1910
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
  1911
void CLaunchBrowserHandler::GetDefConnMethodL( RCmManager& aCmManager,
hgs
parents:
diff changeset
  1912
                                               RCmConnectionMethod& aDefCm,
hgs
parents:
diff changeset
  1913
                                               TInt& aIsValid )
hgs
parents:
diff changeset
  1914
    {
hgs
parents:
diff changeset
  1915
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1916
         GetDefConnMethodL calling" )   
hgs
parents:
diff changeset
  1917
         
hgs
parents:
diff changeset
  1918
    // Go through the default connection methods to find 
hgs
parents:
diff changeset
  1919
    // the one valid connection method.   
hgs
parents:
diff changeset
  1920
    TCmDefConnValue defConn;
hgs
parents:
diff changeset
  1921
    aCmManager.ReadDefConnL( defConn );
hgs
parents:
diff changeset
  1922
    
hgs
parents:
diff changeset
  1923
    LOG3( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1924
      GetDefConnMethodL DefConn type=%d, id=%d", 
hgs
parents:
diff changeset
  1925
      defConn.iType, defConn.iId )
hgs
parents:
diff changeset
  1926
    
hgs
parents:
diff changeset
  1927
    // Mark aIsFound as KErrNone if there is one valid 
hgs
parents:
diff changeset
  1928
    // connection method, otherwise KErrNotFound.
hgs
parents:
diff changeset
  1929
    aIsValid = KErrNotFound;
hgs
parents:
diff changeset
  1930
    
hgs
parents:
diff changeset
  1931
    // Default setting is a connection method
hgs
parents:
diff changeset
  1932
    if ( ECmDefConnConnectionMethod == defConn.iType )
hgs
parents:
diff changeset
  1933
        {
hgs
parents:
diff changeset
  1934
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1935
             GetDefConnMethodL ECmDefConnConnectionMethod" )
hgs
parents:
diff changeset
  1936
        aDefCm = aCmManager.ConnectionMethodL( defConn.iId );
hgs
parents:
diff changeset
  1937
        // Check bearer type, leave if not GPRS
hgs
parents:
diff changeset
  1938
        ValidateBearerTypeL( aDefCm, aIsValid );
hgs
parents:
diff changeset
  1939
        }
hgs
parents:
diff changeset
  1940
hgs
parents:
diff changeset
  1941
    // Default setting is a destination
hgs
parents:
diff changeset
  1942
    else if ( ECmDefConnDestination == defConn.iType )
hgs
parents:
diff changeset
  1943
        {
hgs
parents:
diff changeset
  1944
        LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1945
            GetDefConnMethodL ECmDefConnDestination" )
hgs
parents:
diff changeset
  1946
        RCmDestination defDes = aCmManager.DestinationL( defConn.iId );
hgs
parents:
diff changeset
  1947
        
hgs
parents:
diff changeset
  1948
        TInt desCount = defDes.ConnectionMethodCount();
hgs
parents:
diff changeset
  1949
        
hgs
parents:
diff changeset
  1950
        LOG2( SIMPLE, "SATENGINE: CLaunchBrowserHandler::\
hgs
parents:
diff changeset
  1951
            GetDefConnMethodL ECmDefConnDestination count=%d",
hgs
parents:
diff changeset
  1952
            desCount )
hgs
parents:
diff changeset
  1953
        
hgs
parents:
diff changeset
  1954
        for ( TInt i = 0; 
hgs
parents:
diff changeset
  1955
              desCount > 0 && aIsValid != KErrNone && i < desCount; i++ )
hgs
parents:
diff changeset
  1956
            {
hgs
parents:
diff changeset
  1957
            // Go through all the connection methods, 
hgs
parents:
diff changeset
  1958
            // until find a valid one.
hgs
parents:
diff changeset
  1959
            aDefCm = defDes.ConnectionMethodL( i );
hgs
parents:
diff changeset
  1960
            ValidateBearerTypeL( aDefCm, aIsValid );
hgs
parents:
diff changeset
  1961
            }
hgs
parents:
diff changeset
  1962
        }
hgs
parents:
diff changeset
  1963
    else
hgs
parents:
diff changeset
  1964
        {
hgs
parents:
diff changeset
  1965
        aIsValid = KErrNotFound;
hgs
parents:
diff changeset
  1966
        }
hgs
parents:
diff changeset
  1967
    LOG( SIMPLE, "SATENGINE: CLaunchBrowserHandler::GetDefConnMethodL exit" )
hgs
parents:
diff changeset
  1968
    }
hgs
parents:
diff changeset
  1969
// End Of File