satengine/SatServer/Engine/inc/CSatBIPUtils.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2008 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:  CSatBIPUtils is responsible for handling Bearer Independent
                 Protocol data channels.
*
*/


#ifndef CSATBIPUTILS_H
#define CSATBIPUTILS_H

#include    <e32base.h>
#include    <es_sock.h>
#include    <etelpckt.h>
#include    <etelmm.h>
#include    <etelqos.h>
#include    "MSatBIPUtils.h"
#include    "MSatBIPEventNotifier.h"
#include    "MSatEventObserver.h"
#include    "MSatBIPDataChannel.h"

class MSatBIPChannelStatusObserver;
class MSatBIPDataAvailableObserver;
class TSatChannelIdInfo;
class MSatUtils;
class CSatApnHandler;
class CSatSActiveWrapper;
class CSatBIPConnectionObserver;

/**
 *  CSatBIPUtils is responsible for handling data channels used by
 *
 *  Bearer Independent Protocol (BIP)
 *
 *  @lib SatEngine.lib
 *  @since S60 3.0
 */
class CSatBIPUtils : public CBase,
                     public MSatBIPUtils,
                     public MSatBIPEventNotifier,
                     public MSatEventObserver
    {
public:  
// Constructors and destructor
    /**
     * Two-phased constructor.
     * @param aUtils Reference to common Utils class
     */
    static CSatBIPUtils* NewL( MSatUtils& aUtils );
    
    /**
     * Destructor.
     */
    virtual ~CSatBIPUtils();
    
// from base class MSatEventObserver
    /**
     * From MSatEventObserver
     * Handles event
     *
     * @since S60 3.0
     * @param aEvent Event that has occured
     */       
    void Event( TInt aEvent );
    
// from base class MSatBIPUtils
    /**
     * From MSatBIPUtils 
     * Creates new data channel and returns reference to it
     *
     * @since S60 3.0
     * @param TSatBIPError code indicating the execution status.
     * @return Pointer to created data channel
     */
    MSatBIPDataChannel* CreateChannelL(
        const TSatBearerType aBearerType,
        TInt& aErrCode );
    
    /**
     * From MSatBIPUtils 
     * Request to close specified data channel.
     *
     * @since S60 3.0
     * @param aChannelId Identifies the channel to be closed.
     * @return TSatBIPError code indicating the execution status.
     */
    TInt CloseChannel( const TInt aChannelId );

    /**
     * From MSatBIPUtils 
     * Request to open new data channel
     *
     * @since S60 3.0
     * @param aChannelId Identifies the channel.
     * @param aErrCode TSatBIPError code indicating the execution status.
     * @return Pointer to requested data channel
     */
    MSatBIPDataChannel* DataChannel(
        const TInt aChannelId,
        TInt& aErrCode );
    
    /**
     * From MSatBIPUtils 
     * Generates channel status object from given 
     * parameters to be used in terminal responses.
     *
     * @since S60 3.0
     * @param aChannelId Data channel identifier.
     * @param aStatus Data channel's status.
     * @return channel status object that can be put into terminal responses.
     */
    RSat::TChannelStatus GenerateChannelStatusL(
        const TInt aChannelId,
        TInt aStatus );

    /**
     * From MSatBIPUtils 
     * Reference to APN handler
     *
     * @since S60 3.0
     * @return Interface reference to CSatApnHandler
     */
    MSatApnHandler& ApnHandler();
    
    /**
     * From MSatBIPUtils 
     * Status of the PDP Context
     *
     * @since S60 3.0
     * @return ETrue, if there is active PDP Context
     */
    TBool IsContextActive();
    
    /**
     * From MSatBIPUtils 
     * Request to close specified data channel.
     *
     * @since S60 3.0
     * @return Array containing all available data channels.
     */
    CArrayPtrFlat<MSatBIPDataChannel>* DataChannels();
    
// from base class MSatBIPUtils
                
    /**
     * From MSatBIPEventNotifier
     * Notification request for DataAvailable event.
     *
     * @since S60 3.0
     * @param aObserver An observer of the event.
     */
    void NotifyDataAvailable(
        MSatBIPDataAvailableObserver* aObserver );

    /**
     * From MSatBIPEventNotifier
     * Notification request for ChannelStatus event.
     *
     * @since S60 3.0
     * @param aObserver An observer of the event.
     */
    void NotifyChannelStatus(
        MSatBIPChannelStatusObserver* aObserver );
    
    /**
     * From MSatBIPEventNotifier 
     * Cancels DataAvailable event notification request.
     *
     * @since S60 3.0
     */
    void CancelDataAvailable();
    
    /**
     * From MSatBIPEventNotifier 
     * Cancels ChannelStatus event notification request.
     *
     * @since S60 3.0
     */
    void CancelChannelStatus();

// New Member Function
    /**
     * DataAvailable event from data channel.
     *
     * @since S60 S60 3.0
     * @param aChannelId ID of the channel that called this function.
     * @param aLength Number of bytes available.
     */
    void DataAvailable( const TInt aChannelId, const TInt aLength );
    
    /**
     * ChannelStatus event from data channel.
     *
     * @since S60 S60 3.0
     * @param aChannelId ID of the channel that called this function.
     * @param aStatus Status that caused this event.
     */
    void ChannelStatus(
        const TInt aChannelId,
        const TInt aStatus );

    
    /**
     * Closes all active data channels. This function is called
     * when SAP is enabled or SAT Server closes
     * @since S60 S60 3.0
     */
    void CloseAllChannels();

    /**
     * Proposes QoS parameters for the last created primary or secondary context
     * and returns negotioated QoS parameters as a result.
     *
     * @since S60 S60 3.0
     * @param aQoSParams Requested QoS parameters to propose for the context
     * @return Negotioated QoS parameters, which may differ from requested
     *         parameters.
     */
    RPacketQoS::TQoSGPRSNegotiated ProposeQoSParametersL(
        const RPacketQoS::TQoSGPRSRequested& aQoSParams );
       
    /**
     * Gives reference to RPacketService
     *
     * @since S60 S60 3.0
     */
    RPacketService& PacketService();
    
    
    /**
     * Current status of the GPRS service
     *
     * @since S60 S60 3.0
     * @return Current status of the GPRS service
     */     
    RPacketService::TStatus ConnectionStatus() const;
        
    /**
     * Stop all udp connection.
     *
     * @since S60 S60 3.2
     */  
    void StopUdpLink();
        
    /**
     * Set the state for subconnection
     *
     * @since S60 S60 3.2
     * @param aSet State to be set
     */  
    void SetConnectionActivated( TBool aSet );
        
    /**
     * Get the state of connection
     *
     * @since S60 S60 3.2
     * @param aSet State to be set
     */  
    TBool IsConnectionActivated();
        
    /**
     * Set the state for subconnection
     *
     * @since S60 S60 3.2
     * @param aSet State to be set
     */  
    void SetSubConnectionActivated( TBool aSet );
        
    /**
     * Get the state of subconnection
     *
     * @since S60 S60 3.2
     * @param aSet State to be set
     */  
    TBool IsSubConnectionActivated();  
        
private:

    /**
     * C++ default constructor.
     * @param aUtils Reference to common utils class
     */
    CSatBIPUtils( MSatUtils& aUtils );

    /**
     * By default Symbian 2nd phase constructor is private.
     */
    void ConstructL();

    /**
     * Defines next available channel ID
     * @return Pointer to next available channel id
     */
    TSatChannelIdInfo* AvailableChannelID();
    
    /**
     * Reference to RPacketContex handle
     * @return Error code indicating the success of function completion
     */
    TInt GprsService();
    
    /**
     * Number of contexts currently in Gprs service
     *
     * @since S60 S60 3.0
     * @return Number of active PDP contexts
     */  
    TInt ContextCount();

private: // Data

    /**
     * Array containing all data channels
     * Own
     */
    CArrayPtrFlat<MSatBIPDataChannel>* iDataChannels;

    /**
     * DataAvailable event observer
     * Own
     */
    MSatBIPDataAvailableObserver* iDataAvailableObserver;

    /**
     * ChannelStatus event observer
     * Own
     */
    MSatBIPChannelStatusObserver* iChannelStatusObserver;

    /**
     * Main session to Socket Server
     * 
     */
    RSocketServ iSocketServer;

    /**
     * Indicates is there channel active or not
     * 
     */
    TBool iDataChannelActivated;

    /**
     * Array containing datachannel IDs
     * Own
     */
    CArrayPtrFlat<TSatChannelIdInfo>* iChannelIds;

    /**
     * Temporary Channel ID pointer, used for ~CSatBIPUtils to 
     * cleanup when AppendL leave. Look into ConstructL and
     * ~CSatBIPUtils to see how it be used.
     * Not Own
     */
    TSatChannelIdInfo* iChannelId;
   
   /**
     * Utils class
     * Not Own
     */
    MSatUtils& iUtils;

    /**
     * Blocker for synchronous requests
     * Own
     */
    CSatSActiveWrapper* iWrapper;

    /**
     * Classes for GPRS context activation
     * 
     */
    RPacketService iPacketService;

    /**
     * Indicates is the Session to PacketService active
     * 
     */
    TBool iPacketServiceActive;

    /**
     * Pointer to APN handler
     * Own
     */
    MSatApnHandler* iApnHandler;

    /**
     * Pointer to connection status observer
     * Own
     */
    CSatBIPConnectionObserver* iConnObserver;
        
    /**
     * Represent the primary PDP context
     * Own
     */
    RConnection iConnection;
        
    /**
     * Represent the secondary PDP context
     * Own
     */
    RSubConnection iSubConnection;
        
    /**
     * iSubConnectionActivated
     */
    TBool iSubConnectionActivated;
        
    /**
     * iConnectionActivated
     */
    TBool iConnectionActivated;
    };

#endif      // CSATBIPUTILS_H