satengine/satserver/Engine/src/CSatBIPUtils.cpp
author hgs
Fri, 17 Sep 2010 17:09:13 +0300
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2008 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:  Utility class for BIP
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
#include <es_sock.h>
hgs
parents:
diff changeset
    20
#include <etelqos.h>
hgs
parents:
diff changeset
    21
#include "SatLog.h"
hgs
parents:
diff changeset
    22
#include "CSatBIPUtils.h"
hgs
parents:
diff changeset
    23
#include "CSatBIPGPRSDataChannel.h"
hgs
parents:
diff changeset
    24
#include "csatbipconnectionobserver.h"
hgs
parents:
diff changeset
    25
#include "MSatBIPDataChannel.h"
hgs
parents:
diff changeset
    26
#include "MSatBIPChannelStatusObserver.h"
hgs
parents:
diff changeset
    27
#include "MSatBIPDataAvailableObserver.h"
hgs
parents:
diff changeset
    28
//lint -e766 Used inside TRAP macro, lint misfunction.
hgs
parents:
diff changeset
    29
#include "EnginePanic.h"
hgs
parents:
diff changeset
    30
#include "TSatChannelIDInfo.h"
hgs
parents:
diff changeset
    31
#include "MSatUtils.h"
hgs
parents:
diff changeset
    32
#include "CSatApnHandler.h"
hgs
parents:
diff changeset
    33
#include "csatsactivewrapper.h"
hgs
parents:
diff changeset
    34
#include "msatmultimodeapi.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
const TInt KPDPContextPos( 7 );
hgs
parents:
diff changeset
    37
const TInt KMaxAvailChannels( 7 );
hgs
parents:
diff changeset
    38
const TInt8 KProposeQoSParametersPop( 2 );
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    43
// Two-phased constructor.
hgs
parents:
diff changeset
    44
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
//
hgs
parents:
diff changeset
    46
CSatBIPUtils* CSatBIPUtils::NewL( MSatUtils& aUtils )
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::NewL calling" )
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
    CSatBIPUtils* self = new ( ELeave ) CSatBIPUtils( aUtils );
hgs
parents:
diff changeset
    51
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    52
    self->ConstructL();
hgs
parents:
diff changeset
    53
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::NewL exiting" )
hgs
parents:
diff changeset
    56
    return self;
hgs
parents:
diff changeset
    57
    }
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
// Destructor
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
//
hgs
parents:
diff changeset
    63
CSatBIPUtils::~CSatBIPUtils()
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::~CSatBIPUtils calling" )
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    // Close all data channels
hgs
parents:
diff changeset
    68
    if ( iDataChannels )
hgs
parents:
diff changeset
    69
        {
hgs
parents:
diff changeset
    70
        iDataChannels->ResetAndDestroy();
hgs
parents:
diff changeset
    71
        }
hgs
parents:
diff changeset
    72
    delete iDataChannels;
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    if ( iChannelIds )
hgs
parents:
diff changeset
    75
        {
hgs
parents:
diff changeset
    76
        iChannelIds->ResetAndDestroy();
hgs
parents:
diff changeset
    77
        }
hgs
parents:
diff changeset
    78
    delete iChannelIds;
hgs
parents:
diff changeset
    79
    
hgs
parents:
diff changeset
    80
    delete iChannelId;
hgs
parents:
diff changeset
    81
    
hgs
parents:
diff changeset
    82
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::~CSatBIPUtils\
hgs
parents:
diff changeset
    83
            Close connection and subconnection" )
hgs
parents:
diff changeset
    84
    iSubConnection.Close();
hgs
parents:
diff changeset
    85
    iConnection.Close();
hgs
parents:
diff changeset
    86
    iSocketServer.Close();
hgs
parents:
diff changeset
    87
    iPacketService.Close();
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
    delete iApnHandler;
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    if ( iWrapper )
hgs
parents:
diff changeset
    92
        {
hgs
parents:
diff changeset
    93
        iWrapper->CancelWrapper();
hgs
parents:
diff changeset
    94
        delete iWrapper;
hgs
parents:
diff changeset
    95
        iWrapper = NULL;
hgs
parents:
diff changeset
    96
        }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    if ( iConnObserver )
hgs
parents:
diff changeset
    99
        {
hgs
parents:
diff changeset
   100
        iConnObserver->Cancel();
hgs
parents:
diff changeset
   101
        delete iConnObserver;
hgs
parents:
diff changeset
   102
        iConnObserver = NULL;
hgs
parents:
diff changeset
   103
        }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    iDataAvailableObserver = NULL;
hgs
parents:
diff changeset
   106
    iChannelStatusObserver = NULL;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::~CSatBIPUtils exiting" )
hgs
parents:
diff changeset
   109
    }
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   112
// Handles event
hgs
parents:
diff changeset
   113
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   114
//
hgs
parents:
diff changeset
   115
void CSatBIPUtils::Event( TInt aEvent )
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::Event calling" )
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    // Check event
hgs
parents:
diff changeset
   120
    if ( MSatUtils::ECommandCancelled == aEvent ||
hgs
parents:
diff changeset
   121
         MSatUtils::ECancelledUsingEndKey == aEvent )
hgs
parents:
diff changeset
   122
        {
hgs
parents:
diff changeset
   123
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::Event check event" )
hgs
parents:
diff changeset
   124
        if ( iDataChannels )
hgs
parents:
diff changeset
   125
            {
hgs
parents:
diff changeset
   126
            const TInt channelCount( iDataChannels->Count() );
hgs
parents:
diff changeset
   127
            LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::Event channelCount: %d",
hgs
parents:
diff changeset
   128
                  channelCount )
hgs
parents:
diff changeset
   129
            // Cancel all channels
hgs
parents:
diff changeset
   130
            for ( TInt index = 0; index < channelCount; index++ )
hgs
parents:
diff changeset
   131
                {
hgs
parents:
diff changeset
   132
                MSatBIPDataChannel* channel = iDataChannels->At( index );
hgs
parents:
diff changeset
   133
                __ASSERT_ALWAYS( channel,
hgs
parents:
diff changeset
   134
                    PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   135
                channel->CancelAll();
hgs
parents:
diff changeset
   136
                }
hgs
parents:
diff changeset
   137
            }
hgs
parents:
diff changeset
   138
        }
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::Event exiting" )
hgs
parents:
diff changeset
   141
    }
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   144
// Creates new data channel
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   146
//
hgs
parents:
diff changeset
   147
MSatBIPDataChannel* CSatBIPUtils::CreateChannelL(
hgs
parents:
diff changeset
   148
    const TSatBearerType aBearerType, TInt& aErrCode )
