simpledatamodeladapter/inc/presencepluginconnection.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 13:17:17 +0300
changeset 20 76bddcd072ba
parent 0 c8caa15ef882
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* Copyright (c) 2006-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:  IETF SIMPLE Protocol implementation for XIMP Framework
*
*/


#ifndef PRESENCEPLUGINCONNECTION_H
#define PRESENCEPLUGINCONNECTION_H

#include <e32base.h>
#include <ximpprotocolconnection.h>
#include <protocolpresencefeatures.h>
//Connection obs
#include "mpresencepluginconnectionobs.h"
#include "simpleimfeatures.h"
#include "presencelogger.h"

//FORWARD
class MXIMPServiceInfo;
class MXIMPObjectFactory; 
class MXIMPProtocolConnectionHost;
class MProtocolPresenceWatching;
class MProtocolPresencePublishing;
class MProtocolPresentityGroups;
class MProtocolPresenceAuthorization;
class MProtocolPresenceFeatures;
class MProtocolPresenceDataHost;
class CPresencePluginSession;
class CPresencePluginWinfo;
class CPresencePluginWatcher;
class CPresencePluginAuthorization;
class CPresencePluginPublisher;
class CPresencePluginXdmUtils;
class CPresencePluginGroups;
class CPresencePluginVirtualGroup;
class CPresencePluginData;
class CPresenceConnectionInfo;
class MProtocolImFeatures;


/**
 * CPrecensePluginSession
 *
 * presence Engine Connection
 *
 * @lib presenceplugin.dll
 * @since S60 v3.2
 */
