ccservices/cmsservices/cmsengine/Server/inc/cmsservercontact.h
branchRCL_3
changeset 20 f4a778e096c2
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ccservices/cmsservices/cmsengine/Server/inc/cmsservercontact.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,486 @@
+/*
+* Copyright (c) 2007 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: 
+*       
+*
+*/
+
+
+#ifndef __CMSSERVERCONTACT__
+#define __CMSSERVERCONTACT__
+
+// INCLUDES
+#include "cmscontact.h"
+#include <VPbkEng.rsg>
+#include <MVPbkSingleContactOperationObserver.h>
+#include "bpasobserver.h"
+#include "cmscontactinterface.h"
+#include "mpresencetrafficlightsobs.h"
+#include "cmsserver.h"
+
+// CONSTANTS
+const TInt KDefaultBinaryBufferSize              = 1024;
+const TInt KPresenceFieldGroup[] =  { 
+        R_VPBK_FIELD_TYPE_IMPP };
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class CBPAS;
+class CCmsNotifyEvent;
+class CCmsServerSession;
+class CCmsServerAsyncContact;
+class CCmsServerXSPContactHandler;
+class MVPbkContactOperationBase;
+
+/**
+ * CCmsServerContact is responsible for retrieving contact information
+ */
+NONSHARABLE_CLASS( CCmsServerContact ) : public CBase,
+                                         public MBPASObserver,
+                                         public MCmsContactInterface,
+                                         public MPresenceIconNotifier,
+                                         public MVPbkSingleContactOperationObserver
+    {
+    public:  
+        
+        /**
+        * Creates a new instance of CCmsServerContact
+        *
+        * @param aSession Reference to the session instance.
+        * @param aCmsServer Reference to the server instance.
+        * @return Pointer to CCmsServerContact
+        */
+        static CCmsServerContact* NewL( CCmsServerSession& aSession,
+                                        CCmsServer& aCmsServer );
+        
+        /**
+        * Starts fetching enabled fields
+        *
+        * @param Kernel message with client's data
+        */
+        void FetchEnabledFields( const RMessage2& aMessage );
+        
+        /**
+        * Starts fetching contact info
+        *
+        * @param aMessage Kernel message with client's data
+        */
+        void FetchContactData( const RMessage2& aMessage );
+        
+        /**
+        * Packs iPackedContactLinkArray and sends to client
+        *
+        * @param aMessage Kernel message with client's data
+        */
+        void FetchContactLinkArrayL( const RMessage2& aMessage );
+        
+        /**
+        * Starts searching for xSP contacts
+        *
+        * @param aMessage Kernel message with client's data
+        */
+        void FindXSPContactL( const RMessage2& aMessage );
+        
+        /**
+        * Cancels xSP contacts search
+        */
+        void CancelXspContactFind() const;
+        
+        /**
+        * Cancels active async request
+        */
+        void CancelOperation();
+        
+        /**
+        * Saves data into internal cache
+        *
+        * @param a16BitData Data to be cached. Ownership is taken.
+        */
+        void CacheData( HBufC* a16BitData );
+        
+        /**
+        * Saves data into internal cache
+        *
+        * @param a8BitData Data to be cached. Ownership is taken.
+        */
+        void CacheData( HBufC8* a8BitData );
+
+        /**
+        * Destructor
+        */
+        ~CCmsServerContact();
+
+        /**
+        * Activates notifications
+        *
+        * @param aMessage Kernel message with client's data
+        * @param aAskMore If ETrue, returns current presence status imemdiately
+        *   from the presence cache and notify later about any changes
+        */
+        void OrderNotifyL( const RMessage2& aMessage, TBool aAskMore );
+         
+        /**
+        * Completes notification request
+        *
+        * @param aMessage Kernel message with client's data
+        * @param aStatus Status to complete notification with
+        */
+        void CompleteNotify( const RMessage2& aMessage, TInt aStatus );
+
+        /**
+        * @return ETrue if contact was deleted
+        */
+        TBool IsDeleted() const;
+
+        /**
+        * @return Contact store type, see TCmsContactStore
+        */
+        TInt ContactStore() const;
+        
+        /**
+        * @param Contact store URI.
+        */
+        TPtrC StoreUri();
+
+        /**
+        * @return Reference to BPAS handle. Ownership is not transfered.
+        */
+        CBPAS& BPASHandle();
+
+        /**
+        * @return Reference to async contact. Ownership is not transfered.
+        */
+        CCmsServerAsyncContact& AsyncContact(); 
+        
+        /**
+        * @return Pointer to xSP contact handle. Ownership is not transfered
+        */
+        CCmsServerXSPContactHandler* XSPHandler() const;
+        
+        /**
+        * Check voip support 
+        *
+        * @return Bitmask of TCmsVoIPSupport, see cmscontactfield.h
+        */
+        TInt ParseVoIPAvailabilityL();
+        
+        /**
+        * Start next find operation
+        *
+        * @param aNextFindStringPos Position of next string to find in the iIdArray
+        */
+        void StartNextFindOperationL( TInt aNextFindStringPos );
+        
+        /**
+     	* Checks whether the Current contact is top contact.
+        *
+        * @param aMessage Kernel message with client's data
+        */
+        void IsTopContactL( const RMessage2& aMessage );
+        
+        /**
+        * Sets default number for Voice Call
+        */
+        void SetVoiceCallDefaultL();
+        
+    private:
+        
+        /**
+        * Default contructor
+        *
+        * @param aSession Reference to the session instance.
+        * @param aCmsServer Reference to the server instance.
+        */
+        CCmsServerContact( CCmsServerSession& aSession,
+                           CCmsServer& aCmsServer );
+        
+        /**
+        * Second phase constructor
+        */
+        void ConstructL();
+        
+        /**
+        * Sends cached data to the client
+        *
+        * @param aMessageParam Slot in the message to use for sending data
+        */
+        void CachedDataSend8( TInt aMessageParam );
+        
+        /**
+        * @return ETrue if some contact data was cached
+        */
+        TBool CachedData();
+
+        /**
+        * Sends cached data to the client
+        *
+        * @param aMessageParam Slot in the message to use for sending data
+        */
+        void CachedDataSend16( TInt aMessageParam );
+
+        /**
+        * Handles contact presence info.
+        *
+        * @param aInfos IM contacts info
+        */
+        void DeliverPresenceDataL( RPointerArray<CBPASInfo>& aInfos );
+        
+        /**
+        * Packs icon info, language and notification type into one buffer
+        *
+        * @param aBrandId Brand id
+        * @param aElementId Element id 
+        * @param aImageId Image Id
+        * @param aLangId Language Id
+        * @param aServiceTypeId Notification type
+        * @return Packed info
+        */
+        HBufC8* ConstructIconInfoL( const TDesC8& aBrandId, const TDesC8& aTextId,
+                                    const TDesC8& aImageId, TInt aLangId, 
+                                    CCmsContactFieldItem::TCmsContactNotification aServiceTypeId );
+                                    
+        /**
+        * Utility method for creating contactlink array of the contact. 
+        */
+        void CreateContactLinkArrayL(); 
+        
+        /**
+        * Saves info about contact store.
+        *
+        * @param aStoreUri Store URI
+        */
+        void ParseContactStore( const TDesC& aStoreUri );
+        
+        /**
+        * Notifies client about presence status changes or
+        * saves notification to the queue.
+        *
+        * @param aData Packed branded icon info
+        */
+        void SendOrQueueBrandedDataL( const TDesC8& aData );        
+        
+        /**
+        * Clears array with presence notifications
+        */
+        void EmptyPresenceQueue();
+        
+        /**
+        * Clears array with contact event notifications
+        */
+        void EmptyPhonebookQueue();
+        
+        /**
+        * Packs branded icon info into one buffer
+        * 
+        * @param aBrandId Brand id
+        * @param aElementId Element id
+        * @return Packed branded icon info
+        */
+        HBufC8* CompileBrandInfoDataLC( const TDesC8& aBrandId, const TDesC8& aElementId );
+        
+        /**
+        * Starts listening for contact events
+        */
+        void StartPhonebookNotificationL();
+        
+        /**
+        * Starts listening to presence notifications
+        *
+        * @param aMessage Kernel message with client's data
+        * @param aAskMore If ETrue, returns current presence status imemdiately
+        *   from the presence cache and notify later about any changes
+        */
+        void StartPresenceNotificationL( const RMessage2& aMessage, TBool aAskMore );
+
+        /**
+        * Gets length of the client's data 
+        *
+        * @param aMessageSlot Slot in kernel message to be checked for data length
+        * @param aMessage Kernel message with client's data
+        * @return TInt Length of client's data
+        */
+        TInt ClientDesLength( TInt aMessageSlot, RMessage2*& aMessage );
+        
+        /**
+        * Start VoIP notifications
+        */
+        void StartPresenceVoipNotificationL( );
+
+        /**
+        * Start Chat notifications
+        */
+        void StartPresenceChatNotificationL( );   
+        
+        /**
+        * Add Voip enabled fields
+        *
+        * @param aArray Contains Voip fields on return
+        * @param aResourceId Field types to be used in search
+        */
+        void AddVoipFieldL( CDesCArrayFlat& aArray, TInt aResourceId ); 
+        
+        /**
+        * Add Voip enabled fields
+        *
+        * @param aBitmask Contains updated flag for Voip support on return,
+        *   if supported
+        */
+        void CheckServiceProviderSupportL( TInt& aBitmask );
+
+        /**
+        * Handle NewIconForContact method call
+        *
+        * @param aBrandId Brand id
+        * @param aElementId Element id
+        * @param aId Id given in SubscribeBrandingForContactL
+		* @param aBrandLanguage - Brand Language ID
+        */
+        void DoNewIconForContactL( 
+            const TDesC8& aBrandId, 
+            const TDesC8& aElementId,
+            TInt aId,
+            TInt aBrandLanguage );
+	    /**
+        * Custom TCleaupItem callback function called by the CleanupStack
+        *
+        * @param aItem Item to be cleaned up by the cleanup stack
+        */
+
+		static void CleanupResetAndDestroy(TAny*  aItem);		
+
+        
+    private:  //From MCmsContactInterface
+
+        void ContactReadyL( TInt aError, MVPbkStoreContact* aContact );
+        void OfferContactEventL( TCmsPhonebookEvent aEventType,
+                                  const MVPbkContactLink* aContactLink );
+        const MVPbkStoreContact& Contact() const;
+        TBool HandleField( HBufC* aFieldData );
+        TBool HandleField( HBufC8* aFieldData );
+        TBool HandleEnabledFields( HBufC* aEnabledFields );   
+        void HandleError( TInt aError );         
+        void FetchContactL( MVPbkContactLink* aContactLinkToFetch);
+        
+    private:  //From MBPASObserver
+        
+        void HandleInfosL( TInt aErrorCode, RPointerArray<CBPASInfo>& aInfos );
+        void HandleSubscribedInfoL( CBPASInfo* aInfo );
+    
+    private:  //From MPresenceIconNotifier
+
+        void NewIconForContact( 
+                MVPbkContactLink* aLink, 
+                const TDesC8& aBrandId, 
+                const TDesC8& aElementId,
+                TInt aId,
+                TInt aBrandLanguage );
+        void NewIconsForContact( 
+                MVPbkContactLink* aLink, 
+                RPointerArray <MPresenceServiceIconInfo>& aInfoArray,
+                TInt aId );          
+
+    private:  //From MVPbkSingleContactOperationObserver
+
+        void VPbkSingleContactOperationComplete(
+            MVPbkContactOperationBase& aOperation,
+            MVPbkStoreContact* aContact );
+        void VPbkSingleContactOperationFailed(
+            MVPbkContactOperationBase& aOperation,
+            TInt aError );
+        
+    private:  //Data
+        
+        /// ETrue, if contact was deleted.
+        TBool                               iContactDeleted;
+        
+        /// ETrue, if presence notificattion is active
+        TBool                               iPresenceNotifySubscribed;
+        
+        /// Handle to BPAS to get presence info. Oowned.
+        CBPAS*                              iBrandedPresence;
+        
+        /// Contact's store URI. Owned.
+        HBufC*                              iStoreUri;
+        
+        /// Cache for field content. Owned.
+        HBufC*                              iCachedField16;
+        
+        /// Cache for field content. Owned.
+        HBufC8*                             iCachedField8;
+        
+        /// Packed contant link array whicvh contains iContact. Owned.
+        HBufC8*                             iPackedContactLinkArray;
+        
+        /// Kernel message to be completed later for async requests
+        RMessage2                           iMessage;
+        
+        /// Kernel message to be completed for contact notifications
+        RMessage2                           iPbkNotifyMessage;
+        
+        /// Kernel message to be completed for presence notifications
+        RMessage2                           iPresenceNotifyMessage;
+        
+        /// Type of contact store.
+        TCmsContactStore                    iContactStore;
+        
+        /// Reference to session instance. Not owned.
+        CCmsServerSession&                  iSession;
+        
+        /// Store contact. Owned.
+        MVPbkStoreContact*                  iContact;
+        
+        /// Contact manager. Not owned.
+        CVPbkContactManager*                iContactManager;
+        
+        /// Contact object for async requests. Owned.
+        CCmsServerAsyncContact*             iAsyncContact;
+        
+        /// xSPContact handle. Owned.
+        CCmsServerXSPContactHandler*        iXSPContactHandler;
+        
+        /// Array for keeping presence events. Owned.
+        RPointerArray<CCmsNotifyEvent>      iPresenceEvents;
+        
+        /// Array for keeping contact events. Owned.
+        RPointerArray<CCmsNotifyEvent>      iPhonebookEvents;
+        
+        /// Conact link of iContact. Owned.
+        MVPbkContactLink*                   iContactLink; 
+        
+        /// Voip handler to get voip presence status. Owned.
+        MPresenceTrafficLights*             iVoipHandler;
+        
+        /// Chat handler to get chat presence status. Owned.
+        MPresenceTrafficLights*             iChatHandler;
+        
+        /// Array for keeping all contact's IMPP fields. Owned.
+        CDesCArrayFlat* iIdArray;
+        
+        /// Reference to CCmsServer instance. Not owned.
+        CCmsServer& iCmsServer;
+        
+        /// Array of find operations in xSP stores. Owned.
+        RPointerArray<MVPbkContactOperationBase>          iXSPFindOperationsArray;
+
+        /// Used to save Retrieve Contact operation. Owned.
+        MVPbkContactOperationBase*              iOperation;
+
+        /// Cached VoIP features
+        TInt iVoipFeatures;
+    };
+
+#endif  //__CMSSERVERCONTACT__
+
+
+// End of File