hgs
parents:
diff changeset
   149
    {
hgs
parents:
diff changeset
   150
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CreateChannelL calling" )
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    TInt errCode( MSatBIPUtils::ESatBIPNoChannelAvail );
hgs
parents:
diff changeset
   153
    MSatBIPDataChannel* channel = NULL;
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
    // Get available channel ID
hgs
parents:
diff changeset
   156
    TSatChannelIdInfo* channelId( AvailableChannelID() );
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    // Check is the channel available
hgs
parents:
diff changeset
   159
    if ( channelId )
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        // Create the right type of data channel
hgs
parents:
diff changeset
   162
        if ( MSatBIPUtils::ESatGPRS == aBearerType )
hgs
parents:
diff changeset
   163
            {
hgs
parents:
diff changeset
   164
            LOG( NORMAL, 
hgs
parents:
diff changeset
   165
            "SATENGINE: CSatBIPUtils::CreateChannelL ESatGPRS" )
hgs
parents:
diff changeset
   166
            // New GPRS data channel
hgs
parents:
diff changeset
   167
            channel = CSatBIPGPRSDataChannel::NewLC( *this, iSocketServer,
hgs
parents:
diff changeset
   168
                *channelId, iConnection, iSubConnection );
hgs
parents:
diff changeset
   169
            // Reserve channel ID
hgs
parents:
diff changeset
   170
            channelId->ReserveChannel();
hgs
parents:
diff changeset
   171
            // Add data channel to list
hgs
parents:
diff changeset
   172
            iDataChannels->AppendL( channel );
hgs
parents:
diff changeset
   173
            // Remove from CleanupStack
hgs
parents:
diff changeset
   174
            CleanupStack::Pop( /* channel */ );
hgs
parents:
diff changeset
   175
            // Return code
hgs
parents:
diff changeset
   176
            errCode = MSatBIPUtils::ESatBIPSuccess;
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
#ifndef SAT_USE_DUMMY_TSY
hgs
parents:
diff changeset
   179
            // Start connection observer
hgs
parents:
diff changeset
   180
            if ( !iConnObserver )
hgs
parents:
diff changeset
   181
                {
hgs
parents:
diff changeset
   182
                LOG( NORMAL, " Starting connection observer" )
hgs
parents:
diff changeset
   183
                iConnObserver = 
hgs
parents:
diff changeset
   184
                    new ( ELeave ) CSatBIPConnectionObserver( *this );
hgs
parents:
diff changeset
   185
                iConnObserver->StartObserver();
hgs
parents:
diff changeset
   186
                }
hgs
parents:
diff changeset
   187
#endif
hgs
parents:
diff changeset
   188
            }
hgs
parents:
diff changeset
   189
        else
hgs
parents:
diff changeset
   190
            {
hgs
parents:
diff changeset
   191
            // Others that GPRS are not yet supported
hgs
parents:
diff changeset
   192
            LOG( NORMAL, 
hgs
parents:
diff changeset
   193
                "SATENGINE: CSatBIPUtils::CreateChannelL Not supported" )
hgs
parents:
diff changeset
   194
            errCode = MSatBIPUtils::ESatBIPNoChannelAvail;
hgs
parents:
diff changeset
   195
            }
hgs
parents:
diff changeset
   196
        }
hgs
parents:
diff changeset
   197
    else
hgs
parents:
diff changeset
   198
        {
hgs
parents:
diff changeset
   199
        // Channel IDs not available
hgs
parents:
diff changeset
   200
        LOG( NORMAL, 
hgs
parents:
diff changeset
   201
            "SATENGINE: CSatBIPUtils::CreateChannelL Not available" )
hgs
parents:
diff changeset
   202
        errCode = MSatBIPUtils::ESatBIPNoChannelAvail;
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    // Assign completion code
hgs
parents:
diff changeset
   206
    aErrCode = errCode;
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CreateChannelL exiting" )
hgs
parents:
diff changeset
   209
    return channel;
hgs
parents:
diff changeset
   210
    }
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   213
// Closes the data channel
hgs
parents:
diff changeset
   214
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   215
//
hgs
parents:
diff changeset
   216
