satengine/SatServer/Engine/src/CSatBIPGPRSDataChannel.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/satengine/SatServer/Engine/src/CSatBIPGPRSDataChannel.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1692 +0,0 @@
-/*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  GPRS Data channel for BIP
-*
-*/
-
-
-#include <etelqos.h>
-#include <cmmanager.h>
-#include <cmconnectionmethod.h>
-#include <cmpluginpacketdatadef.h>
-#include <cs_subconevents.h>                    // For subconnection events
-#include <networking/qos3gpp_subconparams.h>    // For extension parameters
-#include <e32std.h>                             // TRealFormat
-#include <e32cmn.h>
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <in_sock_internal.h>                   // For KSoUdpRecvBuf contant
-#endif
-#include "CSatBIPUtils.h"
-#include "CSatBIPGPRSDataChannel.h"
-#include "SatLog.h"
-#include "EnginePanic.h"
-#include "CSatBIPDataSender.h"
-#include "CSatBIPDataReceiver.h"
-#include "MSatSendDataObserver.h"
-#include "MSatConnectionObserver.h"
-#include "TSatChannelIDInfo.h"
-#include "TSatQoSParser.h"
-#include "csatbipsubconneventobserver.h"
-#include "csatsactivewrapper.h"
- 
-// Required GPRS parameters
-const TUint8 KReqGprsQoSParams = 6;
-// Required packet protocol type is always 02 for GPRS -> IP Protocol
-const TUint8 KReqPacketProtType = 0x02;
-// Position of the protocol type in the array
-const TUint8 KProtocolPos = 5;
-// Lengths of IP address
-const TUint8 KIPv4Length = 4;
-const TUint8 KIPv6Length = 16;
-
-#ifdef SAT_USE_DUMMY_TSY
-const TUint8 KIpAddressSize( 15 );
-const TUint8 KIpv4Length( 4 );
-const TUint8 KIpv6Length( 16 );
-const TUint8 KIpAddressA( 0 );
-const TUint KIpAddressAValue( 127 );
-const TUint8 KIpAddressB( 1 );
-const TUint KIpAddressBValue( 0 );
-const TUint8 KIpAddressC( 2 );
-const TUint KIpAddressCValue( 0 );
-const TUint8 KIpAddressD( 3 );
-const TUint KIpAddressDValueDestination( 2 );
-const TUint KIpAddressDValueLocal( 3 );
-#endif
-
-#ifdef ENABLE_SAT_LOGGING
-const TUint8 KIpAddressLogSize( 40 );
-#endif
-
-const TInt KReCheckStatusDelay = 100000; // 100ms
-const TInt KMaxAttempts = 20;            // 20*100ms= 2s 
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-CSatBIPGPRSDataChannel* CSatBIPGPRSDataChannel::NewL(
-    CSatBIPUtils& aUtils,
-    RSocketServ& aSocketServer,
-    TSatChannelIdInfo& aChannelId,
-    RConnection& aConnection,
-    RSubConnection& aSubConnection )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::NewL calling" )
-
-    CSatBIPGPRSDataChannel* self = new( ELeave ) CSatBIPGPRSDataChannel( 
-        aUtils, aSocketServer, aChannelId, aConnection, aSubConnection );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::NewL exiting" )
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-CSatBIPGPRSDataChannel* CSatBIPGPRSDataChannel::NewLC(
-    CSatBIPUtils& aUtils,
-    RSocketServ& aSocketServer,
-    TSatChannelIdInfo& aChannelId,
-    RConnection& aConnection,
-    RSubConnection& aSubConnection )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::NewLC calling" )
-
-    CSatBIPGPRSDataChannel* self = new ( ELeave ) CSatBIPGPRSDataChannel( 
-        aUtils, aSocketServer, aChannelId, aConnection, aSubConnection );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::NewLC exiting" )
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// destructor.
-// ---------------------------------------------------------------------------
-//
-CSatBIPGPRSDataChannel::~CSatBIPGPRSDataChannel()
-    {
-    LOG( SIMPLE,
-         "SATENGINE: CSatBIPGPRSDataChannel::~CSatBIPGPRSDataChannel calling" )
-
-    // Close sender
-    delete iSender;
-    
-    // Close receiver
-    delete iReceiver;
-    
-    // Close receiver
-    delete iSubConnEventObserver;
-    
-    // Close Socket
-    iSocket.Close();
-    
-    // Delete buffers
-    delete iSendStore;
-    iRcvBuffer.Zero();
-    
-    LOG( SIMPLE,
-         "SATENGINE: CSatBIPGPRSDataChannel::~CSatBIPGPRSDataChannel exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Sets up connection
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::SetupConnectionL( 
-    const TSatBipConnectionInfo& aConnParams )
-    {
-    LOG( SIMPLE, 
-        "SATENGINE: CSatBIPGPRSDataChannel::SetupConnectionL calling" )
-
-    // Allocate Send buffer
-    iSendStore = HBufC8::NewL( aConnParams.iBufferSize );
-
-    // Store the rest of connection information
-    iConnInfo = aConnParams;
-
-    // Define used protocol
-    iUseTcpProtocol = ( RSat::ETcp == iConnInfo.iProtocol.iTransportProto );
-
-    // Set connection stage
-    iConnStage = ESatBIPClosed;
-
-    LOG( SIMPLE, 
-        "SATENGINE: CSatBIPGPRSDataChannel::SetupConnectionL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Opens the connection
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::ActivateConnectionL(
-    MSatConnectionObserver* aObserver )
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL calling" )
-    
-    TInt errCode( KErrNone );               // errCode
-    RPacketQoS::TQoSGPRSNegotiated negQoS;  // The negotiated QoS
-    
-    // If the connection has not been setup or already connecting, leave
-    if ( ESatBIPClosed != iConnStage )
-        {
-        LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL \
-        ESatBIPClosed != iConnStage" )
-        User::Leave( KErrCancel );
-        }
-
-    iConnectionObserver = aObserver;
-
-    if ( RSat::EIPv4Address == iConnInfo.iDestination.iType )
-        {
-        LOG( NORMAL, 
-             "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-             Using IPv4" )
-        }
-    else if ( RSat::EIPv6Address == iConnInfo.iDestination.iType )
-        {
-        LOG( NORMAL, 
-             "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-             Using IPv6" )
-        }
-    else
-        {
-        LOG( NORMAL, "  Unknown IP type" )
-        User::Leave( KErrUnknown );
-        }
-    
-    // Open connection if it is inactive
-    if ( !iUtils.IsConnectionActivated() )
-        {
-        LOG( NORMAL, 
-             "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-             Connection is inactive, open connection " )
-        // Write the primary PDP Context QoS Parameters to CMManager
-        // before activating the primary PDP Context.  
-        WritePrimaryPDPContextQoSParamsL();
-        
-        // Open sub-session to SocketServer    
-        errCode = iConnection.Open( iSocketServ );
-        LOG2( NORMAL, 
-              "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-              RConnection opened with code: %i", errCode )
-        User::LeaveIfError( errCode );
-        
-        // Start connection. If there are no override settings, 
-        // use default settings
-        if ( iConnInfo.iOverrideSet )
-            {
-            LOG( NORMAL, "Starting connection with override settings" )
-            TConnPrefList prefList;
-            TExtendedConnPref extPrefs;
-            
-            extPrefs.SetNoteBehaviour( 
-                    iConnInfo.iOverrideSet->NoteBehaviour() );
-            extPrefs.SetIapId( iConnInfo.iOverrideSet->IapId() );
-            prefList.AppendL( &extPrefs );
-            
-            errCode = iConnection.Start( prefList );
-            }
-        else
-            {
-            LOG( NORMAL, "Starting connection with default settings" )
-            errCode = iConnection.Start();
-            }
-        
-        LOG2( NORMAL, 
-              "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-              RConnection started with code: %i", errCode )
-        User::LeaveIfError( errCode );
-        
-        // Erase the primary PDP Context QoS Parameters from CMManager 
-        WriteDefaultQoSParamsL();
-        
-        // Set Connection activated
-        iUtils.SetConnectionActivated( ETrue );
-        // Make sure the subconnection is inactive.
-        iUtils.SetSubConnectionActivated( EFalse );
-        }
-    else    
-        {
-        LOG( NORMAL, 
-             "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-             Connection is active " )
-        // Connection is active, open SubConnection if it is inactive
-        if ( !iUtils.IsSubConnectionActivated() ) 
-            {
-            LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::\
-            ActivateConnectionL SubConnection is inactive, open \
-            subconnection" )
-            // Open SubConnection 
-            OpenSubConnection();
-            }
-        }
-    
-    // Set up QoS values
-    SetConnQoSParamsL();
-    
-    // Open socket
-    OpenSocketL();
-    
-    // UDP Socket doesn't need ActiveObject, so we don't have to wait.
-    if ( !iUseTcpProtocol )
-        {
-        LOG( NORMAL, 
-             "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-             UDP protocol " )
-        StartReceiveL();
-        iConnStage = ESatBIPConnected;
-        
-        // Notify ConnectionObserver
-        iConnectionObserver->ConnectionNotification( KErrNone );
-        }
-    
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// ends or stores the data.
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::GetNegotiatedQoSParams( 
-    RSat::TBearerParams& aResult ) const
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::NegotiatedQoSParams\
-        calling - exiting" )
-    aResult = iConnInfo.iBearerParams;
-    }
-
-// ---------------------------------------------------------------------------
-// Sends or stores the data.
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::SendDataL( const TDes8& aData,
-    const TBool aSendImmediately,
-    TInt& aFreeBufferSize,
-    MSatSendDataObserver* aObserver )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL calling" )
-
-    TInt errCode( MSatBIPUtils::ESatBIPSuccess );
-    CSatSActiveWrapper* delay = NULL;
-    TInt numberOfTries( 1 );
-    // Check status of connection
-    TBool suspended( RPacketService::EStatusSuspended == 
-        iUtils.ConnectionStatus() );
-
-    // Check that does the data fit in buffer
-    const TInt bufsize( iSendStore->Length() );
-
-    LOG2( NORMAL,
-        "SATENGINE: CSatBIPGPRSDataChannel::SendDataL iSendBuffer size: %i",
-        bufsize )
-    LOG2( NORMAL,
-        "SATENGINE: CSatBIPGPRSDataChannel::SendDataL aData size: %i",
-        aData.Length() )
-    if ( suspended )
-        {
-        // for async wait
-        delay = new ( ELeave ) CSatSActiveWrapper();
-        }
-    
-    while ( suspended && KMaxAttempts >= numberOfTries ) 
-        {
-        // In cases of SMS or Call suspend the pdp context, we need to 
-        // evaluate the status of context after a small delay
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL, wait, %d "\
-            , numberOfTries )
-        delay->After( KReCheckStatusDelay );
-        suspended = RPacketService::EStatusSuspended == iUtils.ConnectionStatus();
-        numberOfTries++;
-        }
-    
-    delete delay;
-    delay = NULL;
-            
-    if ( suspended && aSendImmediately )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL \
-            Connection suspended" )
-        errCode = MSatBIPUtils::ESatBIPServiceError;
-        }
-    else if ( iConnInfo.iBufferSize < ( aData.Length() + bufsize ) )
-        {
-        LOG( NORMAL,
-            "SATENGINE: CSatBIPGPRSDataChannel::SendDataL Buffer overflow" )
-        errCode = MSatBIPUtils::ESatBIPReqBufSizeNotAvail;
-        }
-    else
-        {
-
-        // Append data to send buffer
-        TPtr8 ptr = iSendStore->Des();
-        ptr.Append( aData );
-
-        // Send immediately, if required
-        if ( aSendImmediately )
-            {
-            LOG( NORMAL,
-                "SATENGINE: CSatBIPGPRSDataChannel::SendDataL Sending data" )
-
-            // If Sender object is NULL, create it
-            if ( !iSender && aObserver )
-                {
-                LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL \
-                create iSender" )
-                iSender = new ( ELeave ) CSatBIPDataSender(
-                        *aObserver, iSocket, iUseTcpProtocol,
-                        iConnInfo.iBufferSize );
-                }
-
-            if ( iSender )
-                {
-                LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL \
-                iSender true" )
-                // Send data
-                iSender->SendData( ptr, iDestAddr );
-
-                // Remove data from buffer.
-                iSendStore = HBufC8::NewL( iConnInfo.iBufferSize );
-                }
-            }
-        }
-
-    // Place the number of bytes of empty space in the buffer to aFreeBufferSize
-    aFreeBufferSize = ( iConnInfo.iBufferSize - iSendStore->Length() );
-
-    LOG2( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::SendDataL exiting, \
-          errCode: %d", errCode )
-    return errCode;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the received data in param aData
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::ReceiveDataL( TDes8& aData,
-    const TInt aBytesToRead, TInt& aAvailableBytes )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ReceiveDataL calling" )
-
-    TInt errCode( MSatBIPUtils::ESatBIPSuccess );
-
-    // Number of bytes to return, may not be the same as requested
-    TInt bytesToReturn( aBytesToRead );
-
-    const TInt bytesAvail( iRcvBuffer.Length() );
-
-    // Compare the number of bytes received and the number of bytes requested.
-    if ( bytesToReturn > bytesAvail )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ReceiveDataL \
-        bytesToReturn > bytesAvail" )
-        // There are no requested bytes availabe, we return all we have.
-        errCode = MSatBIPUtils::ESatBIPReqBufSizeNotAvail;
-        bytesToReturn = bytesAvail;
-        }
-
-    LOG2( NORMAL, "  ReceiveDataL: Data available for receive: %i", bytesAvail )
-
-    // Put the data into param aData.
-    aData = iRcvBuffer.Left( bytesToReturn );
-    // Remove read data from receive store
-    iRcvBuffer.Delete( 0, bytesToReturn );
-    // Put the number of unread bytes into param aAvailableBytes.
-    aAvailableBytes = iRcvBuffer.Length();
-    
-    LOG2( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ReceiveDataL \
-          aAvailableBytes: %d", aAvailableBytes )
-    // Notify receiver if store is empty to get the next datagram in UDP sockets
-    if ( ( 0 == aAvailableBytes ) && iReceiver )
-        {
-        iReceiver->ReceiveStoreEmptyNotificationL();
-        }
-
-    LOG2( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ReceiveDataL exiting. \
-          errCode: %d", errCode )
-    return errCode;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the identifier of this channel
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::ChannelId() const
-    {
-    LOG2( SIMPLE,
-    "SATENGINE: CSatBIPGPRSDataChannel::ChannelId calling - exiting,\
-    ChannelId: %i", iChannelId.ChannelId() )
-    return iChannelId.ChannelId();
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the identifier of this channel. This function is used only when
-// generating ChannelStatus TLV object
-// ---------------------------------------------------------------------------
-//
-TUint8 CSatBIPGPRSDataChannel::ChannelStatusChannelId() const
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ChannelStatusChannelId calling" )
-
-    TUint8 channelId( iChannelId.ShortChannelId() );
-
-    LOG2( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ChannelStatusChannelId exiting \
-        with channel id: %i", channelId )
-    return channelId;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the status of this data channel
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::Status() const
-    {
-    LOG2( SIMPLE, 
-    "SATENGINE: CSatBIPGPRSDataChannel::Status calling - exiting,\
-    iChannelStatus: %i", iChannelStatus )
-    return iChannelStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// Closes this data channel
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::CloseChannel()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CloseChannel calling" )
-
-    if ( ESatBIPConnected == iConnStage ||
-         ESatBIPCancelled == iConnStage )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::CloseChannel \
-            Channel is connected" )
-        CancelAll();
-        // Close socket
-        iSocket.Close();
-
-        iConnStage = ESatBIPClosed;
-        }
-    else if ( iConnStage == ESatBIPConnect &&
-              iUseTcpProtocol )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::CloseChannel \
-            Channel is connecting" )
-        // If Channel is connecting and protocol is TCP,
-        // have to call Cancel instead of CancelAll since this is an active
-        // object in this situation
-        Cancel();
-        // Close socket
-        iSocket.Close();
-        
-        iConnStage = ESatBIPClosed;
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::CloseChannel \
-            Channel already closed" )
-        }
-
-    // Release channel ID
-    iChannelId.ReleaseChannel();
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CloseChannel exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Performs cancel actions.
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::CancelAll()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll calling" )
-
-    // Cancel all activity in sockets
-    if ( iConnStage == ESatBIPConnected )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll \
-        iConnStage == ESatBIPConnected" )
-        // Cancel sender
-        if ( iSender )
-            {
-            LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll \
-            cancel iSender" )
-            iSender->Cancel();
-            }
-
-        // Cancel receiver
-        if ( iReceiver )
-            {
-            LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll \
-            cancel iReceiver" )
-            iReceiver->Cancel();
-            }
-
-        // Cancel all actions
-        iSocket.CancelAll();
-        // Link dropped, when socket cancels all
-        iChannelStatus = MSatBIPUtils::ESatLinkDropped;
-        iConnStage = ESatBIPCancelled;
-        }
-    else if ( iConnStage == ESatBIPConnect )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll \
-            Cancelling connect" )
-        // Cancel connection negotiations
-        iSocket.CancelConnect();
-        iConnStage = ESatBIPCancelled;
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll \
-            Channel already cancelled or closed" )
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::CancelAll exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the status of this data channel
-// ---------------------------------------------------------------------------
-//
-TBool CSatBIPGPRSDataChannel::IsContextActive() const
-    {
-    LOG2( SIMPLE,
-    "SATENGINE: CSatBIPGPRSDataChannel::IsContextActive calling - exiting,\
-    return: %d", ESatBIPConnected == iConnStage )
-    return ESatBIPConnected == iConnStage;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the status of this data channel
-// ---------------------------------------------------------------------------
-//
-const MSatBIPDataChannel::TSatBipConnectionInfo& CSatBIPGPRSDataChannel::ConnInfo() const
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::ConnInfo calling - exiting" )
-    return iConnInfo;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatBIPGPRSDataChannel::StopUdpSocket
-// -----------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::StopUdpSocket()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StopUdpSocket calling" )
-    
-    if ( !iUseTcpProtocol )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StopUdpSocket UDP" )
-    iSocket.Close();
-    }
-        
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StopUdpSocket exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// From CActive
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::RunL()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL calling " )
-
-    if ( KErrNone == iStatus.Int() )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL \
-        KErrNone == iStatus.Int() " )
-        // Check connection stage
-        switch ( iConnStage )
-            {
-            case ESatBIPConnect:
-                {
-                LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL \
-                    Connect OK" )
-                    
-                // Start receiving data
-                StartReceiveL();
-                iConnStage = ESatBIPConnected;
-                // Notify ConnectionObserver
-                iConnectionObserver->ConnectionNotification( KErrNone );
-                break;
-                }
-
-            case ESatBIPCancelled:
-                {
-                LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL \
-                    Connection Cancelled" )
-                // Notify ConnectionObserver
-                iConnectionObserver->ConnectionNotification( KErrCancel );
-                break;
-                }
-
-            default:
-                {
-                LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL default" )
-                PanicSatEngine( ESatBIPAccessViolation );
-                }
-            }
-        }
-    else
-        {
-        // Notify ConnectionObserver with error
-        iConnectionObserver->ConnectionNotification( iStatus.Int() );
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunL exiting " )
-    }
-
-// ---------------------------------------------------------------------------
-// DoCancel
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::DoCancel()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DoCancel calling" )
-
-    CancelAll();
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DoCancel calling" )
-    }
-
-// ---------------------------------------------------------------------------
-// RunError
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::RunError( TInt aError )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunError calling" )
-
-    if ( iConnectionObserver )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunError \
-        iConnectionObserver true" )
-        iConnectionObserver->ConnectionNotification( aError );
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::RunError calling" )
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// Stores received data into buffer.
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::DataReceivedNotificationL( const TDesC8& aData )
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::DataReceivedNotification calling" )
-
-    // Check do we have to report data receive
-    const TInt bufsize( iRcvBuffer.Length() );
-#ifdef ENABLE_SAT_LOGGING
-    TBuf<KIpAddressLogSize> addressForLog;
-#endif
-    // LOG values
-    LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::RunL\
-        ReceiveStore length: %i", bufsize )
-
-    // In UDP context, we can store only one datagram at a time. If there is
-    // previous datagram in store, we'll have to wait for the UICC to get all
-    // before storing the netx datagram and to start receive again. If there are
-    // more than one datagrams pending, they are stored in RSockets queue.
-    if ( bufsize == 0 || RSat::ETcp == iConnInfo.iProtocol.iTransportProto )
-        {
-#ifdef ENABLE_SAT_LOGGING
-        iSourceAddr.Output( addressForLog );
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::RunL\
-            Received data length: %i", aData.Length() )
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::RunL\
-            Received from address: %S", &addressForLog )
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::RunL\
-            Received from port: %i", iSourceAddr.Port() )
-#endif
-        // Store data, if it fits into store, else, do not receive until store
-        // is empty.
-        if ( KSatBIPMinReceiveBufferSize >= ( aData.Length() + bufsize ) )
-            {
-            LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::\
-                 DataReceivedNotification store data" )
-            iRcvBuffer.Append( aData );
-
-            // It is possible that aData is empty, because this function 
-            // is called
-            // every time when SIM gets the final bytes from ReceiveStore.
-            if ( 0 == bufsize && aData.Length() > 0 )
-                {
-                LOG( SIMPLE,
-                "SATENGINE: CSatBIPGPRSDataChannel::DataReceivedNotification \
-                aData.Length() > 0" )
-                // If the store is empty, send event download
-                iUtils.DataAvailable( ChannelId(), aData.Length() );
-                }
-
-            // Start to receive again. This should never leave, because Receiver
-            // object is already created.
-            StartReceiveL();
-            }
-        }
-
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::DataReceivedNotification exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Error while receiving data
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::DataReceiveError( TInt aError )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DataReceiveError calling" )
-
-    if ( KErrCancel != aError ) // Don't do anything if cancelled
-        {
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::DataReceiveError\
-             Error: %i", aError )
-        // Report error
-        iConnStage = ESatBIPCancelled; 
-        iChannelStatus = MSatBIPUtils::ESatLinkDropped;
-        iUtils.ChannelStatus( ChannelId(), iChannelStatus );
-        }
-    else
-        {
-        // Cancelled
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DataReceiveError\
-            Receive has been cancelled cancelled" )
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DataReceiveError exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// ---------------------------------------------------------------------------
-//
-CSatBIPGPRSDataChannel::CSatBIPGPRSDataChannel( CSatBIPUtils& aUtils,
-    RSocketServ& aSocketServer,
-    TSatChannelIdInfo& aChannelId,
-    RConnection& aConnection,
-    RSubConnection& aSubConnection) :
-    CActive( EPriorityStandard ),
-    iUtils( aUtils ),
-    iSocketServ( aSocketServer ),
-    iChannelId( aChannelId ),
-    iConnection( aConnection ),
-    iSubConnection( aSubConnection )
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::CSatBIPGPRSDataChannel calling" )
-
-    CActiveScheduler::Add( this );
-
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::CSatBIPGPRSDataChannel exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::ConstructL()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ConstructL calling" )
-
-    iChannelStatus = MSatBIPUtils::ESatNoFurtherInformation;
-    
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::ConstructL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Opens and connects / binds Socket
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::OpenSocketL()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL calling" )
-
-    TInt errCode( KErrNone );
-
-    // Define Destination address
-    // Create InetAddress to hold remote device information
-    LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-         Port from SIM: %d", iConnInfo.iProtocol.iPrtNumber )
-
-    // Remote server's IP Address
-#ifdef SAT_USE_DUMMY_TSY
-    TBuf8<RSat::KPcktAddressMaxSize> destAddr( RSat::KPcktAddressMaxSize );
-    
-    // KAfInet or KAfInet6
-    if ( RSat::EIPv6Address == iConnInfo.iDestination.iType )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL IPv6" )
-        // 0:0:0:0:0:0:0:2 is equivalent to 127, 0, 0, 2
-        for ( TInt ndx = 0 ; ndx < KIpAddressSize ; ndx++ )
-            {
-            destAddr[ndx] = 0;
-            }
-        destAddr[KIpAddressSize] = KIpAddressDValueDestination;
-        destAddr.SetLength( KIpv6Length );
-        }
-    else //ipv4
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL IPv4" )
-        destAddr[KIpAddressA] = KIpAddressAValue;
-        destAddr[KIpAddressB] = KIpAddressBValue;
-        destAddr[KIpAddressC] = KIpAddressCValue;
-        destAddr[KIpAddressD] = KIpAddressDValueDestination;
-        destAddr.SetLength( KIpv4Length );
-        }
-    iDestAddr = DestAddress( destAddr );
-#else
-    iDestAddr = DestAddress( iConnInfo.iDestination.iAddress );
-#endif // SAT_USE_DUMMY_TSY
-    
-    LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-         Complete defining destination address" )
-    
-    iSourceAddr = iDestAddr;
-    
-    TUint socketType( KSockStream );
-    TUint protocol( KProtocolInetTcp );
-    
-    // Check is it UDP or TCP
-    if ( !iUseTcpProtocol )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-            Opening UDP datagram socket" )
-        socketType = KSockDatagram;
-        protocol = KProtocolInetUdp;
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-            Opening TCP stream socket" )
-        }
-        
-    // Open socket
-    if ( iUtils.IsSubConnectionActivated() )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-        using subconnection" )
-        errCode = iSocket.Open( iSocketServ, KAfInet, socketType,
-            protocol, iSubConnection );
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-        using connection" )
-        errCode = iSocket.Open( iSocketServ, KAfInet, socketType,
-            protocol, iConnection );
-        }
-        
-    // Check socket activation
-    LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-        Socket opened with code: %i", errCode )
-    User::LeaveIfError( errCode );
-    
-    // Define local address. Local port is obtained automatically
-    TInetAddr localAddress( KInetPortAny );
-    
-#ifdef SAT_USE_DUMMY_TSY
-        // win2000 doesn't support IPv6, so force to IPv4
-        localAddress.SetFamily( KAfInet );
-        // KAfInet or KAfInet6
-        if ( RSat::EIPv6Address == iConnInfo.iDestination.iType )
-            {
-            LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-                IPv6" )
-            // 0:0:0:0:0:0:0:3 is equivalent to 127, 0, 0, 3
-            TIp6Addr ip6Adrr;
-            
-            for ( TInt index = 0 ; index < KIpAddressSize ; index++ )
-                {
-                ip6Adrr.u.iAddr8[index] = 0;
-                }
-                
-            ip6Adrr.u.iAddr8[KIpAddressSize] = KIpAddressDValueLocal;
-            localAddress.SetAddress( ip6Adrr );
-            }
-        else //ipv4
-            {
-            LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-                IPv4" )
-            localAddress.SetAddress( INET_ADDR(
-                KIpAddressAValue,
-                KIpAddressBValue,
-                KIpAddressCValue,
-                KIpAddressDValueLocal ) );
-            }
-#else
-    // Check does the SIM provide a local address
-    if ( 0 < iConnInfo.iSource.iAddress.Length() )
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-            Setting pre-defined local address" )
-        localAddress = DestAddress( iConnInfo.iSource.iAddress );
-        localAddress.SetPort( KInetPortAny );
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-            Setting automatic local address" )
-        // Unspecified. Local address is obtained automatically.
-        localAddress.SetFamily( KAFUnspec );
-        }
-#endif       
-    LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-        Bind local address" )
-    errCode = iSocket.Bind( localAddress );  
-        
-    // Check what was the response from "Bind"
-    if ( KErrNone == errCode )
-        {
-        // Set status to indicate that connection attempt ongoing
-        iConnStage = ESatBIPConnect;
-        
-        if ( iUseTcpProtocol )
-            {
-            // Connect the socket
-            iSocket.Connect( iDestAddr, iStatus );
-            SetActive();
-            }
-        else
-            {
-            // This option redefines the receive buffer size
-            iSocket.SetOpt( KSoUdpRecvBuf, KSolInetUdp, 
-                KSatBIPMinReceiveBufferSize );
-            // Connect the socket
-            iSocket.Connect( iDestAddr, iStatus );
-            // UDP sockets dont need active object
-            User::WaitForRequest( iStatus );
-            LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-                UDP Socket connect status  %i", iStatus.Int() )
-            }
-        }
-    else
-        {
-        // Send Terminal Response indicating that static address allocation
-        // could not be done (KErrNotFound) or Bind failed for some other 
-        // reason
-        LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL\
-            Bind error:  %i", errCode )
-        iConnectionObserver->ConnectionNotification( errCode );
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::OpenSocketL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Opens SubConnection and attaches socket into it
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::OpenSubConnection()
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection calling" )
-    
-    TInt errCode( KErrNone );
-    
-    // Create SubConnection. This is mandatory for multiple PDP Context support
-    LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection\
-        Opening Sub-connection" )
-    
-    errCode = iSubConnection.Open( iSocketServ, RSubConnection::ECreateNew, 
-                                   iConnection );
-    
-    LOG2( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection\
-        RSubConnection opened with code: %i", errCode )
-    
-    if ( KErrNone != errCode )
-        {
-        // No subconnections, Affects on sockets
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection\
-                RSubConnection is opened incorrectly" )
-        iSubConnection.Close();
-        iUtils.SetSubConnectionActivated( EFalse );
-        }
-    else 
-        {
-        LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection\
-                RSubConnection is opened correctly" )
-        iUtils.SetSubConnectionActivated( ETrue );
-        }
-        
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::OpenSubConnection exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Sets QoS parameters to active SubConnection
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::SetSubConQoSParamsL()
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL calling" )
-    
-    const TInt paramLength( iConnInfo.iBearerParams.Length() );
-    TInt errCode( KErrNone );
-
-    LOG2( NORMAL, "  QoS Parameters length: %i", paramLength )
-
-    // GPRS requires 6 parameters from SIM
-    if ( KReqGprsQoSParams == paramLength )
-        {
-        // Check that is packet protocol valid, ie. IP protocol
-        if ( KReqPacketProtType != iConnInfo.iBearerParams[KProtocolPos] )
-            {
-            LOG( NORMAL, 
-                "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-                Requested packet protocol is not valid" )
-            User::Leave( KErrNotSupported );
-            }
-        }
-    else
-        {
-        LOG( NORMAL, 
-            "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-            Requested packet protocol is valid, not support" )
-        User::Leave( KErrNotSupported );
-        }
-
-    // Creating and setting properties for a sub-connection
-    // Create a parameter bundle and add to the cleanup stack
-    RSubConParameterBundle parameterBundle;
-    CleanupClosePushL( parameterBundle );
-        
-    // Create a family owned by parameterBundle
-    CSubConParameterFamily* parameterFamily = 
-        CSubConParameterFamily::NewL( parameterBundle, KSubConQoSFamily );
-    
-    // Create extension paramset(Rel5) owned by parameterFamily
-    CSubConQosR5ParamSet* requestedQoSRel5 = 
-        CSubConQosR5ParamSet::NewL( *parameterFamily, 
-                                    CSubConParameterFamily::ERequested );
-    
-    if( requestedQoSRel5 )
-        {
-        RPacketQoS::TQoSGPRSRequested reqQoS;
-        TSatQoSParser::GetRequestedQoSValues( iConnInfo.iBearerParams, 
-            reqQoS );
-        TSatQoSParser::TQoSRel5 qosRel5 = TSatQoSParser::ConvertQoS( reqQoS );
-        // Set some requested QoS values
-        requestedQoSRel5->SetTrafficClass( 
-            static_cast<RPacketQoS::TTrafficClass>( qosRel5.iTrafficClass ) );
-        requestedQoSRel5->SetTrafficHandlingPriority( 
-            static_cast<RPacketQoS::TTrafficHandlingPriority>( 
-                qosRel5.iTrafficHandlingPriority ) );
-        requestedQoSRel5->SetSDUErrorRatio( 
-            static_cast<RPacketQoS::TSDUErrorRatio>( qosRel5.iSduErrorRatio ) );
-        requestedQoSRel5->SetResidualBitErrorRatio( 
-            static_cast<RPacketQoS::TBitErrorRatio>( qosRel5.iResidualBer ) );
-        requestedQoSRel5->SetErroneousSDUDelivery( 
-            static_cast<RPacketQoS::TErroneousSDUDelivery>( 
-                qosRel5.iDeliveryErroneousSdu ) );
-        requestedQoSRel5->SetMaxBitrateUplink( qosRel5.iMaxBitRate );
-        requestedQoSRel5->SetMaxBitrateDownlink( qosRel5.iMaxBitRate );
-        requestedQoSRel5->SetMaxSduSize( qosRel5.iMaximumSDUSize );
-        requestedQoSRel5->SetDeliveryOrder( 
-            static_cast<RPacketQoS::TDeliveryOrder>( qosRel5.iDeliveryOrder ) );
-        LOG( SIMPLE, 
-            "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-            Setting requested QoS values for subconn" )
-        
-        // Start observing granted event.
-        if( !iSubConnEventObserver )
-            {
-            LOG( SIMPLE, 
-            "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-            iSubConnEventObserver false" )
-            iSubConnEventObserver = 
-                new ( ELeave ) CSatBIPSubConnEventObserver( *this );
-            }
-        iSubConnEventObserver->StartObservSubConnEvent();
-        
-        // Set parameters
-        errCode = iSubConnection.SetParameters( parameterBundle );
-        LOG2( NORMAL, 
-            "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-	        calling iSubConnection.SetParameters (parameterBundle) = %d", 
-	        errCode )
-        }
-    else
-        {
-        LOG( SIMPLE,
-            "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL\
-            Can't create CSubConQosR5ParamSet" )
-        errCode = KErrNotSupported;
-        }
-    
-    // Pop and close parameterBundle
-    CleanupStack::PopAndDestroy();
-    
-    User::LeaveIfError( errCode );
-        
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::SetSubConQoSParamsL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Starts to receive data from Socket
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::StartReceiveL()
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StartReceiveL calling" )
-
-    // If receiver is NULL, create it
-    if ( NULL == iReceiver )
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StartReceiveL \
-        create iReceiver" )
-        iReceiver = new ( ELeave ) CSatBIPDataReceiver(
-            *this, iSocket, iUseTcpProtocol );
-        }
-
-    // Tell receiver to start receive
-    iReceiver->StartReceive( iSourceAddr );
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::StartReceiveL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Defines address
-// ---------------------------------------------------------------------------
-//
-TInetAddr CSatBIPGPRSDataChannel::DestAddress( const TPtrC8& aAddr )
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DestAddress calling" )
-
-    TInetAddr destinationAddress;
-
-    const TInt addLength( aAddr.Length() );
-    LOG2( NORMAL, "  Address length is %i", addLength )
-
-#ifdef ENABLE_SAT_LOGGING
-    TBuf<KIpAddressLogSize> addressForLog;
-#endif
-    // Check IPv4 address
-    if ( KIPv4Length == addLength )
-        {
-        TInt index = 0;
-        TUint8 first( aAddr[index++] );
-        TUint8 second( aAddr[index++] );
-        TUint8 third( aAddr[index++] );
-        TUint8 fourth( aAddr[index++] );
-
-        // This macro creates IPAddress into TUint32 format.
-        //lint -e{1924} Problem inside epoc macro, nothing to do.
-        destinationAddress = TInetAddr( INET_ADDR( first, second, third, fourth ),
-            iConnInfo.iProtocol.iPrtNumber );
-        destinationAddress.SetFamily( KAfInet );
-#ifdef ENABLE_SAT_LOGGING
-        destinationAddress.Output( addressForLog );
-        LOG2( NORMAL, "  Using IPv4, Address is %S", &addressForLog )
-#endif
-        }
-    // Check IPv6 address
-    else if ( KIPv6Length == addLength )
-        {
-        TIp6Addr ip6Adrr;
-        for ( TInt index = 0 ; index < addLength ; index++ )
-            {
-            ip6Adrr.u.iAddr8[index] = aAddr[index];
-            }
-
-        destinationAddress = TInetAddr( ip6Adrr, iConnInfo.iProtocol.iPrtNumber );
-        destinationAddress.SetFamily( KAfInet6 );
-#ifdef ENABLE_SAT_LOGGING
-        destinationAddress.Output( addressForLog );
-        LOG2( NORMAL, "  Using IPv6, Address is %S", &addressForLog )
-#endif
-#ifdef SAT_USE_DUMMY_TSY
-        // Using Dummy TSY, overwriting IPv6 address to IPv4 since
-        // Windows 2000 doesn't support IPv6
-        destinationAddress.ConvertToV4();
-        destinationAddress.SetFamily( KAfInet );
-#ifdef ENABLE_SAT_LOGGING
-        destinationAddress.Output( addressForLog );
-        LOG2( NORMAL, "  Converted IPv6 address to IPv4,\
-             Address is %S", &addressForLog )
-#endif
-        destinationAddress.SetAddress( INET_ADDR(
-            KIpAddressAValue,
-            KIpAddressBValue,
-            KIpAddressCValue,
-            KIpAddressDValueDestination ) );
-#ifdef ENABLE_SAT_LOGGING
-        destinationAddress.Output( addressForLog );
-        LOG2( NORMAL, "  Overwrited IPv4 localhost,\
-             Address is %S", &addressForLog )
-#endif
-#endif //SAT_USE_DUMMY_TSY
-        }
-    else // Invalid IP address length
-        {
-        LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DestAddress \
-        invalid IP address" )
-        destinationAddress = TInetAddr( 0 , 0 );
-        destinationAddress.SetFamily( KAFUnspec );
-        }
-
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::DestAddress exiting" )
-    return destinationAddress;
-    }
-
-// ---------------------------------------------------------------------------
-// Write Primary PDP Context QoS parameters to RCmManager
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::WritePrimaryPDPContextQoSParamsL()
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WritePrimaryPDPContextQoSParamsL \
-        calling" )
-
-    if ( iConnInfo.iOverrideSet )
-        {
-        LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WritePrimaryPDPContextQoSParamsL \
-        iConnInfo.iOverrideSet true" )
-        
-        TUint32 iapId( iConnInfo.iOverrideSet->IapId() );
-        LOG2( SIMPLE, 
-              "SATENGINE: CSatBIPGPRSDataChannel::WritePrimaryPDPContextQoSParamsL \
-              IAP id = %d", iapId )
-        
-        RPacketQoS::TQoSGPRSRequested reqQoS;
-        TSatQoSParser::GetRequestedQoSValues( iConnInfo.iBearerParams, 
-            reqQoS );
-        TSatQoSParser::TQoSRel5 qosRel5 = TSatQoSParser::ConvertQoS( reqQoS );    
-        
-        RCmManager cmManager;
-        cmManager.OpenLC();
-
-        RCmConnectionMethod cm = cmManager.ConnectionMethodL( iapId );
-        CleanupClosePushL( cm );
-        
-        // Requested traffic class.
-        // Type of application for which the UMTS bearer service is optimised
-        cm.SetIntAttributeL( CMManager::EGPRSReqTrafficClass, 
-                             qosRel5.iTrafficClass );
-        LOG2( SIMPLE, "  EGPRSReqTrafficClass:    0x%x", 
-              qosRel5.iTrafficClass )
-        
-        // Requested traffic handling priority.                     
-        // Specifies the relative importance for handling of all SDUs belonging
-        // to the UMTS bearer compared to the SDUs of other bearers.
-        cm.SetIntAttributeL( CMManager::EGPRSReqTrafficHandlingPriority, 
-                             qosRel5.iTrafficHandlingPriority );
-        LOG2( SIMPLE, "  EGPRSReqTrafficHandlingPriority:    0x%x", 
-              qosRel5.iTrafficHandlingPriority )                
-        
-        // Requested target SDU error ratio.
-        // Indicates the fraction of SDUs lost or detected as erroneous.               
-        cm.SetIntAttributeL( CMManager::EGPRSReqSDUErrorRatio, 
-                             qosRel5.iSduErrorRatio );
-        LOG2( SIMPLE, "  EGPRSReqSDUErrorRatio:    0x%x", 
-              qosRel5.iSduErrorRatio )                         
-                             
-        // Requested target Bit error ratio.
-        // Indicates the undetected bit error ratio in the delivered SDU.
-        cm.SetIntAttributeL( CMManager::EGPRSReqBER, 
-                             qosRel5.iResidualBer);
-        LOG2( SIMPLE, "  EGPRSReqBER:    0x%x", 
-              qosRel5.iResidualBer )                          
-              
-        // Requested value for erroneous SDU delivery. 
-        // Indicates whether SDUs detected as erroneous shall be
-        // delivered or discarded
-        cm.SetIntAttributeL( CMManager::EGPRSReqDeliverErroneousSDU, 
-                             qosRel5.iDeliveryErroneousSdu );
-        LOG2( SIMPLE, "  EGPRSReqDeliverErroneousSDU:    0x%x", 
-              qosRel5.iDeliveryErroneousSdu )
-        
-        // Requested maximum bit rates on downlink.                     
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxDownlinkRate, 
-                             qosRel5.iMaxBitRate );
-        LOG2( SIMPLE, "  EGPRSReqMaxDownlinkRate:    0x%x", 
-              qosRel5.iMaxBitRate )
-        
-        // Requested maximum bit rates on uplink      
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxUplinkRate, 
-                             qosRel5.iMaxBitRate );
-        LOG2( SIMPLE, "  EGPRSReqMaxUplinkRate:    0x%x", 
-              qosRel5.iMaxBitRate )       
-        
-        // Request maximum SDU size.
-        // The maximum SDU size for which the network shall 
-        // satisfy the negotiated QoS
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxSDUSize, 
-                             qosRel5.iMaximumSDUSize );
-        LOG2( SIMPLE, "  EGPRSReqMaxSDUSize:    0x%x", 
-              qosRel5.iMaximumSDUSize )
-        
-        // Requested value for sequential SDU delivery.
-        // Indicates whether the UMTS bearer shall provide 
-        // in-sequence SDU delivery or not.
-        cm.SetIntAttributeL( CMManager::EGPRSReqDeliveryOrder, 
-                             qosRel5.iDeliveryOrder );
-        LOG2( SIMPLE, "  EGPRSReqDeliveryOrder:    0x%x", 
-              qosRel5.iDeliveryOrder )
-
-        cm.UpdateL();
-        
-        CleanupStack::PopAndDestroy( &cm );
-        CleanupStack::PopAndDestroy( &cmManager );
-        }
-   
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WritePrimaryPDPContextQoSParamsL \
-        exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Write default QoS Parameters to RCmManager
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL()
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL \
-        calling" )
-        
-    if ( iConnInfo.iOverrideSet )
-        {
-        LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL \
-        iConnInfo.iOverrideSet true" );
-        TUint32 iapId( iConnInfo.iOverrideSet->IapId() ); 
-        LOG2( SIMPLE, 
-              "SATENGINE: CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL \
-              IAP id = %d", iapId )        
-        
-        RCmManager cmManager;
-        cmManager.OpenLC();
-
-        RCmConnectionMethod cm = cmManager.ConnectionMethodL( iapId );
-        CleanupClosePushL( cm );
-        
-        cm.SetIntAttributeL( CMManager::EGPRSReqTrafficClass, 
-                             RPacketQoS::ETrafficClassUnspecified );
-                             
-        cm.SetIntAttributeL( CMManager::EGPRSReqTrafficHandlingPriority, 
-                             RPacketQoS::ETrafficPriorityUnspecified );
-                             
-        cm.SetIntAttributeL( CMManager::EGPRSReqSDUErrorRatio, 
-                             RPacketQoS::ESDUErrorRatioUnspecified );
-                             
-        cm.SetIntAttributeL( CMManager::EGPRSReqBER, 
-                             RPacketQoS::EBERUnspecified );
-        
-        cm.SetIntAttributeL( CMManager::EGPRSReqDeliverErroneousSDU, 
-                             RPacketQoS::EErroneousSDUDeliveryUnspecified );
-                             
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxDownlinkRate, 0 );
-        
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxUplinkRate, 0 );
-        
-        cm.SetIntAttributeL( CMManager::EGPRSReqMaxSDUSize, 0 );
-        
-        cm.SetIntAttributeL( CMManager::EGPRSReqDeliveryOrder, 
-                             RPacketQoS::EDeliveryOrderUnspecified );
-
-        LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL \
-        set default QoS params" );
-
-        cm.UpdateL();
-        
-        CleanupStack::PopAndDestroy( &cm );
-        CleanupStack::PopAndDestroy( &cmManager );
-        }
-    
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::WriteDefaultQoSParamsL \
-        exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// Set QoS for connection or subconnection
-// ---------------------------------------------------------------------------
-//
-void CSatBIPGPRSDataChannel::SetConnQoSParamsL()
-    {
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::SetConnQoSParamsL calling" )
-    
-    RPacketQoS::TQoSGPRSNegotiated negQoS;  // The negotiated QoS
-    
-    // If using Dummy TSY, set the negotiated QoS directly by hard-codes,
-    // otherwise, fetch negotiated QoS for primary context(by ETel API), set QoS
-    // for secondary context. 
-#ifdef SAT_USE_DUMMY_TSY    
-    // Set the negotiated QoS directly if using Dummy TSY
-    LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-        don't need to set qos for dummy tsy" )
-    negQoS.iPrecedence = RPacketQoS::EPriorityHighPrecedence;
-    negQoS.iDelay = RPacketQoS::EDelayClass4;
-    negQoS.iReliability = RPacketQoS::EReliabilityClass3;
-    negQoS.iPeakThroughput = RPacketQoS::EPeakThroughput256000;
-    negQoS.iMeanThroughput = RPacketQoS::EUnspecifiedMeanThroughput;
-    TSatQoSParser::GetNegotiatedQoSValues( negQoS, iConnInfo.iBearerParams );
-    // Set last bearer param to IP Protocol
-    iConnInfo.iBearerParams[KProtocolPos] = KReqPacketProtType;     
-#else   // Set QoS for channels
-    if ( iUtils.IsSubConnectionActivated() ) 
-        {
-        // Set QoS params, granted QoS will be fetched after connected
-         LOG( NORMAL, "SATENGINE: CSatBIPGPRSDataChannel::ActivateConnectionL\
-                Set QoS values for SubConnection" )
-        SetSubConQoSParamsL();
-        }
-    else
-        {
-        // Primary PDP Context need to be fetched by ETel API
-         RPacketQoS::TQoSGPRSRequested reqQoS;
-         TSatQoSParser::GetRequestedQoSValues( iConnInfo.iBearerParams, 
-            reqQoS );
-        negQoS = iUtils.ProposeQoSParametersL( reqQoS );
-        TSatQoSParser::GetNegotiatedQoSValues( negQoS, 
-            iConnInfo.iBearerParams );
-        // Set last bearer param to IP Protocol
-        iConnInfo.iBearerParams[KProtocolPos] = KReqPacketProtType;      
-        }
-#endif
-        
-    LOG( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::SetConnQoSParamsL exiting" )
-    }
-
-// ---------------------------------------------------------------------------
-// GetSubConQoSR5ParamsFromEvent
-// ---------------------------------------------------------------------------
-//
-TInt CSatBIPGPRSDataChannel::GetSubConQoSR5ParamsFromEvent(
-    CSubConNotificationEvent& aEvent, 
-    TSatQoSParser::TQoSRel5& aNegQoSRel5 )
-    {
-    LOG( SIMPLE, 
-        "SATENGINE: CSatBIPGPRSDataChannel::GetSubConQoSR5ParamsFromEvent \
-        calling" )
-    TInt errCode( KErrNone );
-    
-    CSubConGenEventParamsGranted* grantedEvent = 
-        static_cast<CSubConGenEventParamsGranted*>( &aEvent );
-    
-    TInt extSetNum = grantedEvent->GetNumExtensionSets();
-    LOG2( NORMAL, 
-        "SATENGINE: GetSubConQoSR5ParamsFromEvent extSetNum :%d ", extSetNum )
-                 
-    const CSubConExtensionParameterSet* grantedExtParams = 
-        grantedEvent->GetExtensionSet( extSetNum-1 );
-    
-    if ( grantedExtParams )
-        {
-        CSubConQosR5ParamSet* paramSet;
-        paramSet = ( CSubConQosR5ParamSet* )grantedExtParams;
-        
-        if ( paramSet )
-            {
-            aNegQoSRel5.iTrafficClass = paramSet->GetTrafficClass();
-            aNegQoSRel5.iTrafficHandlingPriority =
-                paramSet->GetTrafficHandlingPriority();
-            aNegQoSRel5.iSduErrorRatio = paramSet->GetSDUErrorRatio();
-            aNegQoSRel5.iResidualBer = paramSet->GetResidualBitErrorRatio();
-            aNegQoSRel5.iDeliveryErroneousSdu = 
-                paramSet->GetErroneousSDUDelivery();
-            aNegQoSRel5.iMaxBitRate = Max( paramSet->GetMaxBitrateUplink(),
-                                        paramSet->GetMaxBitrateDownlink() );
-            aNegQoSRel5.iMaximumSDUSize = paramSet->GetMaxSduSize();
-            aNegQoSRel5.iDeliveryOrder = paramSet->GetDeliveryOrder();
-                
-            LOG2( SIMPLE, "Negotiated TrafficClass: %d", 
-                aNegQoSRel5.iTrafficClass )
-            LOG2( SIMPLE, "Negotiated TrafficHandlingPriority: %d", 
-                aNegQoSRel5.iTrafficHandlingPriority )
-            LOG2( SIMPLE, "Negotiated SDUErrorRatio: %d", 
-                aNegQoSRel5.iSduErrorRatio )
-            LOG2( SIMPLE, "Negotiated ResidualBitErrorRatio: %d", 
-                aNegQoSRel5.iResidualBer )
-            LOG2( SIMPLE, "Negotiated ErroneousSDUDelivery: %d", 
-                aNegQoSRel5.iDeliveryErroneousSdu )
-            LOG2( SIMPLE, "Negotiated Maxbitrate: %d", 
-                aNegQoSRel5.iMaxBitRate )
-            LOG2( SIMPLE, "Negotiated MaximumSDUSize: %d", 
-                aNegQoSRel5.iMaximumSDUSize )
-            LOG2( SIMPLE, "Negotiated DeliveryOrder: %d", 
-                aNegQoSRel5.iDeliveryOrder )
-            }
-        else
-            {
-            LOG( NORMAL, "SATENGINE: GetSubConQoSR5ParamsFromEvent\
-                Can't get CSubConQosR5ParamSet " )
-            errCode = KErrNotSupported;
-            }
-        }
-    else
-        {
-        LOG( NORMAL, "SATENGINE: GetSubConQoSR5ParamsFromEvent\
-                Can't get granted CSubConExtensionParameterSet " )
-        errCode = KErrNotSupported;
-        }
-     
-    LOG2( SIMPLE,
-        "SATENGINE: CSatBIPGPRSDataChannel::GetSubConQoSR5ParamsFromEvent \
-        exiting, errCode: %d", errCode )
-    return errCode;
-    }
-    
-// ---------------------------------------------------------------------------
-// GrantedEventReceivedL
-// ---------------------------------------------------------------------------
-//   
-void CSatBIPGPRSDataChannel::GrantedEventReceivedL( 
-    const TNotificationEventBuf& aEventBuffer )
-    {
-    LOG( SIMPLE, 
-        "SATENGINE: CSatBIPGPRSDataChannel::GrantedEventReceivedL calling" )
-    TInt errCode( KErrNone );
-    RPacketQoS::TQoSGPRSNegotiated negQoS;
-    
-    // Exacting information from receieved events
-	CSubConNotificationEvent* event = 
-        CSubConNotificationEvent::NewL( aEventBuffer );
-        
-    if ( KSubConnGenericEventsImplUid == event->GroupId() )
-        {
-        LOG( NORMAL, "SATENGINE: GrantedEventReceivedL \
-            event->GroupId() == KSubConnGenericEventsImplUid" )
-        TSatQoSParser::TQoSRel5 negQoSRel5;
-                
-        switch ( event->Id() )
-            {
-            case KSubConGenericEventParamsGranted:
-                {
-                LOG( NORMAL, 
-                    "SATENGINE: GrantedEventReceivedL Request granted" )
-                      
-                // Get the granted param set from event
-                errCode = GetSubConQoSR5ParamsFromEvent( *event, negQoSRel5 );
-                LOG2( NORMAL, 
-                       "SATENGINE: GetSubConQoSR5ParamsFromEvent errCode %d ", 
-                       errCode )
-                User::LeaveIfError( errCode );
-                break;
-                }
-            case KSubConGenericEventParamsRejected:
-                {
-                LOG( NORMAL, 
-                        "SATENGINE: GrantedEventReceivedL Request Rejected" )
-                        
-                CSubConGenEventParamsRejected* rejectedEvent = 
-                     static_cast<CSubConGenEventParamsRejected*>( event );
-                errCode = rejectedEvent->Error();
-                     
-                LOG2( NORMAL, 
-                        "SATENGINE: GrantedEventReceivedL\
-	                        rejectedEvent->Error() = %d", errCode )
-	            User::LeaveIfError( errCode );
-	            break;
-                }
-            default:
-                {
-                LOG( NORMAL, 
-                    "SATENGINE: GrantedEventReceivedL. EventId \
-                    not in KSubConGenericEventParamsRejected/Granted " )
-                // Do nothing
-                break;
-                }
-            }                
-        // convert negQoSRel5 to negQoS
-        negQoS = TSatQoSParser::ConvertNegotiatedQoS( negQoSRel5 );
-                             
-        TSatQoSParser::GetNegotiatedQoSValues( negQoS, 
-            iConnInfo.iBearerParams );
-                
-        // Set last bearer param to IP Protocol
-        iConnInfo.iBearerParams[KProtocolPos] = KReqPacketProtType;
-        }
-
-    LOG( SIMPLE, 
-        "SATENGINE: CSatBIPGPRSDataChannel::GrantedEventReceivedL exiting" )
-    }
-    
-// ---------------------------------------------------------------------------
-// Returns sub connection
-// ---------------------------------------------------------------------------
-//
-RSubConnection& CSatBIPGPRSDataChannel::SubConnection() const
-    {
-    LOG( SIMPLE, "SATENGINE: CSatBIPGPRSDataChannel::SubConnection\
-        calling - exiting" )
-    return iSubConnection;
-    }
-