diff -r 5b6f26637ad3 -r f4a778e096c2 ccservices/cmsservices/cmsengine/Server/inc/cmsservercontact.h --- /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 +#include +#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& 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& 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 & 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 iPresenceEvents; + + /// Array for keeping contact events. Owned. + RPointerArray 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 iXSPFindOperationsArray; + + /// Used to save Retrieve Contact operation. Owned. + MVPbkContactOperationBase* iOperation; + + /// Cached VoIP features + TInt iVoipFeatures; + }; + +#endif //__CMSSERVERCONTACT__ + + +// End of File