supl/locationsuplfw/protocolhandlerapi/inc/epos_csuplprotocolmanagerbase.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:37:04 +0300
branchRCL_3
changeset 44 2b4ea9893b66
parent 42 02ba3f1733c6
child 45 6b6920c56e2f
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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:   Provides the interface between SUPL Gateway and SUPL Protocol Handler. 
*				 This class provides the functionality of loading and unloading 
*				 the Protocol handler ECom plug-in.
*
*/


#ifndef C_CSUPLPROTOCOLMANAGERBASE_H
#define C_CSUPLPROTOCOLMANAGERBASE_H


#include <e32base.h>
#include "epos_msuplpacketreceiver.h"
#include <epos_suplterminal.h>

//Forword Declarations
class CSuplSessionBase;
class CSuplCommunicationManager;
class TGeoCellInfo;

/**
 * Constant:    KProtocolManagerInterfaceDefinitionUid
 *
 * Description: UID of this ECOM interface. 
 *
 */
const TUid KProtocolManagerInterfaceDefinitionUid = {0x102073CB};
 

/**
 * Class:       CSUPLProtocolManagerBase
 *
 * Description: Custom ECOM interface definition. This interface is used by
 *              clients to find specific instance and implementation of 
 *				protocol handler Plugin.
 */
 
 