TInt CSatBIPUtils::CloseChannel( const TInt aChannelId )
hgs
parents:
diff changeset
   217
    {
hgs
parents:
diff changeset
   218
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel calling" )
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    TInt errCode( MSatBIPUtils::ESatBIPChannelIdNotValid );
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
    TInt index( 0 );
hgs
parents:
diff changeset
   223
    TBool channelClosed( EFalse );
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    // Loop the list of data channels and close the correct one.
hgs
parents:
diff changeset
   226
    while ( index < iDataChannels->Count() && !channelClosed )
hgs
parents:
diff changeset
   227
        {
hgs
parents:
diff changeset
   228
        MSatBIPDataChannel* channel = iDataChannels->At( index );
hgs
parents:
diff changeset
   229
        __ASSERT_ALWAYS( channel, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
        if ( channel->ChannelId() == aChannelId )
hgs
parents:
diff changeset
   232
            {
hgs
parents:
diff changeset
   233
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel \
hgs
parents:
diff changeset
   234
            channel->ChannelId() == aChannelId" )
hgs
parents:
diff changeset
   235
             // Makes next data channel creation possible
hgs
parents:
diff changeset
   236
            iDataChannelActivated = EFalse;
hgs
parents:
diff changeset
   237
            // Channel found, close it and return Success.
hgs
parents:
diff changeset
   238
            channel->CloseChannel();
hgs
parents:
diff changeset
   239
            // Delete data channel
hgs
parents:
diff changeset
   240
            iDataChannels->Delete( index );
hgs
parents:
diff changeset
   241
            delete channel;
hgs
parents:
diff changeset
   242
            errCode = MSatBIPUtils::ESatBIPSuccess;
hgs
parents:
diff changeset
   243
            channelClosed = ETrue;
hgs
parents:
diff changeset
   244
            }
hgs
parents:
diff changeset
   245
        // Goto next channel
hgs
parents:
diff changeset
   246
        index++;
hgs
parents:
diff changeset
   247
        }
hgs
parents:
diff changeset
   248
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel index: %d", index )
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
    // Free the space left in possible Delete call.
hgs
parents:
diff changeset
   251
    iDataChannels->Compress();
hgs
parents:
diff changeset
   252
    
hgs
parents:
diff changeset
   253
    // Close connections if there're no active channels
hgs
parents:
diff changeset
   254
    if ( !IsContextActive() )
hgs
parents:
diff changeset
   255
        {
hgs
parents:
diff changeset
   256
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel\
hgs
parents:
diff changeset
   257
            Close connection and subconnection" )
hgs
parents:
diff changeset
   258
        iSubConnection.Close();
hgs
parents:
diff changeset
   259
        SetSubConnectionActivated( EFalse );
hgs
parents:
diff changeset
   260
        iConnection.Close();
hgs
parents:
diff changeset
   261
        SetConnectionActivated( EFalse );
hgs
parents:
diff changeset
   262
        
hgs
parents:
diff changeset
   263
        if ( iConnObserver )
hgs
parents:
diff changeset
   264
            {
hgs
parents:
diff changeset
   265
            iConnObserver->Cancel();
hgs
parents:
diff changeset
   266
            delete iConnObserver;
hgs
parents:
diff changeset
   267
            iConnObserver = NULL;
hgs
parents:
diff changeset
   268
            }
hgs
parents:
diff changeset
   269
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel\
hgs
parents:
diff changeset
   270
            Close iPacketService" )
hgs
parents:
diff changeset
   271
        iPacketService.Close();
hgs
parents:
diff changeset
   272
        iPacketServiceActive = EFalse;
hgs
parents:
diff changeset
   273
        }
hgs
parents:
diff changeset
   274
    
hgs
parents:
diff changeset
   275
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseChannel exiting" )
hgs
parents:
diff changeset
   276
    return errCode;
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   280
// Closes all data channels
hgs
parents:
diff changeset
   281
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   282
//
hgs
parents:
diff changeset
   283
void CSatBIPUtils::CloseAllChannels()
hgs
parents:
diff changeset
   284
    {
hgs
parents:
diff changeset
   285
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseAllChannels calling" )
hgs
parents:
diff changeset
   286
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::CloseAllChannels \
hgs
parents:
diff changeset
   287
          channelcount: %d", iChannelIds->Count() )
hgs
parents:
diff changeset
   288
    // Loop the list of data channels and close the correct one.
hgs
parents:
diff changeset
   289
    for ( TInt i = 0; i < iChannelIds->Count(); i++ )
hgs
parents:
diff changeset
   290
        {
hgs
parents:
diff changeset
   291
        TSatChannelIdInfo* id = iChannelIds->At( i );
hgs
parents:
diff changeset
   292
        // If channel is reserved -> Close it
hgs
parents:
diff changeset
   293
        if ( id->IsReserved() )
hgs
parents:
diff changeset
   294
            {
hgs
parents:
diff changeset
   295
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseAllChannels \
hgs
parents:
diff changeset
   296
            id->IsReserved()" )
hgs
parents:
diff changeset
   297
            CloseChannel( id->ChannelId() );
hgs
parents:
diff changeset
   298
            }
hgs
parents:
diff changeset
   299
        }
hgs
parents:
diff changeset
   300
    
hgs
parents:
diff changeset
   301
    // Close subsession to socket server
hgs
parents:
diff changeset
   302
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseAllChannels\
hgs
parents:
diff changeset
   303
            Close connection and subconnection" )
hgs
parents:
diff changeset
   304
    iSubConnection.Close();
hgs
parents:
diff changeset
   305
    SetSubConnectionActivated( EFalse );
hgs
parents:
diff changeset
   306
    iConnection.Close();
hgs
parents:
diff changeset
   307
    SetConnectionActivated( EFalse );
hgs
parents:
diff changeset
   308
    
hgs
parents:
diff changeset
   309
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::CloseAllChannels exiting" )
hgs
parents:
diff changeset
   310
    }
hgs
parents:
diff changeset
   311
hgs
parents:
diff changeset
   312
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   313
// Returns the correct data channel
hgs
parents:
diff changeset
   314
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   315
//
hgs
parents:
diff changeset
   316
MSatBIPDataChannel* CSatBIPUtils::DataChannel( const TInt aChannelId,
hgs
parents:
diff changeset
   317
            TInt& aErrCode )
hgs
parents:
diff changeset
   318
    {
hgs
parents:
diff changeset
   319
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataChannel calling" )
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
    // If the channel cannot be found, returns channel not valid error code
hgs
parents:
diff changeset
   322
    TInt errCode( MSatBIPUtils::ESatBIPChannelIdNotValid );
hgs
parents:
diff changeset
   323
    MSatBIPDataChannel* channel = NULL;
hgs
parents:
diff changeset
   324
    TBool found( EFalse );
hgs
parents:
diff changeset
   325
    TInt index( 0 );
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
    // Loop the list of data channels and return the correct one.
hgs
parents:
diff changeset
   328
    while ( index < iDataChannels->Count() && !found )
hgs
parents:
diff changeset
   329
        {
hgs
parents:
diff changeset
   330
        channel = iDataChannels->At( index );
hgs
parents:
diff changeset
   331
        __ASSERT_ALWAYS( channel, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   332
        // Compare channel ID's
hgs
parents:
diff changeset
   333
        if ( channel->ChannelId() == aChannelId )
hgs
parents:
diff changeset
   334
            {
hgs
parents:
diff changeset
   335
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataChannel \
hgs
parents:
diff changeset
   336
            channel->ChannelId() == aChannelId" )
hgs
parents:
diff changeset
   337
            // Channel found
hgs
parents:
diff changeset
   338
            found = ETrue;
hgs
parents:
diff changeset
   339
            if ( channel->IsContextActive() )
hgs
parents:
diff changeset
   340
                {
hgs
parents:
diff changeset
   341
                LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataChannel \
hgs
parents:
diff changeset
   342
                IsContextActive" )
hgs
parents:
diff changeset
   343
                // Channel found and it is active
hgs
parents:
diff changeset
   344
                errCode = MSatBIPUtils::ESatBIPSuccess;
hgs
parents:
diff changeset
   345
                }
hgs
parents:
diff changeset
   346
            else
hgs
parents:
diff changeset
   347
                {
hgs
parents:
diff changeset
   348
                // Channel found but it is closed
hgs
parents:
diff changeset
   349
                errCode = MSatBIPUtils::ESatBIPChannelClosed;
hgs
parents:
diff changeset
   350
                }
hgs
parents:
diff changeset
   351
            }
hgs
parents:
diff changeset
   352
        index++;
hgs
parents:
diff changeset
   353
        }
hgs
parents:
diff changeset
   354
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::DataChannel \
hgs
parents:
diff changeset
   355
          index: %d", index )
hgs
parents:
diff changeset
   356
    // Assign completion code to param
hgs
parents:
diff changeset
   357
    aErrCode = errCode;
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   360
        "SATENGINE: CSatBIPUtils::DataChannel exiting with return code %d",
hgs
parents:
diff changeset
   361
        errCode )
hgs
parents:
diff changeset
   362
    return channel;
hgs
parents:
diff changeset
   363
    }
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   366
// Generates TChannelStatus object
hgs
parents:
diff changeset
   367
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   368
//
hgs
parents:
diff changeset
   369
RSat::TChannelStatus CSatBIPUtils::GenerateChannelStatusL(
hgs
parents:
diff changeset
   370
    const TInt aChannelId, TInt aStatus )
hgs
parents:
diff changeset
   371
    {
hgs
parents:
diff changeset
   372
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GenerateChannelStatusL calling" )
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    // ChannelStatus's first byte contains channel ID and pdp context status,
hgs
parents:
diff changeset
   375
    // second byte contains information. values can be '00' or '05'
hgs
parents:
diff changeset
   376
    RSat::TChannelStatus channelStatus;
hgs
parents:
diff changeset
   377
    TInt err( MSatBIPUtils::ESatBIPNoChannelAvail );
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
    // Used to check the PDP context state
hgs
parents:
diff changeset
   380
    MSatBIPDataChannel* dataChannel = DataChannel( aChannelId, err );
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
    // If channel is not active, status is still needed
hgs
parents:
diff changeset
   383
    if ( ESatBIPSuccess == err || ESatBIPChannelClosed == err )
hgs
parents:
diff changeset
   384
        {
hgs
parents:
diff changeset
   385
        // Generate the first byte
hgs
parents:
diff changeset
   386
        TUint8 channelId( 0 );   // last 3 bits.
hgs
parents:
diff changeset
   387
        TUint8 pdpContext( 0 );  // first bit
hgs
parents:
diff changeset
   388
        TUint8 firstByte( 0 );    // First byte
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
        // Channel ID. Bits 6 to 8.
hgs
parents:
diff changeset
   391
        channelId = dataChannel->ChannelStatusChannelId();
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
        // If PDP Context is active, first bit is 1
hgs
parents:
diff changeset
   394
        if ( dataChannel->IsContextActive() )
hgs
parents:
diff changeset
   395
            {
hgs
parents:
diff changeset
   396
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GenerateChannelStatusL \
hgs
parents:
diff changeset
   397
            dataChannel IsContextActive" )
hgs
parents:
diff changeset
   398
            pdpContext = 1 << KPDPContextPos;
hgs
parents:
diff changeset
   399
            }
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
        // We don't need data channel anymore
hgs
parents:
diff changeset
   402
        dataChannel = NULL;
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
        // All the information for the first byte is gathered
hgs
parents:
diff changeset
   405
        firstByte = static_cast<TUint8>( pdpContext ^ channelId );
hgs
parents:
diff changeset
   406
        channelStatus.Append( firstByte );
hgs
parents:
diff changeset
   407
        // Second byte should go straigth
hgs
parents:
diff changeset
   408
        channelStatus.Append( aStatus );
hgs
parents:
diff changeset
   409
        // LOG values
hgs
parents:
diff changeset
   410
        LOG2( NORMAL,
hgs
parents:
diff changeset
   411
            "SATENGINE: CSatBIPUtils::GenerateChannelStatusL First byte: %b",
hgs
parents:
diff changeset
   412
            firstByte )
hgs
parents:
diff changeset
   413
        LOG2( NORMAL,
hgs
parents:
diff changeset
   414
            "SATENGINE: CSatBIPUtils::GenerateChannelStatusL Second byte: %b",
hgs
parents:
diff changeset
   415
            aStatus )
hgs
parents:
diff changeset
   416
        }
hgs
parents:
diff changeset
   417
    else
hgs
parents:
diff changeset
   418
        {
hgs
parents:
diff changeset
   419
        LOG2( NORMAL, "SATENGINE: CSatBIPUtils::GenerateChannelStatusL \
hgs
parents:
diff changeset
   420
            Data channel not found: %i", err )
hgs
parents:
diff changeset
   421
        User::LeaveIfError( KErrNotFound );
hgs
parents:
diff changeset
   422
        }
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GenerateChannelStatusL exiting" )
hgs
parents:
diff changeset
   425
    return channelStatus;
hgs
parents:
diff changeset
   426
    }
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   429
// Returns the interface reference to APN handler
hgs
parents:
diff changeset
   430
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   431
//
hgs
parents:
diff changeset
   432
MSatApnHandler& CSatBIPUtils::ApnHandler()
hgs
parents:
diff changeset
   433
    {
hgs
parents:
diff changeset
   434
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ApnHandler calling" )
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
    // Assert, Apn handler cannot be NULL
hgs
parents:
diff changeset
   437
    __ASSERT_ALWAYS( iApnHandler, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ApnHandler exiting" )
hgs
parents:
diff changeset
   440
    return *iApnHandler;
hgs
parents:
diff changeset
   441
    }
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   444
// Returns the state of the PDP Context
hgs
parents:
diff changeset
   445
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   446
//
hgs
parents:
diff changeset
   447
TBool CSatBIPUtils::IsContextActive()
hgs
parents:
diff changeset
   448
    {
hgs
parents:
diff changeset
   449
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::IsContextActive calling" )
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
    TBool retVal( EFalse );
hgs
parents:
diff changeset
   452
    TInt index( 0 );
hgs
parents:
diff changeset
   453
    
hgs
parents:
diff changeset
   454
    // Loop the list of data channels and end if active channel is found
hgs
parents:
diff changeset
   455
    while ( index < iDataChannels->Count() && !retVal )
hgs
parents:
diff changeset
   456
        {
hgs
parents:
diff changeset
   457
        MSatBIPDataChannel* channel = iDataChannels->At( index );
hgs
parents:
diff changeset
   458
        __ASSERT_ALWAYS( channel, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   459
        retVal = channel->IsContextActive();
hgs
parents:
diff changeset
   460
        // Goto next channel
hgs
parents:
diff changeset
   461
        index++;
hgs
parents:
diff changeset
   462
        }
hgs
parents:
diff changeset
   463
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::IsContextActive \
hgs
parents:
diff changeset
   464
          index: %d", index )
hgs
parents:
diff changeset
   465
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::IsContextActive exiting" )
hgs
parents:
diff changeset
   466
    return retVal;
hgs
parents:
diff changeset
   467
    }
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   470
// Returns the array of data channels
hgs
parents:
diff changeset
   471
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   472
//
hgs
parents:
diff changeset
   473
CArrayPtrFlat<MSatBIPDataChannel>* CSatBIPUtils::DataChannels()
hgs
parents:
diff changeset
   474
    {
hgs
parents:
diff changeset
   475
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataChannels calling - exiting" )
hgs
parents:
diff changeset
   476
    return iDataChannels;
hgs
parents:
diff changeset
   477
    }
hgs
parents:
diff changeset
   478
hgs
parents:
diff changeset
   479
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   480
// Request to notify when data is available
hgs
parents:
diff changeset
   481
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   482
//
hgs
parents:
diff changeset
   483
void CSatBIPUtils::NotifyDataAvailable(
hgs
parents:
diff changeset
   484
    MSatBIPDataAvailableObserver* aObserver )
hgs
parents:
diff changeset
   485
    {
hgs
parents:
diff changeset
   486
    LOG( SIMPLE,
hgs
parents:
diff changeset
   487
        "SATENGINE: CSatBIPUtils::NotifyDataAvailable calling - exiting" )
hgs
parents:
diff changeset
   488
    iDataAvailableObserver = aObserver;
hgs
parents:
diff changeset
   489
    }
hgs
parents:
diff changeset
   490
hgs
parents:
diff changeset
   491
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   492
// Request to notify when an error occurs in data channel
hgs
parents:
diff changeset
   493
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   494
//
hgs
parents:
diff changeset
   495
void CSatBIPUtils::NotifyChannelStatus(
hgs
parents:
diff changeset
   496
    MSatBIPChannelStatusObserver* aObserver )
hgs
parents:
diff changeset
   497
    {
hgs
parents:
diff changeset
   498
    LOG( SIMPLE,
hgs
parents:
diff changeset
   499
        "SATENGINE: CSatBIPUtils::NotifyChannelStatus calling - exiting" )
hgs
parents:
diff changeset
   500
    iChannelStatusObserver = aObserver;
hgs
parents:
diff changeset
   501
    }
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   504
// Cancels the DataAvailable request
hgs
parents:
diff changeset
   505
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   506
//
hgs
parents:
diff changeset
   507
void CSatBIPUtils::CancelDataAvailable()
hgs
parents:
diff changeset
   508
    {
hgs
parents:
diff changeset
   509
    LOG( SIMPLE,
hgs
parents:
diff changeset
   510
        "SATENGINE: CSatBIPUtils::CancelDataAvailable calling - exiting" )
hgs
parents:
diff changeset
   511
    iDataAvailableObserver = NULL;
hgs
parents:
diff changeset
   512
    }
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   515
// Cancels the ChannelStatus request
hgs
parents:
diff changeset
   516
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   517
//
hgs
parents:
diff changeset
   518
void CSatBIPUtils::CancelChannelStatus()
hgs
parents:
diff changeset
   519
    {
hgs
parents:
diff changeset
   520
    LOG( SIMPLE,
hgs
parents:
diff changeset
   521
        "SATENGINE: CSatBIPUtils::CancelChannelStatus calling - exiting" )
hgs
parents:
diff changeset
   522
    iChannelStatusObserver = NULL;
hgs
parents:
diff changeset
   523
    }
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   526
// DataAvailable event. Notifies observer.
hgs
parents:
diff changeset
   527
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   528
//
hgs
parents:
diff changeset
   529
void CSatBIPUtils::DataAvailable( const TInt aChannelId, const TInt aLength )
hgs
parents:
diff changeset
   530
    {
hgs
parents:
diff changeset
   531
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataAvailable calling" )
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
    // If there is an active request for this event, notify observer.
hgs
parents:
diff changeset
   534
    if ( iDataAvailableObserver )
hgs
parents:
diff changeset
   535
        {
hgs
parents:
diff changeset
   536
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataAvailable \
hgs
parents:
diff changeset
   537
        iDataAvailableObserver true" )
hgs
parents:
diff changeset
   538
        iDataAvailableObserver->DataAvailable( aChannelId, aLength );
hgs
parents:
diff changeset
   539
        }
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DataAvailable exiting" )
hgs
parents:
diff changeset
   542
    }
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   545
// ChannelStatus event. Notifies observer.
hgs
parents:
diff changeset
   546
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   547
//
hgs
parents:
diff changeset
   548
void CSatBIPUtils::ChannelStatus( const TInt aChannelId, const TInt aStatus )
hgs
parents:
diff changeset
   549
    {
hgs
parents:
diff changeset
   550
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ChannelStatus calling" )
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
    // If there is an active request for this event, notify observer.
hgs
parents:
diff changeset
   553
    if ( iChannelStatusObserver )
hgs
parents:
diff changeset
   554
        {
hgs
parents:
diff changeset
   555
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ChannelStatus \
hgs
parents:
diff changeset
   556
        iChannelStatusObserver true" )
hgs
parents:
diff changeset
   557
        iChannelStatusObserver->ChannelStatus( aChannelId, aStatus );
hgs
parents:
diff changeset
   558
        }
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ChannelStatus exiting" )
hgs
parents:
diff changeset
   561
    }
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   564
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   565
// might leave.
hgs
parents:
diff changeset
   566
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   567
//
hgs
parents:
diff changeset
   568
CSatBIPUtils::CSatBIPUtils( MSatUtils& aUtils ) :
hgs
parents:
diff changeset
   569
    iChannelId( NULL ),
hgs
parents:
diff changeset
   570
    iUtils( aUtils )
hgs
parents:
diff changeset
   571
    {
hgs
parents:
diff changeset
   572
    LOG( SIMPLE,
hgs
parents:
diff changeset
   573
        "SATENGINE: CSatBIPUtils::CSatBIPUtils calling-exiting" )
hgs
parents:
diff changeset
   574
    }
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   577
// Two-phased constructor.
hgs
parents:
diff changeset
   578
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   579
//
hgs
parents:
diff changeset
   580
void CSatBIPUtils::ConstructL()
hgs
parents:
diff changeset
   581
    {
hgs
parents:
diff changeset
   582
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ConstructL calling" )
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
    // Create array for the data channels.
hgs
parents:
diff changeset
   585
    iDataChannels =
hgs
parents:
diff changeset
   586
        new ( ELeave ) CArrayPtrFlat<MSatBIPDataChannel>( KMaxAvailChannels );
hgs
parents:
diff changeset
   587
hgs
parents:
diff changeset
   588
    // Create array for Channel ID infos
hgs
parents:
diff changeset
   589
    iChannelIds =
hgs
parents:
diff changeset
   590
        new ( ELeave ) CArrayPtrFlat<TSatChannelIdInfo>( KMaxAvailChannels );
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
    TUint8 index = 1;
hgs
parents:
diff changeset
   593
    
hgs
parents:
diff changeset
   594
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel1, index++ );
hgs
parents:
diff changeset
   595
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   596
    iChannelId = NULL;
hgs
parents:
diff changeset
   597
    
hgs
parents:
diff changeset
   598
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel2, index++ );
hgs
parents:
diff changeset
   599
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   600
    iChannelId = NULL;
hgs
parents:
diff changeset
   601
    
hgs
parents:
diff changeset
   602
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel3, index++ );
hgs
parents:
diff changeset
   603
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   604
    iChannelId = NULL;
hgs
parents:
diff changeset
   605
    
hgs
parents:
diff changeset
   606
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel4, index++ );
hgs
parents:
diff changeset
   607
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   608
    iChannelId = NULL;
hgs
parents:
diff changeset
   609
    
hgs
parents:
diff changeset
   610
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel5, index++ );
hgs
parents:
diff changeset
   611
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   612
    iChannelId = NULL;
hgs
parents:
diff changeset
   613
    
hgs
parents:
diff changeset
   614
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel6, index++ );
hgs
parents:
diff changeset
   615
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   616
    iChannelId = NULL;
