dvrengine/CommonRecordingEngine/inc/CCRConnection.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:37 +0100
branchRCL_3
changeset 23 13a33d82ad98
parent 0 822a42b6c3f1
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201029 Kit: 201035

/*
* 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 the License "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:    Class for wrapping RConnection*
*/




#ifndef __CCRCONNECTION_H
#define __CCRCONNECTION_H

// INCLUDES
#include "MCRConnectionObserver.h"
#include <e32base.h>
#include <es_sock.h>
#include <CommDbConnPref.h>
#include <es_enum.h>
#include <rconnmon.h>

// CONSTANTS
/** Max Bandwidth constants -- from Helix Player, R1_Mobile_4_0_Factory.cfg : GRPS */
const TInt KCRBandwidthGPRS( 40200 );
/** Max Bandwidth constants -- from Helix Player, R1_Mobile_4_0_Factory.cfg : EGRPS */
const TInt KCRBandwidthEdgeGPRS( 89600 );
/** Max Bandwidth constants -- from Helix Player, R1_Mobile_4_0_Factory.cfg : 3G */
const TInt KCRBandwidthWCDMA( 384000 );
/** Max Bandwidth constants -- from Helix Player, R1_Mobile_4_0_Factory.cfg : WLAN */
const TInt KCRBandwidthWLAN( 1432572 );
/** Max Bandwidth constants -- from Helix Player, R1_Mobile_4_0_Factory.cfg : LAN */
const TInt KCRBandwidthLAN( 3000000 );

// MACROS
// None

// DATA TYPES
// None

// FORWARD DECLARATIONS
class CCRConnection;

// CLASS DECLARATION