NONSHARABLE_CLASS(CPresencePluginConnection) : public CActive,
    public MXIMPProtocolConnection,
    public MProtocolPresenceFeatures,
    public MPresencePluginConnectionObs
    {
    public:
    
    	enum TConnectionStatus
            {
            /** undefined */
            ENotActive = 0,
            /** Connection initializing */
            EActive,
            /** Connection close */
            ETerminated
            };

        /**
         * Two-phased constructor.
         *
         * @param aServiceInfo, XIMP service info
         * @param aClientCtxInfo, XIMP contex client info
         */
        static CPresencePluginConnection* NewL( 
            const MXIMPServiceInfo& aServiceInfo,
            const MXIMPContextClientInfo& aClientCtxInfo );
        
        /**
         * Two-phased constructor loaded.
         *
         * @param aServiceInfo, XIMP service info
         * @param aClientCtxInfo, XIMP contex client info
         */
        static CPresencePluginConnection* NewL( 
            const MXIMPServiceInfo& aServiceInfo,
            const MXIMPContextClientInfo& aClientCtxInfo,
            const TDesC8& aETag );
        
        /**
         * Standard C++ destructor
         */ 
        ~CPresencePluginConnection();

        /**
         * Grand list subscribe state
         *
         * @since S60 3.2
         * @param none
         * @return TBool grand list subscribe state
         */
        TBool GrandListState( );

        /**
         * Set connection info array
         *
         * @since S60 3.2
         * @param connection info
         * @return none
         */
        void SetConnectionArray( CPresenceConnectionInfo* aArray );

        /**
         * Get connection info array
         *
         * @since S60 3.2
         * @param none
         * @return return info 
         */
        CPresenceConnectionInfo* GetConnectionArray( );


        /**
         * Gets protocol interface. In error cases returns NULL
         *
         * @since S60 5.0
         * @param none
         * @return protocol interface 
         */        
        TAny* GetProtocolInterface( TInt aInterfaceId );
        
    private:
    
        /**
         * Standard C++ constructor
         */         
        CPresencePluginConnection( );

        /**
         * Performs the 2nd phase of construction.
         *
         * @param aService, XIMP service info
         * @param aClientCtxInfo, XIMP contex client info
         */  
        void ConstructL(
            const MXIMPServiceInfo& aService,
            const MXIMPContextClientInfo& aClientCtxInfo );
        
        /**
         * Performs the 2nd phase of construction. Overload
         *
         * @param aService, XIMP service info
         * @param aClientCtxInfo, XIMP contex client info
         */  
        void ConstructL(
            const MXIMPServiceInfo& aService,
            const MXIMPContextClientInfo& aClientCtxInfo,
            const TDesC8& aETag );
        
    private: //Own private functions
    	
    	/**
         * DeRegister
         *
         * @since S60 3.2
         * @param none
         * @return none
         */
    	void DeRegister( );
    	
        /**
          * CreateImFeaturesPlugin
          *
          * @since S60 5.0
          * @param none
          * @return none
          */
    	void CreateImFeaturesPluginL();
    	
        /**
          * DeleteImFeaturesPlugin
          *
          * @since S60 5.0
          * @param none
          * @return none
          */
    	void DeleteImFeaturesPlugin();
    	
    protected: // from base class CActive

        /**
         * Defined in a base class
         */
        void RunL();

        /**
         * Defined in a base class
         */
        TInt RunError( TInt aError );

        /**
         * Defined in a base class
         */
        void DoCancel();
    
    public: // from base class MPrFwBase
        
        TInt32 GetPresenceSetId() const;
        
        /**
         * Defined in a base class
         */
        TAny* GetInterface(
            TInt32 aInterfaceId,
            TIfGetOps aOps );

        /**
         * Defined in a base class
         */
        const TAny* GetInterface(
            TInt32 aInterfaceId,
            TIfGetOps aOps ) const;

        /**
         * Defined in a base class
         */
        TInt32 GetInterfaceId() const;
        
    public:// from base class MPresencePluginConnectionObs
    
        /**
         * Return subscribed buddy virtual group
         *
         * @since S60 3.2
         * @param none
         * @return CPresencePluginVirtualGroup, virtual group
         */
        CPresencePluginVirtualGroup* SubscribedContacts();
        
        /**
         * Get Stop Publish state
         *
         * @since S60 3.2
         * @param none
         * @return TBOOL, Stop Publish state
         */
        TBool GetStopPublishState();
        
        /**
         * Is stop publish called
         *
         * @since S60 3.2
         * @param none
         * @return TBOOL, Stop Publish
         */
        TBool IsStopPublishCalled();
        
        /**
         * Set Stop Publish state
         *
         * @since S60 3.2
         * @param aState, stop publish state TRUE/FALSE
         * @return none
         */
        void SetStopPublishState( TBool aState );
    
        /**
         * Get Tuple id
         *
         * @since S60 3.2
         * @param none
         * @return TInt, tupleid
         */
        TInt GetTupleId() const;
        
        /**
         * Set Tuple id
         *
         * @since S60 3.2
         * @param aTupleId, generated tupleid
         * @return none
         */
        void SetTupleId( const TInt aTupleId );
        
        /**
         * Get ETag
         *
         * @since S60 3.2
         * @param none
         * @return TDesC8, Etag value
         */
        const TDesC8& GetETag() const;
   
        /**
         * Set ETag
         *
         * @since S60 3.2
         * @param aEtag, Etag value
         * @return none
         */
        void SetETag( const TDesC8& aETag );
        
        /**
         * Defined in a base class
         */
        void CompleteReq( TReqType aType, TInt aStatus );

        /**
         * Defined in a base class
         */
        void CompleteReq( TXIMPRequestId aReqId, TInt aStatus );

        /**
         * Defined in a base class
         */
        MXIMPObjectFactory& ObjectFactory();
    
        /**
         * Defined in a base class
         */    
        MPresenceObjectFactory& PresenceObjectFactoryOwn();
            
        /**
         * Defined in a base class
         */
        CPresencePluginWinfo* WinfoHandlerL();   
    
        /**
         * Defined in a base class
         */
        CPresencePluginWatcher* WatcherHandlerL();
        
        /**
         * Defined in a base class
         */    
        void WinfoTerminatedL( TInt aReason ); 
    
        /**
         * Defined in a base class
         */     
        void WinfoNotification( MSimpleWinfo& aWinfo );      
 
        /**
         * Defined in a base class
         */ 
        TPtrC8 CurrentSipPresentity8();
        
        /**
         * Defined in a base class
         */
        CPresencePluginXdmUtils* XdmUtilsL();
        
        /**
         * Defined in a base class
         */
        TBool GetSessionStatus( );
        
        /** 
         * Termiante connection
         */
        void TerminateConnectionL( );
        
        /** 
         * Returns groups api implementation. Leaves if 
         * pointer not available.
         */        
        CPresencePluginGroups& GroupsL();
        
        /** 
         * Returns service id
         */                
        TInt& ServiceId();                
                         
    public: // from MXIMPProtocolConnection
               
        /**
         * Defined in a base class
         */
        MProtocolPresenceDataHost& ProtocolPresenceHost();
        
        /**
         * Defined in a base class
         */
        MProtocolPresenceFeatures& ProtocolPresenceFeatures();
        
        /**
         * PrimeHost
         *
         * @since S60 3.2
         * @param [in] aHost
         * Reference to host interface, what this MXIMPProtocolConnection
         * instance must use to communicate back to Presence Framework
         * direction.
         */
        void PrimeHost( MXIMPProtocolConnectionHost& aHost );

        /**
         * OpenSessionL
         *
         * @since S60 3.2 
         * @param [in] aReqId
         * Request ID identifying the request. Presence protocol
         * connection implementation must cache here given ID and
         * use it when completing the request later through the
         * MXIMPProtocolConnectionHost::HandleRequestCompleted().
         */
        void OpenSessionL( const MXIMPContextClientInfo& aClientCtxInfo,
            TXIMPRequestId aReqId );
        
        /**
         * OpenSessionL
         *
         * @since S60 3.2 
         * @param [in] aReqId
         * Request ID identifying the request. Presence protocol
         * connection implementation must cache here given ID and
         * use it when completing the request later through the
         * MXIMPProtocolConnectionHost::HandleRequestCompleted().
         */
        void OpenSessionL( const TInt& aSettingsId,
            TXIMPRequestId aReqId );
         
        /**
         * CloseSession
         *
         * @since S60 3.2
         * @param [in] aReqId
         * Request ID identifying the request. Presence protocol
         * connection implementation must cache here given ID and
         * use it when completing the request later through the
         * MXIMPProtocolConnectionHost::HandleRequestCompleted().
         */               
        void CloseSession( const MXIMPContextClientInfo& aContextClient,
            TXIMPRequestId aReqId );
            
        /**
         * GetSupportedFeaturesL
         * 
         * @since S60 3.2
         * @param [out] aFeatures
         * Return parameter where to append supported
         * presence protocol connection features.
         * Feature IDs are defined in NXIMPFeature namespace.
         */               
        void GetSupportedFeaturesL( CDesC8Array& aFeatures ) const;

        /**
         * PresenceWatching
         *
         * @since S60 3.2 
         * @return Requested interface.
         * interface ownership is not returned caller.
         */
        MProtocolPresenceWatching& PresenceWatching();

        /**
         * PresencePublishing
         *
         * @since S60 3.2 
         * @return Requested interface.
         * interface ownership is not returned caller.
         */
        MProtocolPresencePublishing& PresencePublishing(); 

        /**
         * PresentityGroups
         * 
         * @since S60 3.2 
         * @return Requested interface.
         * interface ownership is not returned caller.
         */
        MProtocolPresentityGroups& PresentityGroups();

        /**
         * PresenceAuthorization
         * 
         * @since S60 3.2
         * @return Requested interface.
         * interface ownership is not returned caller.
         */
        MProtocolPresenceAuthorization& PresenceAuthorization();
        
        /**
         * PresenceAuthorization
         * 
         * @since S60 3.2
         * @return Requested interface as own type
         * interface ownership is not returned caller.
         */        
        CPresencePluginAuthorization& InternalPresenceAuthorization();

        /**
         * Defined in a base class
         */
        MXIMPProtocolConnectionHost* Host();

        /**
         * Defined in a base class
         */
        TPtrC16 CurrentDomain();
          
        /**
         * Defined in a base class
         */
        MXIMPServiceInfo& ServiceInfo();
                        
    private:  //data
     
        /**
         * Presence Engine session
         * Own.
         */
        CPresencePluginSession* iSession;
        
        /**
         * CPresencePluginWinfo
         * Own.
         */    
        CPresencePluginWinfo* iPluginWinfo;
        
        /**
         * CPresencePluginWatcher
         * Own.
         */
        CPresencePluginWatcher* iWatcher;
        
        /**
         * current request id
         * Own
         */
        TXIMPRequestId iXIMPId;  
        
        /**
         * Host for connection.
         * Not own.
         */
        MXIMPProtocolConnectionHost*  iConnectionHost;  
        
        /**
         * MXIMPProtocolPresenceauthorization implementation.
         * Own.
         */
        CPresencePluginAuthorization* iAuth;
        
        /**
         * CSimplePluginPublisher
         * Own.
         */
        CPresencePluginPublisher* iPublisher;
        
        /**
         * CSimplePluginGroups
         * Own.
         */
        CPresencePluginGroups* iGroups;
        
        /**
         * CPresencePluginImFeatures
         * Own.
         */
        CSimpleImFeatures* iImFeatures;
        
        /**
         * Current user SIP identity
         * Own.
         */
        HBufC16* iSipPresentity; 
        
        /**
         * XDM utils
         * Own.
         */
        CPresencePluginXdmUtils* iXdmUtils;
        
        /**
         * TupleId
         * Own.
         */
        TInt iOwnTupleId;
         
        /**
         * Document Etag
         * Own.
         */
        HBufC8* iETag;

        /**
         * Virtual groups
         * Own
         */
        CPresencePluginVirtualGroup* iSubscribedBuddys;   

        /**
         * Plugin Data
         * Own.
         */
        CPresencePluginData* iPresenceData;
        
        /**
         * Stop publish state
         * Own
         */
        TBool iStopPublishState;
        
        /**
         * Grant list subscribe state
         * Own
         */
        TBool iGrantListSubs;
        
        /**
         * Is stop publish called
         * Own
         */
        TBool iStopPublishCall;
        
        /**
         * Terminated state called
         * Own.
         */
        TBool iTerminatedCall;
        
        /**
         * Connection Array instance
         * Own.
         */
        CPresenceConnectionInfo* iConnectionArray;
        
        SIMPLE_UNIT_TEST( T_CPresencePluginConnection )
        SIMPLE_UNIT_TEST( T_SIMPLEDataModelAdapter )
    };

#endif // PRESENCEPLUGINCONNECTION_H