hgs
parents:
diff changeset
   617
    
hgs
parents:
diff changeset
   618
    iChannelId = new ( ELeave ) TSatChannelIdInfo( RSat::KChannel7, index++ );
hgs
parents:
diff changeset
   619
    iChannelIds->AppendL( iChannelId );
hgs
parents:
diff changeset
   620
    iChannelId = NULL;
hgs
parents:
diff changeset
   621
    
hgs
parents:
diff changeset
   622
    // Regiseter to listen events
hgs
parents:
diff changeset
   623
    iUtils.RegisterL( this, MSatUtils::ECommandCancelled );
hgs
parents:
diff changeset
   624
    iUtils.RegisterL( this, MSatUtils::ECancelledUsingEndKey );
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
    // Connect to Socket Server
hgs
parents:
diff changeset
   627
    User::LeaveIfError( iSocketServer.Connect() );
hgs
parents:
diff changeset
   628
    iPacketServiceActive = EFalse;
hgs
parents:
diff changeset
   629
    iApnHandler = CSatApnHandler::NewL( iUtils );
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
    iWrapper = new ( ELeave ) CSatSActiveWrapper;
hgs
parents:
diff changeset
   632
    
hgs
parents:
diff changeset
   633
    SetConnectionActivated( EFalse );
hgs
parents:
diff changeset
   634
    SetSubConnectionActivated( EFalse );