/**
* RConnection wrapper
*/
class CCRConnection : public CActive,
                      public MConnectionMonitorObserver
    {

public: // Data types

    /**
    * Enumeration for different connection stages
    */
    enum TConnectionState
        {
        EIdle,          /**< Connection idle */
        EFindingAP,     /**< Search access point */
        EFindingBearer, /**< Finding bearer */
        EOpen,          /**< Opening connection */
        EConnecting     /**< Connecting */
        };

    /** 
    * Heuristics for the connection, ie, characteristics from the
    * connection discovered during run-time and that may affect it's usage.
    */
    enum TConnectionHeuristic
        {
        /**
        * Connection is unable to stream RTP over UDP,
        * most likely due to firewall blocking.
        */
        EUdpStreamingBlocked = 0
        };

public: // Constructors and destructor

    /**
    * Two-phased constructor.
    * @param aSockServer 
    * @return CCRConnection pointer to CCRConnection class
    */
    static CCRConnection* NewL( RSocketServ& aSockServer );

    /**
    * Destructor.
    */
    virtual ~CCRConnection( );

public: // New methods
	/**
    * Method for starting and attaching a connection.
    * @since Series 60 3.0
    * @param aConnectionId Connection id.
    * @return none.
    */
    void Attach( TUint aConnectionId ); 

    /**
    * Method for getting the rconnection to use. This is useful only
    * when connection state is open. 
    * @since Series 60 3.0
    * @param none.
    * @return reference to RConnection.
    */
    RConnection& Connection( void ); 
    
    /**
    * Method for getting state of the connection.
    * @since Series 60 3.0
    * @param none.
    * @return connection state.
    */
    TConnectionState State( void ) const;

    /**
    * Gets bearer for current connection.
    * @since Series 60 3.0
    * @param none.
    * @return bearer type
    */
    TConnMonBearerType BearerType() const;

    /**
    * Gets (estimated) maximum available connection bandwidth.
    * @since Series 60 3.0
    * @param none.
    * @return bandwidth in bit/s, zero if unkown or connection not available.
    */
    TInt MaximumBandwidth();

    /**
    * Check if bearer is considered 3G, WLAN or similar
    * @since Series 60 3.0
    * @param none.
    * @return TBool
    */
    TBool IsBearerWLANor3G( TConnMonBearerType aBearer );

    /**
    * Add observer for connection status.
    * @since Series 60 3.0
    * @param aObserver new observer
    * @return TInt
    */
    TInt RegisterObserver( MCRConnectionObserver* aObserver );

    /**
    * remove observer for connection status.
    * @since Series 60 3.0
    * @param aObserver observer to be removed.
    * @return TInt.
    */
    TInt UnregisterObserver( MCRConnectionObserver* aObserver );

    /** 
    * Retrives a heuristic associated with the connection.
    * @since Series 60 3.0
    * @param aHeuristic 
    * @return value associated with the heuristic.
    */
    TBool GetHeuristic( TConnectionHeuristic aHeuristic );

    /** 
    * Sets a heuristic associated with the connection
    * @since Series 60 3.0
    * @param aHeuristic
    * @param aValue value associated with the heuristic.
    * @return none.
    */
    void SetHeuristic( TConnectionHeuristic aHeuristic,
                       TBool aValue );

private: // Methods from base classes
    
    /**
    * From CActive.
    * Cancel protocol implementation.
    * @since Series 60 3.0
    * @param none.
    * @return none.
    */
    void DoCancel();

    /**
    * From CActive.
    * Outstanding request completed.
    * @since Series 60 3.0
    * @param none.
    * @return none.
    */
    void RunL();

    /**
    * From CActive.
    * Handle error.
    * @since Series 60 3.0
    * @param aError Error code.
    * @return KErrNone.
    */
    TInt RunError( TInt aError );

    /**
    * From MConnectionMonitorObserver.
    * Receives event notifications from connection monitor,
    * specifically for bearer changes.
    * @since Series 60 3.0
    * @param aConnMonEvent
    * @return none.
    */
    void EventL( const CConnMonEventBase& aConnMonEvent );

private: // New methods
    
    /**
    * Method for sending connection error events to message queue.
    * @since Series 60 3.0
    * @param aError is Error code.
    * @return none
    */
    void SendConnectionErrorToQueue( TInt aError ); 

	/**
	* Close internal RConnection iConnection.
    * @since Series 60 3.0
    * @param none.
    * @return none
	*/
	void CloseRConnection();
    
    /**
    * Finds access point.
    * @since Series 60 3.0
    * @param none.
    * @return none
    */
    TInt FindApL();
    
    /**
    * Finds bearer.
    * @since Series 60 3.0
    * @param none.
    * @return none
    */
    void FindBearerL();
    
    /**
    * Notify UI about connection.
    * @since Series 60 3.0
    * @param none.
    * @return none
    */
    void NotificationL();
    
private: // Constructors and destructors
    
    /**
    * default constructor
    * @param aSockServer a reference to socket server.
    */
    CCRConnection( RSocketServ& aSockServer );
     
    /** 
    * 2nd phase constructor 
    */
    void ConstructL();

private: // Data

    /**
    * Socker server.
    */
    RSocketServ& iSockServer;

    /**
    * Connection.
    */
    RConnection iConnection;
    
    /**
    * Observers.
    */
    RPointerArray<MCRConnectionObserver> iObservers;
    
    /**
    * Current state.
    */
    TConnectionState iState; 
    
    /**
    * Connection preference.
    */
    TCommDbConnPref iConnPref;
    
    /**
    * variable for getting notification when interface goes up or down
    */
    TNifProgressBuf iNotification;

    /**
    * Connection id to be used
    */
    TUint iCurrentConnectionId;

    /**
    * Connection monitor
    */
    RConnectionMonitor iConMon;

    /**
    * How many active connections were found by connection monitor
    */
    TUint iConnectionCount;

    /**
    * Heuristics for connection
    */
    TUint32 iHeuristics;

    /**
    * Bearer type for current connection
    */
    TConnMonBearerType iBearerType;

    /**
    * Bearer type detected after change
    */
    TConnMonBearerType iNewBearerType;
    
    /**
    * Whether we have connection progress notification pending or not
    */
    TBool iConMonProgressNotifyPending ; 

    };

#endif // __CCRCONNECTION_H

// End of file