satengine/SatServer/Engine/src/csatbipconnectionobserver.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:11:09 +0200
changeset 0 ff3b6d0fd310
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2007 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:  Observer of the GPRS connection status change
*
*/



// INCLUDE FILES
#include <etelpckt.h>
#include <pcktcs.h> // for EPacketNotifyStatusChange in DoCancel
#include "csatbipconnectionobserver.h"
#include "CSatBIPUtils.h"
#include "SatLog.h"


// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::CSatBIPConnectionObserver
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSatBIPConnectionObserver::CSatBIPConnectionObserver(
    CSatBIPUtils& aBipUtils ) :
    CActive( EPriorityNormal ),
    iBipUtils( aBipUtils )
    {
    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::\
        CSatBIPConnectionObserver calling" )
    CActiveScheduler::Add( this );
    // Get current status
    iBipUtils.PacketService().GetStatus( iConnectionStatus );
    // Set last status
    iPrevConnectionStatus = iConnectionStatus;
    LOG2( NORMAL, "SATENGINE: CSatBIPConnectionObserver::\
        CSatBIPConnectionObserver exiting: %i", iConnectionStatus )
    }

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::~CSatBIPConnectionObserver
// Destructor
// -----------------------------------------------------------------------------
//
CSatBIPConnectionObserver::~CSatBIPConnectionObserver()
    {
    LOG( SIMPLE,
        "SATENGINE: CSatBIPConnectionObserver::~CSatBIPConnectionObserver \
        calling" )
    Cancel();
    LOG( SIMPLE,
        "SATENGINE: CSatBIPConnectionObserver::~CSatBIPConnectionObserver \
        exiting" )
    }

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::RunL
// -----------------------------------------------------------------------------
//
void CSatBIPConnectionObserver::RunL()
    {
    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::RunL calling" )

    const TInt errStatus( iStatus.Int() );
    LOG2( SIMPLE, " RunL (%i)", errStatus )
    LOG2( SIMPLE, " ConnStatus (%i)", iConnectionStatus )
    if ( KErrNone == errStatus )
        {
        //if previous status is active packet data connection and
        //current status is inactive packet data connection, drop links.
        if( RPacketService::EStatusActive == iPrevConnectionStatus && 
            ( RPacketService::EStatusAttached == iConnectionStatus || 
            RPacketService::EStatusUnattached == iConnectionStatus ))
            {
            LOG( NORMAL, "CSatBIPConnectionObserver::RunL stop UDP link" )
            iBipUtils.StopUdpLink();
            }
        
        // Restart request
        iPrevConnectionStatus = iConnectionStatus;
        iBipUtils.PacketService().NotifyStatusChange( iStatus, iConnectionStatus );
        SetActive();
        }

    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::RunL exiting" )
    }

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::DoCancel
// -----------------------------------------------------------------------------
//
void CSatBIPConnectionObserver::DoCancel()
    {
    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::DoCancel calling" )

    iBipUtils.PacketService().CancelAsyncRequest( EPacketNotifyStatusChange );

    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::DoCancel exiting" )
    }

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::StartObserver
// Starts to observe connection status
// -----------------------------------------------------------------------------
//
void CSatBIPConnectionObserver::StartObserver()
    {
    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::StartObserver calling" )

    if ( !IsActive() )
        {
        LOG( SIMPLE, "  Activating observer" )
        iBipUtils.PacketService().NotifyStatusChange( iStatus, iConnectionStatus );
        SetActive();
        }

    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::StartObserver exiting" )
    }

// -----------------------------------------------------------------------------
// CSatBIPConnectionObserver::Status
// Returns current connection status
// -----------------------------------------------------------------------------
//
RPacketService::TStatus CSatBIPConnectionObserver::Status() const
    {
    LOG( NORMAL, "SATENGINE: CSatBIPConnectionObserver::Status \
    calling-exiting" )
    LOG2( NORMAL, " ConnectionStatus: %i", iConnectionStatus )
    return iConnectionStatus;
    }

// End of file