hgs
parents:
diff changeset
   635
hgs
parents:
diff changeset
   636
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ConstructL exiting" )
hgs
parents:
diff changeset
   637
    }
hgs
parents:
diff changeset
   638
hgs
parents:
diff changeset
   639
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   640
// Returns next available channel ID
hgs
parents:
diff changeset
   641
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   642
//
hgs
parents:
diff changeset
   643
TSatChannelIdInfo* CSatBIPUtils::AvailableChannelID()
hgs
parents:
diff changeset
   644
    {
hgs
parents:
diff changeset
   645
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::AvailableChannelID calling" )
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
    TSatChannelIdInfo* channelId = NULL;
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
    TInt index( 0 );
hgs
parents:
diff changeset
   650
    TBool idFound( EFalse );
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
    // Loop channel IDs
hgs
parents:
diff changeset
   653
    while ( index < iChannelIds->Count() && !idFound )
hgs
parents:
diff changeset
   654
        {
hgs
parents:
diff changeset
   655
        channelId = iChannelIds->At( index );
hgs
parents:
diff changeset
   656
        // If channel is free, take it
hgs
parents:
diff changeset
   657
        if ( !channelId->IsReserved() )
hgs
parents:
diff changeset
   658
            {
hgs
parents:
diff changeset
   659
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::AvailableChannelID \
hgs
parents:
diff changeset
   660
            channel free" )
hgs
parents:
diff changeset
   661
            idFound = ETrue;
hgs
parents:
diff changeset
   662
            }
hgs
parents:
diff changeset
   663
         // goto next channel
hgs
parents:
diff changeset
   664
        index++;
hgs
parents:
diff changeset
   665
        }
hgs
parents:
diff changeset
   666
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::AvailableChannelID \
hgs
parents:
diff changeset
   667
          index: %d", index )
hgs
parents:
diff changeset
   668
    if ( !idFound )
hgs
parents:
diff changeset
   669
        {
hgs
parents:
diff changeset
   670
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::AvailableChannelID \
hgs
parents:
diff changeset
   671
        idFound false" )
hgs
parents:
diff changeset
   672
        // If not found, return NULL
hgs
parents:
diff changeset
   673
        channelId = NULL;
hgs
parents:
diff changeset
   674
        }
hgs
parents:
diff changeset
   675
hgs
parents:
diff changeset
   676
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::AvailableChannelID exiting" )
hgs
parents:
diff changeset
   677
    return channelId;
hgs
parents:
diff changeset
   678
    }
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   681
// Blocks synchronous requests
hgs
parents:
diff changeset
   682
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   683
//
hgs
parents:
diff changeset
   684