class CSUPLProtocolManagerBase : public CBase, public MSuplPacketReceiver
    {

public :

	/**
	 * For diffentiating request between Terminal & NET initiation 
	 *
	 */
	enum TSuplReqType
	    {
	    ETerminal = 0,
	    ENetwork
	    }; 
   
public: // Constructors and destructor  

    /**
     * Function:     NewL, Two Phase Construction
     *
     * @Description: Wraps ECom object instantitation. Will search for
     *               interface implementation, which matches to given
     *               aOperationName.
     *
     * @Param:       aOperationName, name of requested implementation.
     *
     * @return 		 instance of implementation		
     *
     */     
 	IMPORT_C static CSUPLProtocolManagerBase* NewL(const TDesC8& aOperationName);

    /**
     * Function:     NewL, Two Phase Construction
     *
     * @Description: Wraps ECom object instantitation. Will search for
     *               interface implementation, which matches to given
     *               UID.
     *
     * @Param:       aImplementationUid, UID of requested implementation.
     *
     * @return 		 instance of implementation		
     *
     */     
 	IMPORT_C static CSUPLProtocolManagerBase* NewL(const TUid &aImplementationUid);
 
    /**
     * Function:     CSUPLProtocolManagerBase 
     *
     * @Description: Default constructor
     *
     * @Param:       None
     *
     * @Returns:     None
     *
     */
   	IMPORT_C CSUPLProtocolManagerBase();
   
      /**
     * Function:     SetImplementationUid
     *
     * @Description: Sets Uid of implementation 
     *
     * @Param:       UID of implementation.
     *
     * @Returns:     None
     *
     */
	IMPORT_C virtual void ConstructL(const TUid& aUid); 

    /**
     * Function:     ~CSUPLProtocolManagerBase  
     *
     * @Description: Wraps ECom object destruction. Notifies the ECOM
     *               framework that specific instance is being destroyed.
     */
    IMPORT_C  ~CSUPLProtocolManagerBase();

    /**
     * Function:     ImplementationUid, 
     *
     * @Description: Gives implementation UID
     *
     * @Param:       None.
     *
     * @return 		 Returns implementation UID 		
     *
     */     
  	IMPORT_C TUid ImplementationUid() const;
 
    /**
     * Function:   	 Version 
     *
     * @Description: Gives version of implementation
     *
     * @Param:       None.
     *
     * @return 		 Returns TInt, containing version of implementation 
     *
     */     
  	IMPORT_C TInt Version() const;

public:

    /**
     * Function:     InitializeL, 
     *
     * @Description: Does the asynchonous initilization. 
     *
     * @Param:       aCommManager,Communication Manager
     * @Param:       aInitilizationRequestStatus,for asynchronous initilization of protocol manager
     *
     * @Returns:     None
     *
     */
  	virtual void InitializeL(
  					 CSuplCommunicationManager* aCommManager,
  					 TRequestStatus& aInitilizationRequestStatus) = 0;

    /**
     * Function:     CancelInitialize, 
     *
     * @Description: Does the cancellation of asynchronous initilization. 
     *
     * @Param:       None
     *
     * @Returns:     None
     *
     */
  	virtual void CancelInitialize() = 0;

    /**
     * Function:     DeInitialize, 
     *
     * @Description: Does the de-initilization. 
     *
     * @Param:       aDeInitRequestStatus,for asynchronous de-initilization of protocol manager
     *
     * @Returns:     None
     *
     */
  	virtual void DeInitialize(TRequestStatus& aDeInitRequestStatus) = 0;

    /**
     * Function:     CancelDeInitialize, 
     *
     * @Description: Does the cancellation of asynchronous de-initilization. 
     *
     * @Param:       None
     *
     * @Returns:     None
     *
     */
  	virtual void CancelDeInitialize() = 0;

    /**
     * Function:     HandleSuplMessageL, 
     *
     * @Description: Handles packet which come from SLP in NET initiated case
     *
     * @Param:       aSuplSession , session object on which processing will start
     * @Param:       aStatus, 			On return, the status of the request
     *
     * @Returns:     None
     *
     */ 		
  	virtual void HandleSuplMessageL(
  					 CSuplSessionBase *const aSuplSession,
  					 TRequestStatus& aStatus,
  					 HBufC8* aMessage) = 0;
  					 
public: 

    /**
     * Function:     CreateNewSession
     *
     * @Description: Creates new SuplSession instance
     *
     * @Param:       None
     *
     * @Returns:     Instance of CSuplSessionBase.
     *
     */
   	virtual CSuplSessionBase* CreateNewSessionL(
   					 TSuplReqType aRequestType, 
   					 TInt aIpcSessionId,
   					 RSuplTerminalSubSession::TSuplServiceType aSuplService) = 0;
   
   	/**
     * Function:     DestroySession
     *
     * @Description: Destoys SuplSession instance
     *
     * @Param:       None
     *
     * @Returns:     TInt, if session is invalid, then returns KErrArgument
     *
     */
   	virtual TInt DestroySession(CSuplSessionBase* aSuplSession ) = 0;
   
    /**
     * Function:     RunSessionL, 
     *
     * @Description: Starts processing on session
     *
     * @Param:       aSuplSession , session object on which processing will start
     * @Param:       aStatus, 			On return, the status of the request
     * @Param:       aAllowedCapabilities , Allowed capabilities of SET
     * @Param:       aRequestID , Request ID of Session
     *
     * @Returns:     None
     */ 		
  	virtual void RunSessionL(
  					 CSuplSessionBase *const aSuplSession,
  					 TRequestStatus& aStatus,
  					 const TDesC& aHslpAddress, 
  					 TBool aFallBack, 
  					 TBool aFirstReq, 
  					 TInt aAllowedCapabilities, 
  					 TInt aRequestID = 0) = 0;

    /**
     * Function:     RunSessionL, 
     *
     * @Description: Starts processing on session
     *
     * @Param:       aSuplSession , session object on which processing will start
     * @Param:       aStatus, 			On return, the status of the request
     * @Param:       aAllowedCapabilities , Allowed capabilities of SET
     * @Param:       aQop , specifies the quality of position
     * @Param:       aRequestID , Request ID of Session
     *
     * @Returns:     None
     *
     */
  	virtual void RunSessionL(
  					 CSuplSessionBase *const aSuplSession,
  					 TRequestStatus& aStatus,
  					 const TDesC& aHslpAddress, 
  					 TBool aFallBack, 
  					 TBool aFirstReq, 
  					 TInt aAllowedCapabilities,
  					 TSuplTerminalQop& aQop, 
  					 TInt aRequestID = 0) = 0;

   	/**
     * Function:     CancelRunSession
     *
     * @Description: Cancels the Run Session Request
     *
     * @Param:       Session Object
     *
     * @Returns:     None
     *
     */
   	virtual void CancelRunSession(CSuplSessionBase* aSuplSession) = 0;
    
    /**
     * Function:     RunSuplTriggerSessionL, 
     *
     * @Description: Starts processing on session
     *
     * @Param:       aSuplSession, session object on which processing will start
     * @Param:       aStatus, On return, the status of the request
     * @Param:       aPTrigger, specifies the periodic trigger session
     * @Param:       aHslpAddress, specifies HSLP Server Address to be used 
     *				  	to get position from it
     * @Param:       aFallBack, enables/diables Multiple-SLP Fallback mechanism
     * @Param:       aAllowedCapabilities, Allowed capabilities of SET
     * @Param:       aRequestID, Request ID of Session     
     *
     * @Returns:     None
     *
     */
   	virtual void RunSuplTriggerSessionL(
  					 CSuplSessionBase *const aSuplSession,
  					 TRequestStatus& aStatus,
  					 TSuplTerminalPeriodicTrigger& aPTrigger,
  					 const TDesC& aHslpAddress, 
  					 TBool aFallBack, 
  					 TInt aAllowedCapabilities,
  					 TInt aRequestID = 0) = 0;

   	/**
     * Function:     CancelSuplTriggerSession
     *
     * @Description: Cancels an in-progress Terminal Initiated 
	 * 				 Periodic Trigger Session Location Request
     *
     * @Param:       Session Object
     *
     * @Returns:     None
     *
     */
   	virtual void CancelSuplTriggerSession(CSuplSessionBase* aSuplSession) = 0;

   	/**
     * Function:     NotifyTriggerFired
     *
     * @Description: Starts listening for the trigger fired event
     *
     * @Param:       None
     *
     * @Returns:     None
     *
     */
    virtual void NotifyTriggerFiredL(
    				 CSuplSessionBase *const aSuplSession,
  					 TRequestStatus& aStatus, 
        			 TSuplTriggerFireInfo& aFireInfo) = 0;

    
    /**
     * Function:     GetSUPLMessageVersionL
     *
     * @Description: Cancels listening for the trigger fired event
     *
     * @Param:       aMajorVersion,return parameter which will hold version after decoding of message.
     *
     * @Param:       aReceivedMessage,message to be used to get version number.
     *
     * @Returns:     returns KErrNone if recceived message gets decoded successfuly otherwise KErrGeneral.
     *
     */
    virtual TInt GetSUPLMessageVersionL(TInt& aMajorVersion, const TDesC8& aReceivedMessage);
    
    /**
        * Function:     MakeLocationConversionRequestL
        *
        * @Description: Makes Location conversion request
        *
        * @Param:       aSuplSessn,session object on which processing will start. Ownership 
        *               is not transferred.
        *
        * @Param:       aCellInfo,cell information which needs to be converted to geo-coordinates
        *
        * @Param:       aStatus, On return, the status of the request
        * @Returns:     returns None
        */
        
        virtual void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
                                                     TGeoCellInfo& aCellInfo,
                                                     TRequestStatus& aStatus ) = 0;
           
       
        /**
         * Function:     CancelLocationConversionRequest
         *
         * @Description: Cancels the conversion Request
         *
         * @Param:       Session Object
         *
         * @Returns:     None
         */
         
         virtual void CancelLocationConversionRequest(CSuplSessionBase* aSuplSession) = 0;

				 
