presencefwsimpleadpt/inc/simplepluginxdmutils.h
branchRCL_3
changeset 18 fbd2e7cec7ef
parent 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presencefwsimpleadpt/inc/simplepluginxdmutils.h	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,747 @@
+/*
+* 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:    Simple Protocol implementation for Presence Framework
+*
+*/
+
+
+
+
+#ifndef CSIMPLEPLUGINXDMUTILS_H
+#define CSIMPLEPLUGINXDMUTILS_H
+
+#include <e32std.h>
+
+#include <badesca.h>
+
+#include <mrlspresxdmasynchandler.h>
+
+#include "simpleplugincommon.h"
+
+// Test suite
+class MSimplePluginTestObs;
+
+class MSimplePluginSettings;
+
+class CPresenceXDM;
+class CRLSXDM;
+class CXdmEngine;
+class CXdmDocument;
+class CXdmDocumentNode;
+
+class TPresenceActionXDM;
+class TPresenceTransformXDM;
+class TPresCondMisc;
+
+
+// notice: class CPtrCArray;  after PrFw headers fixed.
+
+class TRequestStatus;
+
+
+/**
+ * CSimplePluginXdmUtils
+ *
+ * Simple Engine Connection
+ *
+ * @lib ?library
+ * @since s60 v5.0
+ */
+NONSHARABLE_CLASS( CSimplePluginXdmUtils ) : public CActive,
+    public MRLSPresXDMAsyncHandler
+    {
+public:
+
+
+    /**
+     * Active object asynch states
+     */
+    enum TPluginXdmState
+        {
+        EStateIdle,
+        /** Get OMA XDM lists */
+        EGetXdmOMALists,
+        /** Create OMA XDM lists */
+        ECreateXdmOMALists,
+        /** Get OMA XDM lists only, no rules later */
+        EGetXdmOMAListsOnly,
+        /** Create OMA XDM lists only, no rules later */
+        ECreateXdmOMAListsOnly,
+        /** Get RLS service */
+        EGetRlsServices,
+        /** Update RLS service */
+        EUpdateRlsServices,
+        /** Get rules from server for GrantPresenceForPresentity */
+        EGetXdmRules,
+        /** Update rules to server for GrantPresenceForPresentity */
+        EUpdateXdmRules,
+        /** Update XDM OMA List */
+        EUpdateXdmOMAList,
+        /** Cancel XDM document operation */
+        ECancelDocument,
+        /** Re-Update RLS service - 409 HTTP error handling*/
+        EReUpdateRlsServices        
+        };
+
+    /**
+     * Current operation
+     */
+    enum TPluginXdmOperation
+        {
+        ENoOperation,
+        EXdmInit,
+        EXdmInitXdmsOnly,
+        EXdmDeleteAll,
+        EXdmCancel,
+        EXdmAddUserToGroup,
+        EXdmAddGroupToGroup,
+        EXdmRemoveUserFromGroup,
+        EXdmRemoveGroupFromGroup,
+        EXdmGrantForAll,
+        EXdmWithdrawFromAll,
+        EXdmGetBlockedList,
+        EXdmCreateGroup,
+        EXdmDeleteGroup,
+        EXdmRlsFetch,
+        EXdmRlsAdd,
+        EXdmRlsRemove,
+        EXdmGrantGroup,
+        EXdmWithdrawGroup,
+        EXdmSetReactiveAuth,
+        EXdmSetProactiveAuth
+        };
+               
+
+    /**
+     * Constructor.
+     * @param aConnSets connection settings
+     * @param aXdmId XDm settings id
+     */
+    static CSimplePluginXdmUtils* NewL(
+        MSimplePluginSettings& aConnSets,
+        TInt aXdmId);
+
+    virtual ~CSimplePluginXdmUtils();
+    
+    /**
+     * Cancel non active wrappers
+     */
+    void CancelWrappers();
+     
+    /**
+     * Initialize XDMS and Presence XDM structures in network.
+     * @param aStatus Request status of the caller
+     */
+    void InitializeXdmL( TRequestStatus& aStatus );
+
+    /**
+     * Initialize XDMS in network
+     * @param aStatus Request status of the caller
+     */
+    void InitializeXdmsOnlyL( TRequestStatus& aStatus );
+
+    /**
+     * Add resource-list into RLS document, overwrite old document
+     * @param aStatus Request status of the caller
+     */
+    void FetchRlsL( TRequestStatus& aStatus );
+
+    /**
+     * Add resource-list into RLS document.
+     * FetchRlsL must be called before this method.
+     * @param aName list name
+     */
+    void AddRlsGroupL(
+        const TDesC& aName );
+
+    /**
+     * Remove resource-list in RLS document
+     * FetchRlsL must be called before this method.
+     * Use RemoveRlsServiceByResourceListL instead when possible.      
+     * @param aName list name
+     */
+    void RemoveRlsGroupL( const TDesC& aName );
+    
+    /**
+     * Remove service URI in RLS document by corresponding shared XDM document entry.
+     * The document in the server is updated when needed.
+     * FetchRlsL must be called before this method.
+     * This completes without error if the service was not found. 
+     * @param aGroup user's group name, that's converted to resource-list value and used
+     * to match the service resource-list in the rls-services document.
+     * @param aStatus Request status of the caller.     
+     */
+    void RemoveRlsServiceByResourceListL( const TDesC& aGroup, TRequestStatus& aStatus  );    
+    
+    
+    /**
+     * Access service URI in RLS document by corresponding shared XDM document entry.
+     * FetchRlsL must be called before this method.
+     * Leaves with KErrNotFound if RLS service is not found.
+     * @param aGroup user's group name, that's converted to resource-list value and used
+     * to match the service resource-list in the rls-services document.
+     * @return Access service URI in RLS document, ownership is transferred. May be NULL.
+     */
+    HBufC* RlsServiceByResourceListLC( const TDesC& aGroup );     
+
+    /**
+     * Add entity to granted list.
+     * InitializeXdmL must be called before this method.
+     * @param aUri entity URI to be granted
+     * @param aStatus Request status of the caller
+     */
+    void AddEntityToGrantedL( const TDesC& aUri, TRequestStatus& aStatus );
+
+    /**
+     * Remove entity from granted list.
+     * InitializeXdmL must be called before this method.
+     * @param aUri entity URI to be removed
+     * @param aStatus Request status of the caller
+     */
+    void RemoveEntityFromGrantedL(
+        const TDesC&  aUri, TRequestStatus& aStatus );
+
+    /**
+     * Add entity to blocked list.
+     * InitializeXdmL must be called before this method.
+     * @param aUri entity URI to be blocked
+     * @param aStatus Request status of the caller
+     */
+    void AddEntityToBlockedL( const TDesC& aUri, TRequestStatus& aStatus );
+
+    /**
+     * Remove entity from blocked list.
+     * InitializeXdmL must be called before this method.
+     * @param aUri entity URI to be removed
+     * @param aStatus Request status of the caller
+     */
+    void RemoveEntityFromBlockedL(
+        const TDesC&  aUri, TRequestStatus& aStatus );
+
+    /**
+     * Add group to granted.
+     * InitializeXdmL must be called before this method.
+     * @param aName a group to be granted
+     * @param aStatus Request status of the caller
+     */
+    void AddGroupToGrantedL( const TDesC& aName, TRequestStatus& aStatus );
+
+    /**
+     * Remove group from granted list.
+     * InitializeXdmL must be called before this method.
+     * @param aName a group to be removed from granted list
+     * @param aStatus Request status of the caller
+     */
+    void RemoveGroupFromGrantedL(
+        const TDesC&  aName, TRequestStatus& aStatus );
+
+    /**
+     * Grant right for everyone, proactive authorization is set on.
+     * InitializeXdmL must be called before this method.
+     * @param aStatus Request status of the caller
+     */
+    void GrantForEveryoneL( TRequestStatus& aStatus );
+
+    /**
+     * Withdraw right from eveyone, reactive authorization is set on.
+     * InitializeXdmL must be called before this method.
+     * @param aStatus Request status of the caller
+     */
+    void WithdrawFromEveryoneL( TRequestStatus& aStatus );
+    
+    /**
+     * Set reactive authorization policy.
+     * Default rule is set to CONFIRM.
+     */
+    void SetReactiveAuthL( TRequestStatus& aStatus ); 
+    
+    /**
+     * Set proactive authorization policy.
+     * Default rule is set to ALLOW if it was CONFIRM.
+     */
+    void SetProactiveAuthL( TRequestStatus& aStatus );      
+
+    /**
+     * Get (subscribe) Block List.
+     * InitializeXdmL must be called before this method.
+     * @param aMembers blocked users [OUT].
+     */
+    void SubscribeBlockListL( CPtrCArray& aMembers );
+
+    /**
+     * Unsubscribe Block List.
+     * @param aStatus Request status of the caller
+     */
+    void UnsubscribeBlockListL( TRequestStatus& aStatus );
+
+    /**
+     * Create entity's own group
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     * @param aName group name
+     * @param aDisplayName group's display name
+     */
+    void CreateEntityGroupL(
+        const TDesC&  aName,
+        const TDesC&  aDisplayName );
+
+    /**
+     * Delete entity's own group
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     */
+    void DeleteEntityGroupL( const TDesC&  aName );
+
+    /**
+     * Add group member
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     * @param aGroup group name
+     * @param aUser member
+     * @param aDispName display name
+     * @param aStatus Request status of the caller
+     */
+    void AddPresentityGroupMemberL(
+        const TDesC&  aGroup,
+        const TDesC&  aUser,
+        const TDesC&  aDispName,
+        TRequestStatus& aStatus );
+
+    /**
+     * Remove group member
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     * @param aGroup group name
+     * @param aUser member
+     * @param aStatus Request status of the caller
+     */
+    void RemovePresentityGroupMemberL(
+        const TDesC&  aGroup,
+        const TDesC&  aUser,
+        TRequestStatus& aStatus );
+
+    /**
+     * GetUserListsL
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     * The size of the parameter arrays are same.
+     * @param aIds sip id array [OUT]
+     * @param aDispNames display name array [OUT]
+     */
+    void GetUserListsL( CDesCArrayFlat& aIds, CDesCArrayFlat& aDispNames );
+
+    /**
+     * GetEntitiesInListL
+     * InitializeXdmL or InitilaizeXdmsOnlyL must be called before this method.
+     * The size of the parameter arrays are same.
+     * @param aList naem of the user's list [IN]
+     * @param aIds sip id array [OUT]
+     * @param aDispNames display name array [OUT]
+     */
+    void GetEntitiesInListL(
+        const TDesC&  aList, CPtrCArray& aIds, CPtrCArray& aDispNames);
+
+    /**
+     * Updates XDM reource lists into server
+     * @param aStatus Request status of the caller
+     */
+    void CommitXdmL( TRequestStatus& aStatus );
+
+    /**
+     * Updates RLS reource lists into server
+     * @param aStatus Request status of the caller
+     */
+    void CommitRlsL( TRequestStatus& aStatus );
+
+    /**
+     * Test Suite setter
+     * @param aObs test observer, may be NULL
+     */
+    void SetTestObserver( MSimplePluginTestObs* aObs );
+
+    /**
+     * Generate RLS document URI based on URI template located in CentRep variation definition.
+     * @param aGroup grouup name
+     * @param aPresentityUri presntity's URI, may be SIP or TEL URI. Domain part is stripped from SIP URI.
+     * @param aDomain domain part of the URI,  
+                      Leading '@' is stripped off and it must be hard coded in a template when needed.
+     * @return RLS document URI     
+     */
+    HBufC16* CreateRlsDocumentUri16LC(
+        const TDesC16& aGroup,
+        const TDesC16& aPresentityUri,
+        const TDesC16& aDomain );                
+
+private:
+
+    CSimplePluginXdmUtils(
+        MSimplePluginSettings& aObs, TInt aXdmId );
+
+    void ConstructL( );
+
+  TBool DoesUserListExistsL( const TDesC& aName );
+
+
+public:
+
+// from base class MRLSPresXDMAsyncHandler
+
+    /**
+     * Defined in a base class
+     */
+    void HandleRLSUpdateDocumentL(TInt aErrorCode);
+
+    /**
+     * Defined in a base class
+     */
+    void HandleRLSUpdateCancelL(TInt aErrorCode);
+
+    /**
+     * Defined in a base class
+     */
+    void HandleRLSDeleteAllEmptyListsL(TInt aErrorCode);
+
+    /**
+     * Defined in a base class
+     */
+    void HandlePresUpdateDocumentL(TInt aErrorCode);
+
+    /**
+     * Defined in a base class
+     */
+    void HandlePresUpdateCancelL(TInt aErrorCode);
+
+
+
+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:
+
+    /**
+     * Complete client request
+     * @param aStatus return code
+     */
+    void CompleteClientReq( TInt aStatus );
+
+    /**
+     * Get XDm OMA lists from a server
+     */
+    void GetXdmOMAListsL();
+
+    /**
+     * Create OMA Shared Xdm Lists when needed.
+     * @return true if a list is created.
+     */
+    TBool CreateXdmOMAListsIfNeededL( );
+
+    /**
+     * Create a specified OMA Shared Xdm List when needed.
+     *
+     * @param aRoot parent for the new list
+     * @param aName name for the new list
+     * Leave with KErrAlreadyExists if all the lists already exist.
+     * @return true is list was added into root node.
+     */
+    TBool CreateXdmOMAListIfNeededL( CXdmDocumentNode* aRoot, const TDesC& aName );
+
+    /**
+     * Create Resource List in shared xdm document
+     * @param aParent parent for the new list
+     * @param aName name for the new list
+     */
+    void CreateResourceListL(
+        CXdmDocumentNode* aParent, const TDesC& aName );
+
+    /**
+     * Search List under a parent list, one level only
+     * @param aParent parent list node
+     * @param aName list to be searched for
+     * @return child node found or NULL if not found.
+     */
+    CXdmDocumentNode* SearchListUnderParentL(
+        CXdmDocumentNode* aParent, const TDesC& aName );
+
+    void GetXdmRulesL();
+
+    /**
+     * Make Rls list URI
+     * @param aXCapUri XCAP URI
+     * @param aListName a list to be referred
+     * @return URI, ownerhisp is transferred
+     */
+    HBufC* MakeRlsUriL(
+        const TDesC& aXcapUri, const TDesC& aListName );
+
+    /**
+     * Make Rls list URI
+     * @param aXCapUri XCAP URI
+     * @param aListName a list to be referred
+     * @return URI, ownerhisp is transferred
+     */
+    HBufC* MakeRlsBuddyUriL(
+        const TDesC& aXcapUri, const TDesC& aListName );
+
+    void MakeInitialXdmsDocumentL();
+
+    /**
+     * Updates XDM rules into server
+     */
+    void UpdateXdmRulesL();
+
+    /**
+     * Updates XDMS reource lists into server
+     */
+    void UpdateXdmsL();
+
+    /**
+     * Updates RLS document into server
+     */
+    void UpdateRlsL();
+
+    /**
+     * Handles pres auth rules document callback method
+     * @param aErrorCode returned error code
+     */
+    void DoHandlePresUpdateDocumentL( TInt aErrorCode );
+    
+    /**
+     * Handles RLS document callback method
+     * @param aErrorCode returned error code
+     */
+    void DoHandleRLSUpdateDocumentL(TInt aErrorCode);    
+
+    void DoAddUserToListL(
+        const TDesC& aList, const TDesC&  aName );
+
+    void DoAddUserToUserListL(
+        const TDesC& aList, const TDesC&  aUser, const TDesC&  aDispName );
+
+    void DoAddListIntoGrantRuleL( const TDesC& aListUri );
+
+    void DoRemoveListFromGrantRuleL( const TDesC& aListUri );
+
+    void DoRemoveUserFromListL(
+        const TDesC& aList, const TDesC&  aName );
+
+    void DoRemoveUserFromUserListL( const TDesC& aList, const TDesC&  aUser );
+
+    void DoGrantForAllL();
+
+    void DoWithdrawFromAllL();
+    
+    void DoSetReactiveAuthL(); 
+    
+    /**
+     * Set Proactive authorization
+     */
+    void DoSetProactiveAuthL();        
+
+    void DoGetListMembersL(
+        const TDesC& aList, CPtrCArray& aMembers  );
+
+    void DoCreateEntityGroupL( const TDesC& aList, const TDesC& aDisName  );
+
+    void DoDeleteEntityGroupL( const TDesC& aList );
+
+    /**
+     * Search OMA Buddy List
+     * Leaves with KErrNotFound if not found
+     * @return list node
+     */
+    CXdmDocumentNode* DoGetBuddyListL();
+
+    /**
+     * Search a specific user XDM list
+     * Leaves with KErrNotFound if not found
+     * @param aList list name
+     * @param aBuddyList parent buddy list
+     * @return list node
+     */
+    CXdmDocumentNode* DoGetUserListL(
+        const TDesC& aList, CXdmDocumentNode* aBuddyList );
+        
+    /**
+     * Remove service URI in RLS document by corresponding shared XDM document entry.
+     * FetchRlsL must be called before this method.
+     * @param aResourceList resource-list entry value, a reference to Shared XDM document.
+     * @return ETrue if service is found and removed.
+     */
+    TBool DoRemoveRlsServiceByResourceListL( const TDesC& aResourceList ); 
+    
+    /**
+     * Access service URI in RLS document by corresponding shared XDM document entry.
+     * FetchRlsL must be called before this method.
+     * @param aResourceList resource-list entry value, a reference to Shared XDM document.
+     * @return service URI, ownership is transferred.
+     */
+    HBufC* DoGetRlsServiceByResourceListL( const TDesC& aResourceList );  
+    
+    /**
+     * Accesor for iAuxBuffer that contains last negotiated RLS service URI
+     * @return buffer content
+     */    
+    TPtrC AuxBuffer(); 
+    
+    /**
+     * Run next XDM routines
+     * @param aOrigState original XDM state
+     * @param aStatus error status
+     */
+    void DoXdmRunL( TPluginXdmState aOrigState, TInt aStatus ); 
+    
+    /**
+     * Handle RLS service URI negatioation
+     */
+    void RlsServiceUriNegotiationL();
+    
+    /**
+     * Make default auth rule
+     * @param aRuleId Rule id
+     * @param aAction action class initialized
+     * @param aTransform transform class initialized
+     */
+    void MakeDefaultRuleL( 
+        TDes& aRuleId, 
+        TPresenceActionXDM& aAction, 
+        TPresenceTransformXDM& aTransform,
+        TPresCondMisc& aMisc );
+      
+    /**
+     * Replace Group tag in URI
+     * @param aBuf URI buffer [IN,OUT]
+     * @param aGroup Group name
+     */         
+    static void ReplaceGroupTag( HBufC16* aBuf, const TDesC16& aGroup );
+        
+    /**
+     * Replace Domain tag in URI
+     * @param aBuf URI buffer [IN,OUT]
+     * @param aDomain Domain value
+     */          
+    static void ReplaceDomainTag( HBufC16* aBuf, const TDesC16& aDomain );
+        
+    /**
+     * Replace User tag in URI
+     * @param aBuf URI buffer [IN,OUT]
+     * @param aPresentityUri User URI value
+     */    
+    static void ReplaceUserTag( 
+        HBufC16* aBuf, const TDesC16& aPresentityUri );
+
+
+private: // Data
+
+    /**
+     * PrFw Plugin connection observer
+     */
+    MSimplePluginSettings& iConnSets;
+
+    /**
+     * XDM Settings id
+     */
+    TInt iSettingsId;
+
+    /**
+     * Simple Engine request id
+     */
+    TInt iSimpleId;
+
+    /**
+     * Subscribed items. Bitmask.
+     */
+    TUint iSubscribed;
+
+    /**
+     * Presence XDM Client
+     * Own.
+     */
+    CPresenceXDM* iPresenceXdm;
+
+    /**
+     * RlsXDM Client
+     * Own.
+     */
+    CRLSXDM* iRlsXdm;
+
+    /**
+     * XDM Engine
+     * Own.
+     */
+    CXdmEngine* iXdmEngine;
+
+    /**
+     * XDM document for resource-lists
+     * Own.
+     */
+    CXdmDocument* iXdmDoc;
+
+    /**
+     * Current state
+     */
+    TPluginXdmState iXdmState;
+
+    /**
+     * Current operation
+     */
+    TPluginXdmOperation iOperation;
+
+    /**
+     * Whether Presence XDM is up-to-date
+     */
+    TBool iPresXdmOk;
+
+    /**
+     * Whether XDM is up-to-date
+     */
+    TBool iXdmOk;
+
+    /**
+     * client statutus.
+     * Not own.
+     */
+    TRequestStatus* iClientStatus;
+
+    /**
+     * Test suite observer
+     * Not own.
+     */
+    MSimplePluginTestObs* iTestObs;
+    
+    /**
+     * Auxiliary buffer for for Negotiated RLS service URI
+     */
+    HBufC* iAuxBuffer;
+    
+    /**
+     * Auxiliary buffer for for Negotiated RLS service URI
+     */
+    HBufC* iAuxBuffer2;    
+         
+    };
+
+
+
+#endif // CSimplePluginXdmUtils_H