RPacketQoS::TQoSGPRSNegotiated CSatBIPUtils::ProposeQoSParametersL(
hgs
parents:
diff changeset
   685
    const RPacketQoS::TQoSGPRSRequested& aQoSParams )
hgs
parents:
diff changeset
   686
    {
hgs
parents:
diff changeset
   687
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ProposeQoSParametersL calling" )
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
    // Number of contexts
hgs
parents:
diff changeset
   690
    TInt count( ContextCount() ); // Get the number of contexts
hgs
parents:
diff changeset
   691
    // QoS profile name
hgs
parents:
diff changeset
   692
    TName profName;
hgs
parents:
diff changeset
   693
    // Handle to the actual context
hgs
parents:
diff changeset
   694
    RPacketContext packetContext;
hgs
parents:
diff changeset
   695
    // QoS session
hgs
parents:
diff changeset
   696
    RPacketQoS qos;
hgs
parents:
diff changeset
   697
    // Context info
hgs
parents:
diff changeset
   698
    RPacketService::TContextInfo info;
hgs
parents:
diff changeset
   699
    // Error value for asynchronous calls
hgs
parents:
diff changeset
   700
    TInt statusError( KErrNone );
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
    if ( count > 0 ) // At least one context found
hgs
parents:
diff changeset
   703
        {
hgs
parents:
diff changeset
   704
        // Get the last contexts info
hgs
parents:
diff changeset
   705
        iPacketService.GetContextInfo( 
hgs
parents:
diff changeset
   706
            iWrapper->RequestStatus(), count - 1, info );
hgs
parents:
diff changeset
   707
hgs
parents:
diff changeset
   708
        statusError = iWrapper->SetActiveAndWait(); // Wait for completion
hgs
parents:
diff changeset
   709
        LOG2( SIMPLE, "     ContextInfo iActiveStatus: %i", statusError )
hgs
parents:
diff changeset
   710
        LOG2( SIMPLE, "     ContextInfo CntxStatus: %i", info.iStatus )
hgs
parents:
diff changeset
   711
        // Leave point
hgs
parents:
diff changeset
   712
        User::LeaveIfError( statusError );
hgs
parents:
diff changeset
   713
        }
hgs
parents:
diff changeset
   714
    else
hgs
parents:
diff changeset
   715
        {
hgs
parents:
diff changeset
   716
        // Didn't find any contexts
hgs
parents:
diff changeset
   717
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   718
        }
hgs
parents:
diff changeset
   719
hgs
parents:
diff changeset
   720
    // Get the context by name
hgs
parents:
diff changeset
   721
    LOG( SIMPLE, "     Open existing context" )
hgs
parents:
diff changeset
   722
    User::LeaveIfError(
hgs
parents:
diff changeset
   723
        packetContext.OpenExistingContext( iPacketService, info.iName ) );
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
    CleanupClosePushL( packetContext );
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
    // Get the QoS Profile
hgs
parents:
diff changeset
   728
    LOG( SIMPLE, "     Get QoS Profile name" )
hgs
parents:
diff changeset
   729
    User::LeaveIfError( packetContext.GetProfileName( profName ) );
hgs
parents:
diff changeset
   730
hgs
parents:
diff changeset
   731
    // Get the instance of the QoS profile
hgs
parents:
diff changeset
   732
    if ( profName.Length() > 0 )
hgs
parents:
diff changeset
   733
        {
hgs
parents:
diff changeset
   734
        LOG( SIMPLE, "     Open existing QoS profile" )
hgs
parents:
diff changeset
   735
        User::LeaveIfError( qos.OpenExistingQoS( packetContext, profName ) );
hgs
parents:
diff changeset
   736
        }
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
    CleanupClosePushL( qos );
hgs
parents:
diff changeset
   739
hgs
parents:
diff changeset
   740
    TPckg<RPacketQoS::TQoSGPRSRequested> qosPckg( aQoSParams );
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
    qos.SetProfileParameters( iWrapper->RequestStatus(), qosPckg );
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
    User::LeaveIfError( iWrapper->SetActiveAndWait() ); // Wait for completion
hgs
parents:
diff changeset
   745
hgs
parents:
diff changeset
   746
    // Get negotioted parameters
hgs
parents:
diff changeset
   747
    RPacketQoS::TQoSGPRSNegotiated negParams;
hgs
parents:
diff changeset
   748
    TPckg<RPacketQoS::TQoSGPRSNegotiated> negPckg( negParams );
hgs
parents:
diff changeset
   749
    qos.GetProfileParameters( iWrapper->RequestStatus(), negPckg );
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
    User::LeaveIfError( iWrapper->SetActiveAndWait() ); // Wait for completion
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
    LOG2( SIMPLE, "     GetNegQoSParams Status: %i", statusError )
hgs
parents:
diff changeset
   754
    LOG2( SIMPLE, "     GetNegQoSParams Reliability: %i", 
hgs
parents:
diff changeset
   755
          negParams.iReliability )
hgs
parents:
diff changeset
   756
    LOG2( SIMPLE, "     GetNegQoSParams Precedence: %i", 
hgs
parents:
diff changeset
   757
          negParams.iPrecedence )
hgs
parents:
diff changeset
   758
    LOG2( SIMPLE, "     GetNegQoSParams Delay: %i", negParams.iDelay )
hgs
parents:
diff changeset
   759
    LOG2( SIMPLE, "     GetNegQoSParams Peak: %i", negParams.iPeakThroughput )
hgs
parents:
diff changeset
   760
    LOG2( SIMPLE, "     GetNegQoSParams Mean: %i", negParams.iMeanThroughput )
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
    // Cleaning and closing: packetContext, qos
hgs
parents:
diff changeset
   763
    CleanupStack::PopAndDestroy( KProposeQoSParametersPop );
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ProposeQoSParametersL exiting" )
hgs
parents:
diff changeset
   766
    return negParams;
hgs
parents:
diff changeset
   767
    }
