--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/simpledatamodeladapter/inc/presencepluginxdmutils.h Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,655 @@
+/*
+* 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 CPRESENCEPLUGINXDMUTILS_H
+#define CPRESENCEPLUGINXDMUTILS_H
+
+#include <e32base.h>
+#include <ximpbase.h>
+#include <protocolpresenceauthorization.h>
+#include "presenceplugincommon.h"
+#include "mpresrulesasynchandler.h"
+#include "presencelogger.h"
+#include "presenceplugincontactsobs.h"
+
+class CPresencePluginXdmPresRules;
+class TXIMPRequestId;
+class MXIMPIdentity;
+class MXIMPObjectCollection;
+class CXdmEngine;
+class CXdmDocument;
+class CXdmDocumentNode;
+class TRequestStatus;
+class MPresencePluginConnectionObs;
+
+/**
+ * CPresencePluginXdmUtils
+ *
+ * Simple Engine Connection
+ *
+ * @lib presenceplugin.dll
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CPresencePluginXdmUtils ) : public CActive,
+ public MPresRulesAsyncHandler,
+ public MPresencePluginContactsObs
+ {
+ public: // Constructor and destructor
+
+ /**
+ * Active object asynch states
+ */
+ enum TPluginXdmState
+ {
+ EStateIdle,
+ /** Get XDM lists 1*/
+ EGetXdmLists,
+ /** Create XDM lists */
+ ECreateXdmLists,
+ /** Get XDM lists only, no rules later */
+ EGetXdmListsOnly,
+ /** Create XDM lists only, no rules later */
+ ECreateXdmListsOnly,
+ /** Get RLS service */
+ EGetRlsServices,
+ /** Create RLS service */
+ ECreateRlsServices,
+ /** Update RLS service */
+ EUpdateRlsServices,
+ /** Get rules from server for GrantPresenceForPresentity */
+ EGetXdmRules,
+ /** Update rules to server for GrantPresenceForPresentity */
+ EUpdateXdmRules,
+ /** Update XDM List */
+ EUpdateXdmList,
+ /** Cancel XDM document operation */
+ ECancelDocument,
+ /** Get Block list */
+ EGetXdmBlockList,
+ /** Create presence rules */
+ ECreateXdmRules,
+ /** Subscripe block list */
+ ESubsBlockList,
+ EGetResourceListFromServer,
+ EUpdateBlockedContactPresenceCache
+ };
+
+ /**
+ * Current operation
+ */
+ enum TPluginXdmOperation
+ {
+ ENoOperation,
+ EXdmInit,
+ EXdmDeleteAll,
+ EXdmCancel,
+ EXdmAddUserToGroup,
+ EXdmAddGroupToGroup,
+ EXdmRemoveUserFromGroup,
+ EXdmRemoveGroupFromGroup,
+ EXdmGrantForAll,
+ EXdmWithdrawFromAll,
+ EXdmGetBlockedList,
+ EXdmCreateGroup,
+ EXdmDeleteGroup,
+ EXdmRlsFetch,
+ EXdmRlsAdd,
+ EXdmRlsRemove,
+ EXdmCommitXdm,
+ EXdmCommitRls,
+ EXdmGetBuddyList,
+ EXdmAddUserToRules,
+ EXdmRemoveUserFromRules
+ };
+
+ /**
+ * Operation state for rules update
+ */
+ enum TPluginPresRulesState
+ {
+ EStateNoOperation,
+ EStateAddToWhiteList,
+ EStateAddToBlockList,
+ EStateRemoveFromWhiteList,
+ EStateRemoveFromBlackList,
+ EStateInitializeRules
+ };
+
+ /**
+ * NewL
+ * @param aObs callback for complete requests
+ * @param aXdmId XDm settings id
+ */
+ static CPresencePluginXdmUtils* NewL(
+ MPresencePluginConnectionObs& aObs,
+ TInt aXmdId,
+ TBool aLocalMode );
+
+ virtual ~CPresencePluginXdmUtils();
+
+ /**
+ * Initialize XDMS and Presence XDM structures in network
+ *
+ * @since S60 3.2
+ * @param aStatus Request status of the caller
+ */
+ void InitializeXdmL( TRequestStatus& aStatus );
+
+ /**
+ * Initialize XDMS in network
+ *
+ * @since S60 3.2
+ * @param aStatus Request status of the caller
+ */
+ void InitializeXdmsOnlyL( TRequestStatus& aStatus );
+
+ /**
+ * Initialize Presence rules document only
+ *
+ * @since S60 3.2
+ * @param aStatus Request status of the caller
+ */
+ void InitializePresRulesL( );
+
+ /**
+ * Add entity to granted list
+ *
+ * @since S60 3.2
+ * @param aUri, entity URL
+ * @param aStatus, request status
+ * @return none
+ */
+ void AddEntityToGrantedL(
+ const TDesC& aUri,
+ TRequestStatus& aStatus );
+
+ /**
+ * Remove entity from granted list
+ *
+ * @since S60 3.2
+ * @param aUri, entity URL
+ * @param aStatus, request status
+ * @return none
+ */
+ void RemoveEntityFromGrantedL(
+ const TDesC& aUri,
+ TRequestStatus& aStatus );
+
+ /**
+ * Remove entity from blocked list
+ *
+ * @since S60 3.2
+ * @param aName, entity URL
+ * @param aStatus, request status
+ * @return none
+ */
+ void RemoveEntityFromBlockedL(
+ const TDesC& aName,
+ TRequestStatus& aStatus );
+
+ /**
+ * Add entity to blocked list
+ *
+ * @since S60 3.2
+ * @param aUri, entity URL
+ * @param aStatus, request status
+ * @return none
+ */
+ void AddEntityToBlockedL(
+ const TDesC& aUri,
+ TRequestStatus& aStatus );
+
+ /**
+ * Get (subscribe) Block List
+ *
+ * @since S60 3.2
+ * @param aMembers, member list array
+ * @return none
+ */
+ void SubscribeBlockListL( RPointerArray<MXIMPIdentity>& aMembers );
+
+ /**
+ * Get (subscribe) Buddy List
+ *
+ * @since S60 3.2
+ * @param aMembers, member list array
+ * @return none
+ */
+ void SubscribeBuddyListL( RPointerArray<MXIMPIdentity>& aMembers );
+
+ /**
+ * GetUserListsL
+ *
+ * @since S60 3.2
+ * @param aList, List name
+ * @param aColl, XIMP object collection
+ */
+ void GetEntitiesInListL(
+ const TDesC& aList, MXIMPObjectCollection& aColl );
+
+ /**
+ * Add identity to virtual list
+ *
+ * @since S60 3.2
+ * @param aList, List name
+ */
+ void AddIdentityToVirtualListL(
+ const TDesC& aList );
+
+ /**
+ * CheckXdmDoc
+ *
+ * @since S60 3.2
+ * @param none
+ * @return TBool, state of xdm documents
+ */
+ TBool CheckXdmDoc();
+
+ public: //From assync
+
+ /**
+ * Defined in a base class
+ */
+ void HandlePresUpdateDocumentL( TInt aErrorCode );
+
+ /**
+ * Defined in a base class
+ */
+ void HandlePresUpdateCancelL( TInt aErrorCode );
+
+ private:
+
+ /**
+ * Standard C++ constructor
+ *
+ * @param aObs, plugin connection observer
+ * @param aXmdId, XDM settings id
+ */
+ CPresencePluginXdmUtils(
+ MPresencePluginConnectionObs& aObs,
+ TInt aXmdId,
+ TBool aLocalmode );
+
+ /**
+ * Performs the 2nd phase of construction.
+ */
+ void ConstructL( );
+
+ 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();
+
+ protected: // from MPresencePluginContactsObs
+
+ /**
+ * Defined in a base class
+ */
+ void RequestComplete( TAny* aResult,
+ TPresenceContactsOperation aOperation, TInt aError );
+
+ private:
+
+ /**
+ * DoUpdateXdmLists
+ *
+ * @since S60 3.2
+ * @param aMyStatus, RunL status
+ * @return aOrigState, xdm state
+ */
+ void DoUpdateXdmListsL( TInt aMyStatus,
+ TPluginXdmState aOrigState );
+
+ /**
+ * DoGetXdmLists
+ *
+ * @since S60 3.2
+ * @param aMyStatus, RunL status
+ * @return aOrigState, xdm state
+ */
+ void DoGetXdmListsL( TInt aMyStatus,
+ TPluginXdmState aOrigState );
+
+ /**
+ * DoCreateXdmLists
+ *
+ * @since S60 3.2
+ * @param aMyStatus, RunL status
+ * @return aOrigState, xdm state
+ */
+ void DoCreateXdmListsL( TInt aMyStatus,
+ TPluginXdmState aOrigState,
+ TBool aOnlyResourceList );
+
+ /**
+ * Search list under parent
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ CXdmDocumentNode* SearchListUnderParentL(
+ CXdmDocumentNode* aParent,
+ const TDesC& aName );
+
+ /**
+ * Complete client request
+ *
+ * @since S60 3.2
+ * @param aStatus, client status
+ * @return none
+ */
+ void CompleteClientReq( TInt aStatus );
+
+ /**
+ * Get XDM lists
+ *
+ * @since S60 3.2
+ * @param aCreateRules, create new rule document
+ * @param aLocalMode, use localmode
+ * @return none
+ */
+ void GetXdmListsL( TBool aCreateRules, TBool aLocalMode );
+
+ /**
+ * Create XDM list document model
+ *
+ * @since S60 3.2
+ * @param aCreateRules, create new rule document
+ * @return none
+ */
+ void CreateXdmListsL( TBool aCreateRules );
+
+ /**
+ * Update document to server
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ void UpdateXdmToServerL();
+
+ /**
+ * Updates XDMS reource lists into server
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ void UpdateXdmsL();
+
+ /**
+ * Updates XDM rules
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ void UpdateXdmRulesL();
+
+ /**
+ * Get XDM rules
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ void GetXdmRulesL();
+
+ /**
+ * Handle presence document
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @param aUser, entity name
+ * @return none
+ */
+ void DoHandlePresUpdateDocumentL( TInt aErrorCode );
+
+ /**
+ * Add User to resource list
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @param aName, url
+ */
+ void DoAddUserToListL(
+ const TDesC& aList,
+ const TDesC& aName );
+
+ /**
+ * Remove user from list
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @param aUser, entity name
+ * @return none
+ */
+ void DoRemoveUserFromListL(
+ const TDesC& aList,
+ const TDesC& aName );
+
+ /**
+ * Get member list
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @param aMembers, member array
+ * @return none
+ */
+ void DoGetListMembersL(
+ const TDesC& aList,
+ RPointerArray<MXIMPIdentity>& aMembers );
+
+ /**
+ * Get buddy list
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @return XDM document
+ */
+ CXdmDocumentNode* DoGetBuddyListL( const TDesC& aParent);
+
+ /**
+ * Get buddy list
+ *
+ * @since S60 3.2
+ * @param aList, list name
+ * @parma aBuddyList, xdm document node
+ * @return XDM document
+ */
+ CXdmDocumentNode* DoGetUserListL(
+ const TDesC& aList,
+ CXdmDocumentNode* aBuddyList );
+
+ /**
+ * Check XDM errors
+ *
+ * @since S60 3.2
+ * @param aMyStatus, XDM error code
+ * @return errorcode
+ */
+ TInt CheckIfErrorL( TInt aMyStatus );
+
+ /**
+ * Check if entity already exist
+ *
+ * @since S60 3.2
+ * @param aList, listname
+ * @param aUri, entity url
+ * @return TBool
+ */
+ TBool CheckIfEnityExistL( const TDesC& aList, const TDesC& aUri );
+
+ /**
+ * Update document from server
+ *
+ * @since S60 3.2
+ * @param none
+ * @return none
+ */
+ void UpdateFromServerL();
+
+ /**
+ * Compare uri to attribute without prefix. Returns ETrue if match.
+ *
+ * @since S60 5.0
+ * @param aUri, entity url
+ * @parram aAttribute url attribute
+ * @return TBool
+ */
+ TBool CompareUriWithoutPrefixL(
+ const TDesC& aUri, const TDesC& aAttribute );
+
+ /**
+ * Update blocked contact status to Presence Cache
+ *
+ * @since S60 5.0
+ * @param aMyStatus, error status
+ */
+ void DoUpdateBlockedContactPresenceCacheL(
+ TInt aMyStatus );
+
+ private: // Data
+
+ /**
+ * ximp Plugin connection observer
+ * Own.
+ */
+ MPresencePluginConnectionObs& iConnObs;
+
+ /**
+ * XDM Settings id
+ * Own.
+ */
+ TInt iSettingsId;
+
+ /**
+ * ximp request id
+ * Own.
+ */
+ TXIMPRequestId iximpId;
+
+ /**
+ * ximp request id for own requests
+ * Own.
+ */
+ TXIMPRequestId iximpIdOwn;
+
+ /**
+ * Simple Engine request id
+ * Own.
+ */
+ TInt iSimpleId;
+
+ /**
+ * XDM Engine
+ * Own.
+ */
+ CXdmEngine* iXdmEngine;
+
+ /**
+ * XDM document for resource-lists
+ * Own.
+ */
+ CXdmDocument* iXdmDoc;
+
+ /**
+ * Current state
+ * Own.
+ */
+ TPluginXdmState iXdmState;
+
+ /**
+ * Current operation
+ * Own.
+ */
+ TPluginXdmOperation iOperation;
+
+ /**
+ * Whether Presence XDM is up-to-date
+ * Own.
+ */
+ TBool iPresXdmOk;
+
+ /**
+ * Whether XDM is up-to-date
+ * Own.
+ */
+ TBool iXdmOk;
+
+ /**
+ * client statutus.
+ * Not own.
+ */
+ TRequestStatus* iClientStatus;
+
+ /**
+ * XDM presence rules handling
+ * own.
+ */
+ CPresencePluginXdmPresRules* iXdmPresRules;
+
+ /**
+ * Entity uri
+ * Own.
+ */
+ HBufC* iEntityUri;
+
+ /**
+ * TPluginPresRulesUpdateState
+ * Own.
+ */
+ TPluginPresRulesState iRulesUpdateState;
+
+ /**
+ * XDM localmode
+ * Own.
+ */
+ TBool iLocalMode;
+
+ /**
+ * Request results.
+ * Is contact blocked request
+ */
+ TBool iPresenceContactsAsyncReqResult;
+
+ /*
+ * Initial blocked contact list
+ */
+ RPointerArray<HBufC> iBlockedContacts;
+
+ SIMPLE_UNIT_TEST( T_CPresencePluginGroups )
+ SIMPLE_UNIT_TEST( T_CPresencePluginWatcher )
+ SIMPLE_UNIT_TEST( T_CPresencePluginAuthorization )
+ SIMPLE_UNIT_TEST( T_CPresencePluginXdmUtils )
+ };
+
+#endif // CPRESENCEPLUGINXDMUTILS_H