simpledatamodeladapter/inc/presencepluginauthorization.h
branchRCL_3
changeset 18 fbd2e7cec7ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpledatamodeladapter/inc/presencepluginauthorization.h	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,660 @@
+/*
+* Copyright (c) 2006-2010 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 CPRESENCEPLUGINAUTHORIZATION_H
+#define CPRESENCEPLUGINAUTHORIZATION_H
+
+#include <e32base.h>
+#include <ximpbase.h>
+#include <protocolpresenceauthorization.h>
+#include "mpresencepluginconnectionobs.h"
+#include "presenceplugincontactsobs.h"
+#include "presencelogger.h"
+
+class TXIMPRequestId;
+class MXIMPIdentity;
+class MPresenceInfoFilter;
+class MProtocolPresenceAuthorizationDataHost;
+class MSimpleWinfo;
+class CPresencePluginData;
+class CPresencePluginContacts;
+
+/**
+ * CPresencePluginAuthorization
+ *
+ * Simple Engine Connection
+ *
+ * @lib presenceplugin.dll
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CPresencePluginAuthorization ) :
+    public CActive,
+    public MProtocolPresenceAuthorization,
+    public MPresencePluginContactsObs
+    {
+    public: // Constructor and destructor
+
+        /**
+         * Current operation
+         */
+        enum TPluginAuthOperation
+            {
+            ENoOperation,
+            EGrantPresenceForPresentity,
+            EGrantPresenceForPresentityGroupMembers,
+            EWithdrawFromPresentity,
+            EWithdrawFromGroupMembers,
+            EGrantForEveryone,
+            EWithdrawFromEveryone,
+            ESubscribeBlockList,
+            EUnsubscribeBlockList,
+            EBlockPresentity,
+            EUnblockPresentity
+            };
+        
+        /**
+         * Block state
+         */
+        enum TPluginAuthState
+            {
+            EStateIdle,
+            EStateBlocked,
+            EStateDoBlock,
+            EStateIsContactBlockedBuddyRequest,
+            EStateDoUnBlock,
+            EStatePresenceGranted,
+            EStateRemovePresentityFromGranted,
+            EStateAcceptBuddyRequest,
+            EStateSubscribe
+            };
+        
+        /**
+         * Constructor.
+         * @param aObs callback for complete requests
+         */ 
+        static CPresencePluginAuthorization* NewL(
+            MPresencePluginConnectionObs& aObs,
+            CPresencePluginData* aPresenceData );
+            
+        /**
+         * Standard C++ destructor
+         */ 
+        virtual ~CPresencePluginAuthorization();
+
+        /**
+         * SetDataHost
+         *
+         * @since S60 3.2         
+         * @param aDataHost, XIMP Plugin Authorization Data Host
+         */
+        void SetDataHost( MProtocolPresenceAuthorizationDataHost& aDataHost );
+
+        /**
+         * WinfoTerminatedL
+         *
+         * @since S60 3.2          
+         * SIMPLE Winfo watcher sunscription is terminated
+         * @param aReason reason code
+         */
+        void WinfoTerminatedL( TInt aReason );
+         
+        /** 
+         * WINFO received from SIMPLE
+         * @since S60 3.2
+         * @param aWinfo WINFO
+         */
+        void WinfoNotificationL( MSimpleWinfo& aWinfo ); 
+
+        /** 
+         * Return List subscribe state
+         *
+         * @since S60 3.2
+         * @param none
+         * @return TBool subscribe state
+         */
+        TBool ReturnListSubsState(); 
+        
+        /** 
+         * Returns plugin data handler.
+         *
+         * @since S60 5.0
+         * @param none
+         * @return CPresencePluginData data handler reference
+         */        
+        CPresencePluginData& PluginData();
+        
+        /** 
+         * Internal grant operation for group operation.
+         *
+         * @since S60 5.0
+         * @param aPresentityId, identity to be subscribed
+         * @param aClientStatus, client status to be completed
+         * @return none
+         */             
+        void DoPerformGrantPresenceForPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TRequestStatus& aClientStatus );
+        
+        /** 
+         * Internal withdraw grant operation for group operation.
+         *
+         * @since S60 5.0
+         * @param aPresentityId, identity to be ungranted
+         * @param aClientStatus, client status to be completed
+         * @return none
+         */                     
+        void DoPerformWithdrawPresGrantFromPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TRequestStatus& aClientStatus );
+        
+        /** 
+         * Internal block operation for group operation.
+         *
+         * @since S60 5.0
+         * @param aPresentityId, identity to be blocked
+         * @param aClientStatus, client status to be completed
+         * @return none
+         */                     
+         void DoPerformBlockPresenceForPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TRequestStatus& aClientStatus );
+
+        /** 
+         * Internal unblock operation for group operation.
+         *
+         * @since S60 5.0
+         * @param aPresentityId, identity to be unblocked
+         * @param aClientStatus, client status to be completed
+         * @return none
+         */    
+         void DoPerformCancelPresenceBlockFromPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TRequestStatus& aClientStatus );
+
+         /**
+          * Resolve is blocked contact a blocked friend request
+          *
+          * @since S60 5.0
+          * @param aPresenceId, identity to be resolved
+          * @param aObserver, Returns results
+          * @param aStatus, client status
+          */
+         void IsBlockedContactFriendRequestL(
+             const TDesC& aPresenceId,
+             MPresencePluginContactsObs& aObserver,
+             TRequestStatus& aStatus );
+
+    private:
+
+        /**
+         * Standard C++ constructor
+         * @param aObs callback for complete requests         
+         */ 
+        CPresencePluginAuthorization(
+            MPresencePluginConnectionObs& aObs,
+            CPresencePluginData* aPresenceData );
+        
+        void ConstructL();
+
+    public:	 // from base class MXIMPBase
+
+        /**
+         * 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 MXIMPProtocolPresenceAuthorization
+
+        /**
+         * Defined in a base class
+         */
+        void DoSubscribePresenceGrantRequestListL(
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoUnsubscribePresenceGrantRequestListL(
+            TXIMPRequestId aReqId );
+
+        // Granting presence information access to single presentities
+
+        /**
+         * Defined in a base class
+         */
+        void DoGrantPresenceForPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoUpdatePresenceGrantPifForPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoWithdrawPresenceGrantFromPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TXIMPRequestId aReqId );
+
+        // Granting presence information access to presentity group members
+
+        /**
+         * Defined in a base class
+         */
+        void DoGrantPresenceForPresentityGroupMembersL(
+            const MXIMPIdentity& aGroupId,
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoUpdatePresenceGrantPifForPresentityGroupMembersL(
+            const MXIMPIdentity& aGroupId,
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoWithdrawPresenceGrantFromPresentityGroupMembersL(
+            const MXIMPIdentity& aGroupId,
+            TXIMPRequestId aReqId );
+
+        // Granting presence information access to everyone
+
+        /**
+         * Defined in a base class
+         */
+        void DoGrantPresenceForEveryoneL(
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoUpdatePresenceGrantPifForEveryoneL(
+            const MPresenceInfoFilter& aPif,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoWithdrawPresenceGrantFromEveryoneL(
+            TXIMPRequestId aReqId );
+
+        // Subscribe presence block list
+
+        /**
+         * Defined in a base class
+         */
+        void DoSubscribePresenceBlockListL(
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoUnsubscribePresenceBlockListL(
+            TXIMPRequestId aReqId );
+
+        // Blocking presence information access from single presentities
+
+        /**
+         * Defined in a base class
+         */
+        void DoBlockPresenceForPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TXIMPRequestId aReqId );
+
+        /**
+         * Defined in a base class
+         */
+        void DoCancelPresenceBlockFromPresentityL(
+            const MXIMPIdentity& aPresentityId,
+            TXIMPRequestId aReqId );
+
+    public: // MPresencePluginContactsObs
+	
+        /**
+         * Request Complete 
+         *
+         * @param aResult Result data returned, ownership changed to client.
+         *                In operation EOperationIsPresenceStoredToContacts
+         *                return type is TBool*.
+         * @param aOperation Operation type
+         * @param aError Completion error code
+         */
+        void RequestComplete( TAny* aResult,
+                TPresenceContactsOperation aOperation,  TInt aError );
+    
+    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();
+
+    private:
+
+        /** 
+         * Save presentity id
+         *
+         * @since S60 3.2
+         * @param aPresentityId presentity id
+         * @param aFormatUri, attempt to format URI (set
+         * ETrue is aPresentityId is uri identity)
+         * @return none
+         */
+        void SetPresIdentityL(
+            const MXIMPIdentity& aPresentityId,
+            TBool aFormatUri );
+
+        /**
+         * Complete client request
+         *
+         * @since S60 3.2        
+         * @param aStatus
+         * @return none
+         */
+        void CompleteXIMPReq( TInt aStatus ); 
+        
+        /**
+         * Start XDM operation
+         *
+         * @since S60 3.2
+         * @param aId, XIMP identity
+         * @param aReqId, request id
+         * @param aOperation, plugin operation
+         * @return none
+         */
+        void StartXdmOperationL(
+            const MXIMPIdentity& aId,
+            TXIMPRequestId aReqId,
+            TPluginAuthOperation aOperation );
+           
+        /**
+         * Start XDM operation
+         *
+         * @since S60 5.0
+         * @param aId, XIMP identity
+         * @param aOperation, plugin operation
+         * @param aClientStatus, client status to complete
+         * @return none
+         */            
+        void StartXdmOperationL(
+            const MXIMPIdentity& aId,
+            TPluginAuthOperation aOperation,
+            TRequestStatus& aClientStatus );
+
+        /**
+         * Call actual xdm operation from xdm utils
+         *
+         * @since S60 3.2         
+         * @param none
+         * @return none
+         */
+        void CallActualXdmOperationL();
+        
+        /**
+         * Subscribe block list
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none         
+         */
+        void SubscribeBlockListL( );
+        
+        /**
+         * Unsubscribe block list
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none         
+         */
+        void UnSubscribeBlockListL();
+        
+        /**
+         * Handle full winfo notification
+         *
+         * @since S60 3.2
+         * @param MSimpleWinfo winfo notification
+         * @return none         
+         */
+        void HandleFullWinfoNotificationL( MSimpleWinfo& aWinfo );
+        
+        /**
+         * Handle partial winfo notification
+         *
+         * @since S60 3.2
+         * @param MSimpleWinfo winfo notification
+         * @return none         
+         */
+        void HandlePartialWinfoNotificationL( MSimpleWinfo& aWinfo );
+        
+        /**
+         * Handle received grant request
+         *
+         * @since S60 3.2
+         * @param TDesC userid
+         * @return none         
+         */
+        void CallHandlePresenceGrantRequestReceivedL( const TDesC& aUserId );
+        
+        /**
+         * Handle obsolated grantrequest
+         *
+         * @since S60 3.2
+         * @param TDesC userid
+         * @return none         
+         */
+        void CallHandlePresenceGrantRequestObsoletedL( const TDesC& aUserId );
+        
+        /**
+         * Grant presence for presentity
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none         
+         */
+        void GrantPresenceForPresentityL();
+        
+        /**
+         * Withdraw from presentity
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none         
+         */
+        void WithdrawFromPresentityL();
+        
+        /**
+         * Set presentity blocked to XIMP
+         *
+         * @since S60 5.1
+         * @param none
+         * @return none
+         */
+        void SetPresentityBlockedToXIMPL();
+        
+        /**
+         * Block presentity
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none
+         */
+        void BlockPresentityL();
+        
+        /**
+         * Unblock presentity
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none
+         */
+        void UnblockPresentityL();
+        
+        /**
+         * Unsubscribe presentity presence
+         *
+         * @since S60 3.2
+         * @param none
+         * @return none         
+         */
+        void UnsubscribePresentityPresenceL();
+        
+    private: // Data
+
+        /**
+         * XIMP Plugin connection observer
+         * Own.
+         */
+        MPresencePluginConnectionObs& iConnObs;
+
+        /**
+         * XIMP Plugin Authorization Data Host
+         * Not own.
+         */
+        MProtocolPresenceAuthorizationDataHost* iDataHost;
+
+        /**
+         * XDM Settings id
+         * Own.         
+         */
+        TInt iSettingsId;
+
+        /**
+         * PrFW request id
+         * Own.
+         */
+        TXIMPRequestId iXIMPId;
+        
+        /**
+         * PrFW request id for own requests
+         * Own.
+         */
+        TXIMPRequestId iXIMPIdOwn;    
+        
+        /**
+         * Simple Engine request id
+         * Own.
+         */
+        TInt iSimpleId;
+        
+        /**
+         * Subscribed items.
+         * Own.
+         */
+        TBool iSubscribed; 
+        
+        /**
+         * Current operation
+         * Own.
+         */    
+        TPluginAuthOperation iOperation;     
+        
+        /**
+         * Current presentity in progress
+         * Own.
+         */
+        HBufC16* iPresIdentity;   
+
+        /**
+         * Whether Presence XDM is up-to-date
+         * Own.         
+         */
+        TBool iXdmOk;
+
+        /**
+         * XDM Utils
+         * Not own.
+         */
+        CPresencePluginXdmUtils* iXdmUtils;
+        
+        /**
+         * Authorization complete
+         * Own.
+         */
+        TBool iComplete;
+        
+        /**
+         * Presence Data
+         * Not Own
+         */
+        CPresencePluginData* iPresenceData;
+        
+        /**
+         * client statutus.
+         * Not own.
+         */
+        TRequestStatus* iClientStatus;      
+        
+        /**
+         * Block state.
+         * Own.
+         */
+        TPluginAuthState iAuthState;
+        
+        /*
+         * Virtual phone book contact database operations
+         * Own.
+         */
+        CPresencePluginContacts* iContacts;
+        
+        /*
+         * Data Returned by CPresencePluginContacts
+        */
+        TBool iContactIsStored;
+        
+        SIMPLE_UNIT_TEST( T_CPresencePluginAuthorization )
+        SIMPLE_UNIT_TEST( T_CPresencePluginXdmUtils )
+         
+    };
+
+#endif // CPresencePluginAuthorization_H
\ No newline at end of file