hgs
parents:
diff changeset
   768
hgs
parents:
diff changeset
   769
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   770
// Opens session to GPRS Service
hgs
parents:
diff changeset
   771
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   772
//
hgs
parents:
diff changeset
   773
TInt CSatBIPUtils::GprsService()
hgs
parents:
diff changeset
   774
    {
hgs
parents:
diff changeset
   775
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GprsService calling" )
hgs
parents:
diff changeset
   776
hgs
parents:
diff changeset
   777
    TInt ret( KErrNone );
hgs
parents:
diff changeset
   778
    if ( !iPacketServiceActive )
hgs
parents:
diff changeset
   779
        {
hgs
parents:
diff changeset
   780
        LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GprsService \
hgs
parents:
diff changeset
   781
        iPacketServiceActive false" )
hgs
parents:
diff changeset
   782
        ret = iPacketService.Open( *( iUtils.MultiModeApi().Phone() ) );
hgs
parents:
diff changeset
   783
        iPacketServiceActive = ETrue;
hgs
parents:
diff changeset
   784
        }
hgs
parents:
diff changeset
   785
hgs
parents:
diff changeset
   786
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::GprsService exiting" )
hgs
parents:
diff changeset
   787
    return ret;
hgs
parents:
diff changeset
   788
    }
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   791
// Gives reference to RPacketService
hgs
parents:
diff changeset
   792
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   793
//
hgs
parents:
diff changeset
   794
RPacketService& CSatBIPUtils::PacketService()
hgs
parents:
diff changeset
   795
    {
hgs
parents:
diff changeset
   796
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::PacketService calling" )
hgs
parents:
diff changeset
   797
hgs
parents:
diff changeset
   798
    GprsService();
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::PacketService exiting" )
hgs
parents:
diff changeset
   801
    return iPacketService;
hgs
parents:
diff changeset
   802
    }
hgs
parents:
diff changeset
   803
hgs
parents:
diff changeset
   804
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   805
// CSatBIPUtils::ConnectionStatus
hgs
parents:
diff changeset
   806
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   807
//
hgs
parents:
diff changeset
   808
RPacketService::TStatus CSatBIPUtils::ConnectionStatus() const
hgs
parents:
diff changeset
   809
    {
hgs
parents:
diff changeset
   810
    LOG( NORMAL,
hgs
parents:
diff changeset
   811
        "SATENGINE: CSatBIPUtils::ConnectionStatus calling" )
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
#ifndef SAT_USE_DUMMY_TSY
hgs
parents:
diff changeset
   814
    RPacketService::TStatus status( RPacketService::EStatusSuspended );
hgs
parents:
diff changeset
   815
#else
hgs
parents:
diff changeset
   816
    RPacketService::TStatus status( RPacketService::EStatusActive );
hgs
parents:
diff changeset
   817
#endif
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
    if ( iConnObserver )
hgs
parents:
diff changeset
   820
        {
hgs
parents:
diff changeset
   821
        LOG( NORMAL,
hgs
parents:
diff changeset
   822
        "SATENGINE: CSatBIPUtils::ConnectionStatus iConnObserver true" )
hgs
parents:
diff changeset
   823
        status = iConnObserver->Status();
hgs
parents:
diff changeset
   824
        }
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
    LOG( NORMAL,
hgs
parents:
diff changeset
   827
        "SATENGINE: CSatBIPUtils::ConnectionStatus exiting" )
hgs
parents:
diff changeset
   828
    return status;
hgs
parents:
diff changeset
   829
    }
hgs
parents:
diff changeset
   830
