ximpfw/tsrc/tsrcprotocols/pr_prfwtestprotocol/pr_prfwtestprotocol.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

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


#ifndef T_PRFWTESTPROTOCOL_H
#define T_PRFWTESTPROTOCOL_H


#include <e32base.h>

#include <ximpprotocolpluginbase.h>
#include <protocolpresencepublishing.h>
#include <protocolpresencewatching.h>
#include <protocolpresenceauthorization.h>
#include <protocolpresentitygroups.h>
#include <protocolpresencefeatures.h>
#include <ximpprotocolconnection.h>
#include <ximpprotocolconnectionhostobserver.h>
#include <ximpbase.h>

#include "prfwwaitobserver.h"

#include "prfwtestmessaging.h"

class CXIMPTestGeneralWaiter;
class CXIMPTestMessenger;
class CPeriodic;
class CXIMPTestFileLogicHelper;
class CXIMPTestFileTool;
class MXIMPRestrictedObjectCollection;
class MProtocolImFeatures;
#define PRIMP_CLSID_CPRESENTITYGROUPINFOIMP 15000

class T_XIMPTestConnection :public CBase,
                            public MXIMPProtocolConnection,
                            public MProtocolPresenceFeatures,
                            public MProtocolPresencePublishing,
                            public MProtocolPresenceWatching,
                            public MProtocolPresenceAuthorization,
                            public MProtocolPresentityGroups,
                            public MXIMPProtocolConnectionHostObserver,
                            public T_MWaitObserver
                            
    {
    public:
    /** The class ID. */
    enum { KClassId = PRIMP_CLSID_CPRESENTITYGROUPINFOIMP };


        class ClientWrapper : public CBase
            {
            private:

                void ConstructL( const TDesC& aClientId );

            public:

                static ClientWrapper* NewLC( const TDesC& aClientId );
                void InitializeL( MXIMPProtocolConnectionHost& aConnectionHost );
                ~ClientWrapper();

            public:

                RBuf iId;
                CXIMPTestFileTool* iFileTool;
                CXIMPTestMessenger* iMessenger;
                CXIMPTestFileLogicHelper* iFileLogicHelper;
                TInt iPluginIndex;
            };

    public:

        static T_XIMPTestConnection* NewL( const MXIMPServiceInfo& aServiceInfo,
                                           const MXIMPContextClientInfo& aClientCtxInfo );
        static T_XIMPTestConnection* NewLC( const MXIMPServiceInfo& aServiceInfo,
                                            const MXIMPContextClientInfo& aClientCtxInfo );

        ~T_XIMPTestConnection();


    private:

        T_XIMPTestConnection();
        void ConstructL( const MXIMPServiceInfo& aServiceInfo,
                         const MXIMPContextClientInfo& aClientCtxInfo );

    public: // From MXIMPProtocolConnection

        /**
         * host for connection
         */
        void PrimeHost( MXIMPProtocolConnectionHost& aHost );

        void OpenSessionL( const MXIMPContextClientInfo& aClientCtxInfo,
                               TXIMPRequestId aReqId  );

        
        void OpenSessionL(
                const TInt& aSettingsId,
                TXIMPRequestId aReqId );

        void CloseSession( const MXIMPContextClientInfo& aClientCtxInfo,
                               TXIMPRequestId aReqId );
                               
        MProtocolPresenceFeatures& ProtocolPresenceFeatures();
		
		//MProtocolImFeatures* ProtocolImFeatures();
		
		TAny* GetProtocolInterface(TInt aInterfaceId);
		
    public: // MProtocolPresenceFeatures
        MProtocolPresenceWatching& PresenceWatching();
        MProtocolPresencePublishing& PresencePublishing();
        MProtocolPresentityGroups& PresentityGroups();
        MProtocolPresenceAuthorization& PresenceAuthorization();
        
        
    public: // From MXIMPProtocolConnectionHostObserver        
    
        void HandleProtocolConnectionHostEvent(
                const MXIMPProtocolConnectionHost& aHost,
                const MXIMPBase& aEvent );


    public: // from MPscPlugin


        void GetSupportedFeaturesL(
                CDesC8Array& aFeatures ) const;

        void DoPublishOwnPresenceL(
                const MPresenceInfo& aPresence,
                TXIMPRequestId aReqId );

        void DoSubscribeOwnPresenceL( const MPresenceInfoFilter& aPif,
                                          TXIMPRequestId aReqId );

        void DoUnsubscribeOwnPresenceL( TXIMPRequestId aReqId );

        void DoUpdateOwnPresenceSubscriptionPifL( const MPresenceInfoFilter& aPif,
                                          TXIMPRequestId aReqId );


        void DoSubscribePresenceWatcherListL( TXIMPRequestId aReqId );
        void DoUnsubscribePresenceWatcherListL( TXIMPRequestId aReqId );

        void DoSubscribePresentityGroupListL( TXIMPRequestId aReqId );
        void DoUnsubscribePresentityGroupListL( TXIMPRequestId aReqId );

        void DoCreatePresentityGroupL( const MXIMPIdentity& aIdentity,
                                           const TDesC16& aDisplayName,
                                           TXIMPRequestId aReqId );
        void DoDeletePresentityGroupL( const MXIMPIdentity& aIdentity,
                                               TXIMPRequestId aReqId );
        void DoUpdatePresentityGroupDisplayNameL( const MXIMPIdentity& aIdentity,
                                               const TDesC16& aDisplayName,
                                               TXIMPRequestId aReqId );
        void DoSubscribePresentityPresenceL(
                                    const MXIMPIdentity& aIdentity,
                                    const MPresenceInfoFilter& aPif,
                                    TXIMPRequestId aReqId );
        void DoUpdatePresentityPresenceSubscriptionPifL(
                                    const MXIMPIdentity& aIdentity,
                                    const MPresenceInfoFilter& aPif,
                                    TXIMPRequestId aReqId );
        void DoUnsubscribePresentityPresenceL( const MXIMPIdentity& aIdentity,
                                    TXIMPRequestId aReqId );

        void DoSubscribePresentityGroupContentL( const MXIMPIdentity& aGroupId,
                                                     TXIMPRequestId aReqId );

        void DoUnsubscribePresentityGroupContentL( const MXIMPIdentity& aGroupId,
                                                       TXIMPRequestId aReqId );

        void DoAddPresentityGroupMemberL( const MXIMPIdentity& aGroupId,
                                              const MXIMPIdentity& aMemberId,
                                              const TDesC16& aMemberDisplayName,
                                              TXIMPRequestId aReqId );

        void DoRemovePresentityGroupMemberL( const MXIMPIdentity& aGroupId,
                                                 const MXIMPIdentity& aMemberId,
                                                 TXIMPRequestId aReqId );

        void DoUpdatePresentityGroupMemberDisplayNameL( const MXIMPIdentity& aGroupId,
                                                            const MXIMPIdentity& aMemberId,
                                                            const TDesC16& aMemberDisplayName,
                                                            TXIMPRequestId aReqId );
        void DoSubscribePresentityGroupMembersPresenceL(
                                        const MXIMPIdentity& aIdentity,
                                        const MPresenceInfoFilter& aPif,
                                        TXIMPRequestId aReqId );

        void DoUpdatePresentityGroupMembersPresenceSubscriptionPifL(
                                        const MXIMPIdentity& aIdentity,
                                        const MPresenceInfoFilter& aPif,
                                        TXIMPRequestId aReqId );

        void DoUnsubscribePresentityGroupMembersPresenceL( const MXIMPIdentity& aIdentity,
                                        TXIMPRequestId aReqId );

        void DoSubscribePresenceGrantRequestListL( TXIMPRequestId aReqId );

        void DoUnsubscribePresenceGrantRequestListL( TXIMPRequestId aReqId );

        void DoGrantPresenceForPresentityL( const MXIMPIdentity& aIdentity,
                                                   const MPresenceInfoFilter& aPif,
                                                   TXIMPRequestId aReqId );
        void DoGrantPresenceForPresentityGroupMembersL( const MXIMPIdentity& aGroupId,
                                                                const MPresenceInfoFilter& aPif,
                                                                TXIMPRequestId aReqId );

        void DoGrantPresenceForEveryoneL( const MPresenceInfoFilter& aPif,
                                            TXIMPRequestId aReqId );

        void DoUpdatePresenceGrantPifForPresentityL( const MXIMPIdentity& aIdentity,
                                                   const MPresenceInfoFilter& aPif,
                                                   TXIMPRequestId aReqId );

        void DoUpdatePresenceGrantPifForPresentityGroupMembersL( const MXIMPIdentity& aGroupId,
                                                                const MPresenceInfoFilter& aPif,
                                                                TXIMPRequestId aReqId );

        void DoUpdatePresenceGrantPifForEveryoneL( const MPresenceInfoFilter& aPif,
                                                   TXIMPRequestId aReqId );

        void DoWithdrawPresenceGrantFromPresentityL( const MXIMPIdentity& aIdentity, TXIMPRequestId aReqId );

        void DoWithdrawPresenceGrantFromPresentityGroupMembersL( const MXIMPIdentity& aGroupId,
                                                                    TXIMPRequestId aReqId );

        void DoWithdrawPresenceGrantFromEveryoneL( TXIMPRequestId aReqId );

        void DoSubscribePresenceBlockListL( TXIMPRequestId aReqId );
        void DoUnsubscribePresenceBlockListL( TXIMPRequestId aReqId );
        void DoBlockPresenceForPresentityL( const MXIMPIdentity& aPresentityId,
                                            TXIMPRequestId aReqId );
        void DoCancelPresenceBlockFromPresentityL( const MXIMPIdentity& aPresentityId,
                                                   TXIMPRequestId aReqId );

    public: // from T_MWaitObserver

        void WaitCompleted( TInt aRetVal );


    public: // from MXIMPBase

        TAny* GetInterface(
                TInt32 aInterfaceId,
                TIfGetOps aOptions );

        const TAny* GetInterface(
                TInt32 aInterfaceId,
                TIfGetOps aOptions ) const;

        TInt32 GetInterfaceId() const;

    private:
        /**
         * All plugin API methods should call this method
         * to handle test code to plugin communication
         * properly.
         * Add more common stuff here (such as new special messages
         * which behave in a common way to all plugin API calls, etc.)
         * @param aOpId The request id
         */
        void PluginAPIMethodCommonL( TXIMPRequestId& aOpId );

        /**
         * Callback for aux timer
         * @see TCallBack
         */
        static TInt ReconnectSimulator( TAny* aMyself );

        /**
         * Actual callback called from ReconnectSimulator
         */
        void DoReconnectSimulator();

        /**
         * Leaving version of aux timer callback.
         */
        void DoReconnectSimulatorL();

        void SetBooleanToCurrent( TXIMPTestPropertyKeys aKey );
        void SetBoolean( TXIMPTestPropertyKeys aKey );

    public:
        static TInt OrderOfConnections( const T_XIMPTestConnection& aFirst,
                                        const T_XIMPTestConnection& aSecond );

    private:

        static TInt OrderOfClients( const ClientWrapper& aFirst,
                                    const ClientWrapper& aSecond );
    private:

        HBufC* iServerAddress;
        HBufC* iUserName;
        HBufC* iPassword;
        HBufC* iClientId;

        //TInt iConnectedClients;

        RPointerArray< ClientWrapper > iClients;
        ClientWrapper* iClientToBeDeleted;

        TXIMPRequestId iReqId;
        CXIMPTestGeneralWaiter* iWaitter;

        MXIMPStatus* iStatus;

        // last received message
        TXIMPTestMsg iLastMsg;

        // ETrue if reconnect is to be faked for session lost.
        TBool iSessionLostReconnect;

        // ETrue if all reconnects are to be failed.
        TBool iSessionLostFailReconnects;

        // auxiliary timer (session lost simulation)
        CPeriodic* iAuxTimer;


        /**
         * File tool for monitoring events.
         */
        //CXIMPTestFileTool* iFileTool;

        /**
         * Host for connection
         */
        MXIMPProtocolConnectionHost* iConnectionHost;

        CXIMPTestMessenger* iCurrentMessenger;
    };