public: // from MSuplPacketReceiver

   	/**
     * Function:     HandleSuplPackets
     *
     * @Description: Process Supl message which are comming from SLP
     *
     * @Param:       aPacket, message packet
     *
     * @Returns:     None
     *
     */
   	virtual void HandlePacket(const TDesC8& aPacket, TUint aPortNum) = 0;

   	/**
     * Function:     HandlePacketError
     *
     * @Description: Handles error if any while reading from communication manager
     *
     * @Param:       aError, error code occured while reading from communication manager
     *
     * @Returns:     None
     *
     */
   	virtual void HandlePacketError(TInt aError) = 0;
    
private:

 	/**
     *	By default,  prohibit copy constructor
	 */         
    CSUPLProtocolManagerBase( const CSUPLProtocolManagerBase& );
    
   	/**
     *	By default,  Prohibit assigment operator
     *
	 */
    CSUPLProtocolManagerBase& operator= ( const CSUPLProtocolManagerBase& );
	
    /**
     * Function:     GetVersionL 
     *
     * @Description: Gives version of implementation 
     *
     * @Param:       None
     *
     * @Returns:     TInt , containing version of implementation 
     *
     */
	TInt GetVersionL() const;	
	
   	/**
     * Function:     SetImplementationUid
     *
     * @Description: Sets Uid of implementation 
     *
     * @Param:       UID of implementation.
     *
     * @Returns:     None
     *
     */
	 //void SetImplementationUid(const TUid& aUid); 

private:

    /** 
     * iDtor_ID_Key  Instance identifier key. When instance of an
     *               implementation is created by ECOM framework, the
     *               framework will assign UID for it. The UID is used in
     *               destructor to notify framework that this instance is
     *               being destroyed and resources can be released.
     *
     */     
    TUid iDtor_ID_Key;
    
    /**
     * Uid of Implementation    
     *
     */
    TUid iImplementationUid;
    
    };


#endif // C_CSUPLPROTOCOLMANAGERBASE_H

// End of File