hgs
parents:
diff changeset
   831
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   832
// CSatBIPUtils::StopUdpLink
hgs
parents:
diff changeset
   833
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   834
//
hgs
parents:
diff changeset
   835
void CSatBIPUtils::StopUdpLink()
hgs
parents:
diff changeset
   836
    {
hgs
parents:
diff changeset
   837
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::StopUdpLink  calling" )
hgs
parents:
diff changeset
   838
    if ( iDataChannels )
hgs
parents:
diff changeset
   839
        {
hgs
parents:
diff changeset
   840
        const TInt channelCount( iDataChannels->Count() );
hgs
parents:
diff changeset
   841
        LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::StopUdpLink \
hgs
parents:
diff changeset
   842
          channelCount: %d", channelCount )
hgs
parents:
diff changeset
   843
        // Cancel all channels
hgs
parents:
diff changeset
   844
        for ( TInt index = 0; index < channelCount; index++ )
hgs
parents:
diff changeset
   845
            {
hgs
parents:
diff changeset
   846
            MSatBIPDataChannel* channel = iDataChannels->At( index );
hgs
parents:
diff changeset
   847
            __ASSERT_ALWAYS( channel,
hgs
parents:
diff changeset
   848
                PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   849
            channel->StopUdpSocket();
hgs
parents:
diff changeset
   850
            }
hgs
parents:
diff changeset
   851
        }
hgs
parents:
diff changeset
   852
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::StopUdpLink exiting" )
hgs
parents:
diff changeset
   853
    }
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   856
// Synchronous request complete
hgs
parents:
diff changeset
   857
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   858
//
hgs
parents:
diff changeset
   859
TInt CSatBIPUtils::ContextCount()
hgs
parents:
diff changeset
   860
    {
hgs
parents:
diff changeset
   861
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ContextCount calling" )
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
    // Number of contexts
hgs
parents:
diff changeset
   864
    TInt count( 0 );
hgs
parents:
diff changeset
   865
    TInt maxAllowed( 0 );
hgs
parents:
diff changeset
   866
hgs
parents:
diff changeset
   867
    // Init PacketService
hgs
parents:
diff changeset
   868
    TInt error( GprsService() );
hgs
parents:
diff changeset
   869
hgs
parents:
diff changeset
   870
    if ( KErrNone == error )
hgs
parents:
diff changeset
   871
        {
hgs
parents:
diff changeset
   872
        // Enumerate contexts
hgs
parents:
diff changeset
   873
        iPacketService.EnumerateContexts( 
hgs
parents:
diff changeset
   874
            iWrapper->RequestStatus(), count, maxAllowed );
hgs
parents:
diff changeset
   875
        error = iWrapper->SetActiveAndWait(); // Wait for completion
hgs
parents:
diff changeset
   876
        LOG2( SIMPLE, "     EnumContexts Status: %i", error )
hgs
parents:
diff changeset
   877
        LOG2( SIMPLE, "     EnumContexts Count: %i", count )
hgs
parents:
diff changeset
   878
        LOG2( SIMPLE, "     EnumContexts MaxAllowed: %i", maxAllowed )
hgs
parents:
diff changeset
   879
        // Check status
hgs
parents:
diff changeset
   880
        if ( KErrNone != error )
hgs
parents:
diff changeset
   881
            {
hgs
parents:
diff changeset
   882
            LOG( SIMPLE, "SATENGINE: CSatBIPUtils::ContextCount \
hgs
parents:
diff changeset
   883
            KErrNone != error" )
hgs
parents:
diff changeset
   884
            count = 0;
hgs
parents:
diff changeset
   885
            }
hgs
parents:
diff changeset
   886
        }
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
    LOG2( SIMPLE, "SATENGINE: CSatBIPUtils::ContextCount exiting: %i", count )
hgs
parents:
diff changeset
   889
    return count;
hgs
parents:
diff changeset
   890
    }
hgs
parents:
diff changeset
   891
hgs
parents:
diff changeset
   892
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   893
// CSatBIPUtils::SetConnectionActivated()
hgs
parents:
diff changeset
   894
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   895
//
hgs
parents:
diff changeset
   896
void CSatBIPUtils::SetConnectionActivated( TBool aSet )
hgs
parents:
diff changeset
   897
    {
hgs
parents:
diff changeset
   898
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::SetConnectionActivated calling" )
hgs
parents:
diff changeset
   899
    iConnectionActivated = aSet;
hgs
parents:
diff changeset
   900
    LOG( SIMPLE, "SATENGINE: CSatBIPUtils::SetConnectionActivated exiting" )
hgs
parents:
diff changeset
   901
    }
hgs
parents:
diff changeset
   902
    
hgs
parents:
diff changeset
   903
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   904
// CSatBIPUtils::IsConnectionActivated()
hgs
parents:
diff changeset
   905
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   906
//
hgs
parents:
diff changeset
   907
TBool CSatBIPUtils::IsConnectionActivated()
hgs
parents:
diff changeset
   908
    {
hgs
parents:
diff changeset
   909
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   910
        "SATENGINE: CSatBIPUtils::IsConnectionActivated calling-exiting" )
hgs
parents:
diff changeset
   911
    return iConnectionActivated;
hgs
parents:
diff changeset
   912
    }
hgs
parents:
diff changeset
   913
hgs
parents:
diff changeset
   914
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   915
// CSatBIPUtils::SetSubConnectionActivated()
hgs
parents:
diff changeset
   916
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   917
//
hgs
parents:
diff changeset
   918
void CSatBIPUtils::SetSubConnectionActivated( TBool aSet )
hgs
parents:
diff changeset
   919
    {
hgs
parents:
diff changeset
   920
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   921
        "SATENGINE: CSatBIPUtils::SetSubConnectionActivated calling" )
hgs
parents:
diff changeset
   922
    iSubConnectionActivated = aSet;
hgs
parents:
diff changeset
   923
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   924
        "SATENGINE: CSatBIPUtils::SetSubConnectionActivated exiting" )
hgs
parents:
diff changeset
   925
    }
hgs
parents:
diff changeset
   926
    
hgs
parents:
diff changeset
   927
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   928
// CSatBIPUtils::IsSubConnectionActivated()
hgs
parents:
diff changeset
   929
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   930
//
hgs
parents:
diff changeset
   931
TBool CSatBIPUtils::IsSubConnectionActivated()
hgs
parents:
diff changeset
   932
    {
hgs
parents:
diff changeset
   933
    LOG( SIMPLE, 
hgs
parents:
diff changeset
   934
        "SATENGINE: CSatBIPUtils::IsSubConnectionActivated calling-exiting" )
hgs
parents:
diff changeset
   935
    return iSubConnectionActivated;
hgs
parents:
diff changeset
   936
    }
hgs
parents:
diff changeset
   937