/**
 * Example protocol plugin
 *
 *
 * @lib ?library
 * @since S60 v4.0
 */
class T_XIMPTestProtocol : public CXIMPProtocolPluginBase
    {
    public:

        static T_XIMPTestProtocol* NewL();
        static T_XIMPTestProtocol* NewLC();

        ~T_XIMPTestProtocol();

    private:

        T_XIMPTestProtocol();
        void ConstructL();

    public: // From MXIMPProtocolPlugin

        void PrimeHost( MXIMPProtocolPluginHost& aHost );

        MXIMPProtocolConnection& AcquireConnectionL(
                    const MXIMPServiceInfo& aServiceInfo,
                    const MXIMPContextClientInfo& aClientCtxInfo );
        void ReleaseConnection(
                        MXIMPProtocolConnection& aConnection );

    public: // from MXIMPBase

        TAny* GetInterface(
                TInt32 aInterfaceId,
                TIfGetOps aOptions );

        const TAny* GetInterface(
                TInt32 aInterfaceId,
                TIfGetOps aOptions ) const;

        TInt32 GetInterfaceId() const;


    private: // Data

        // Prime host
        MXIMPProtocolPluginHost* iHost;
        RXIMPObjOwningPtrArray< T_XIMPTestConnection > iConnections;
    };

#endif // T_PRFWTESTPROTOCOL_H