diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_messaging/inc/messaginginterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_messaging/inc/messaginginterface.h Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,663 @@ +/* +* 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 the License "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: Defination of class CMessagingInterface +* +*/ + + +#ifndef __MESSAGINGINTERFACE_H +#define __MESSAGINGINTERFACE_H + +#include +#include +#include + +#include "messageheader.h" + +class CMessagingService; +class TInputValidator; +/** + * This class provides the Messaging SAPI interface to LIW Framework +*/ +class CMessagingInterface : public CBase, public MLiwInterface + { + public: + + /** + * Two-phased constructor. + * @return CMessagingInterface* + */ + static CMessagingInterface* NewL(); + + /** + * Destructor. + */ + virtual ~CMessagingInterface(); + + private: + + /** + * Constructor + */ + CMessagingInterface(); + + /** + * Symbian Constructor + */ + void ConstructL(); + + /* + * Function which checks the type of the source and leaves upon + * setting the error message accordingly if the aLeaveFlag is set and + * returns ETrue in case of success, EFalse in case of failure and not leaving + * + * @param aSource + * @param aLeaveFlag + * @param aExpectedType + * @param aCmdName Command Name + * @param aParameter Parameter Name + * @param aMessage Error message + * + * @return TBool + */ + TBool CMessagingInterface::CheckInputTypeL( const TLiwVariant* aSource, + TBool aLeaveFlag, + LIW::TVariantTypeId aExpectedtype, + const TDesC8& aCmdName, + const TDesC8& aParameter, + const TDesC& aMessage ); + + + /** + * Appends error message + * @param aCmdName Command Name + * @param aParameter Parameter Name + * @param aMessage Error message + * @param aMissingOrIncorrectOrNone 0 for none or 1 for missing or 2 for incorrect + * For missing it leave with errorcode SErrMissingArgument + * For incorrect it leaves with errorcode KErrArgument + * For none it wont leave + * + * @return void + */ + void AppendErrorMessageL( const TDesC8& aCmdName, + const TDesC8& aParameter, + const TDesC& aMessage, + TInt aNoneOrMissingOrIncorrect ); + + + /** + * Function called from sync APIs to check whether Async set up is done + * if yes then leaves + * + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + * @param aCmdName Command Name + * @param aMessage Error message + * + * @return void + */ + void LeaveIfAsynchronousL( TUint aCmdOptions, + MLiwNotifyCallback* aCallback, + const TDesC8& aCmdName, + const TDesC& aMessage ); + + + // MLiwInterface member functions + public: + + /** + * Executes the SAPI as per params + * @param aCmdName Command name defining which operation is to be performed + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + virtual void ExecuteCmdL( const TDesC8& aCmdName, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + MLiwNotifyCallback* aCallback = 0 ); + + /** + * Closes the interface + */ + virtual void Close(); + + private: + + /** + * Issues SendMessage request to Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void SendMessageL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Cancels the async operation issued earlier + * @param aCmdName Command name i.e.., Cancel + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + */ + void CancelAsyncL( const TDesC8& aCmdName, + const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions); + /** + * Issues GetList request to Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void GetHeaderListL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Issues New Message notification request to Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void RequestNotificationL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Cancels New Message notification Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void CancelNotificationL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Issues request for Deleteing Message to Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void DeleteMessageL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Issues request for Changing message status to Messaging Service + * @param aInParamList Input param list + * @param aOutParamList Output list + * @param aCmdOptions Command option + * @param aCallback Callback object pointer + */ + void ChangeStatusL( const CLiwGenericParamList& aInParamList, + CLiwGenericParamList& aOutParamList, + TUint aCmdOptions, + MLiwNotifyCallback* aCallback ); + + /** + * Gets the param list for sending message form the inputparam list + * @param aInParamList A CLiwGenericParamList containing required input params + * @return TSendMessageParams* A send message params structure + */ + CSendMessageParams* GetSendParametersL( const CLiwGenericParamList& aInParamList ); + + /** + * Gets the filter parameters, sorting option from the inputparam list + * @param aInParamList A CLiwGenericParamList containing required input parameters + * @return CFilterParamInfo* Filter parameter structure + */ + CFilterParamInfo* GetFilterParametersL( const CLiwGenericParamList& aInParamList, TBool aIndexBaseInp ); + + /** + * Gets the message id from liw input parameter + * @param aInParamList input param list + * @param aMessageId Output parameter containing message id + * @return TInt Error code + */ + void GetMessageIdL( const CLiwGenericParamList& aInParamList, TMsvId& aMessageId, + const TDesC8& aCmdName ); + + /** + * Gets the transaction id from liw input parameter + * @param aInParamList input param list + * @param aTransactionId Output param containing transaction id + * @return TInt Error code + */ + void GetTransactionIdL( const CLiwGenericParamList& aInParamList, + TInt32& aTransactionId, + const TDesC8& aCmdName ); + + /** + * Gets the status flag and its value + * @param aInParamList input param list + * @param aStatusFlag Status flag + * @param aFlagValue Flag value + * @return TInt Error code + */ + void GetStatusFlagAndValueL( const CLiwGenericParamList& aInParamList, + TMessageStatusFlag& aStatusFlag, + TBool& aFlagValue, + const TDesC8& aCmdName ); + + /** + * Gets the notification type + * @param aInParamList input param list + * @param aNotificationType Notification type + * @return void + */ + void GetNotificationTypeL( const CLiwGenericParamList& aInParamList, + TNotificationType& aNotificationType, + const TDesC8& aCmdName ); + + /** + * Gives the sort type + * @param aSortField Sort Field as input string + * @param aSortOrder Sort type as input string + * @return TMsvSorting Sort type + */ + TMsvSorting SortType( const TDesC& aSortField, const TDesC& aSortOrder ); + + + private: + + /** + * CMessagingService class pointer + */ + CMessagingService* iMsgService; + + /** + * iErrorString Heap Descriptor used to store the error message + * in case of error, initially set to NULL + */ + HBufC* iErrorMessage; + }; + +/** + * Callback class for asynchronous SAPI whose result is Integer +*/ +class CMsgCallbackInt : public CMsgCallbackBase + { + private: + + /** + * Constructor + */ + CMsgCallbackInt(); + + public: + + /** + * Two-phase Constructor + * @return CMsgCallbackBase* + */ + static CMsgCallbackBase* NewL(); + + /** + * Gives the result of asynchronous SAPI + * @param aErrCode errcode + * @param aResult Result + * @return void + */ + void NotifyResultL(TInt aErrCode, TAny* aResult); + }; + +/** + * Callback class for asynchronous SAPI message header +*/ +class CMsgCallbackHeader : public CMsgCallbackBase + { + public: + + /** + * Two-phase Constructor + * @return CMsgCallbackHeader* + */ + static CMsgCallbackHeader* NewL(); + + /** + * Destructor + */ + virtual ~CMsgCallbackHeader(); + + private: + + /** + * Constructor + */ + CMsgCallbackHeader(); + + public: + + /** + * Gives the result of asynchronous SAPI + * @param aErrCode errcode + * @param aResult Result + * @return void + */ + virtual void NotifyResultL(TInt aErrCode, TAny* aResult); + }; + +/** +* Implemenation of abstract interface to iterate over the collection of message IDs. +* +* @see CLiwIterable +* +*/ +class CIterableIdList : public CLiwIterable + { + public: + /** + * Two-phase Constructor + * @param aList list to be iterated + * @return new CIterableIdList object + */ + static CIterableIdList* NewL(CMsvEntrySelection* aList, + CMessagingService* aMsgService, + CFilterParamInfo* aFilter ); + + /** + * Resets the iterator. + * + */ + void Reset(); + + /** + * Iterates over the collection entries to fetch the next data element. + * + * @param aEntry contains the next data element and its corresponding data type + * + * @return false if there are no more data elements to be fetched; + * true otherwise + * + */ + TBool NextL(TLiwVariant&); + + /** + * Destructor. + */ + ~CIterableIdList(); + + private: + + /** + * Constructor + * @param aList list to be iterated + * @return void + */ + CIterableIdList(CMsvEntrySelection* aList, + CMessagingService* aMsgService, + CFilterParamInfo* aFilter ); + + + private: + + /** + * CMsvEntrySelection class pointer + */ + CMsvEntrySelection* iList; + + /** + * CMessagingService class pointer + */ + CMessagingService* iMsgService; + + /** + * CFilterParamInfo class pointer + */ + CFilterParamInfo* iFilter; + + /** + * Index on list + */ + TInt iIndex; + }; + +/** +* An associative array or dictionary class. The collection +* key entries are of type string (Descriptor type) and their +* associated values can be an variant type. +* +* \c CLiwDefaultMap provides default map implementation to + *
    + *
  • insert a key-value pair
  • + *
  • find a stored value based on a key
  • + *
  • get a key based on an index
  • + *
  • remove a key-value pair based on a key
  • + *
  • get the total number of stored key-value pairs
  • + *
+* +* +* @see CLiwContainer +* @see TLiwVariant +* @see CLiwMap +* +*/ +class CLiwMessagingMap : public CLiwMap +{ + public: + + /* + * Creates an instance of \c CLiwMessagingMap + * + * @return an instance of \c CLiwMessagingMap + */ + static CLiwMessagingMap* NewL( CMessagingService* aMsgService ); + + + /** + * Inserts a key-value pair element to the map collection. If + * the specified key already exists, it will be removed from + * the collection and the new key-value pair will be added to the + * map. + * + * @param aKey the key to be stored + * @param aValue the value associated with the key to be stored + */ + void InsertL(const TDesC8& aKey, const TLiwVariant& aValue); + + /** + * Finds a value stored in the map collection based on the key. + * + * @param aKey the key to be searched + * @param aFndValue the value associated with the found key + * + * @return false if there is no key stored; true otherwise + */ + TBool FindL(const TDesC8& aKey, TLiwVariant& aValue) const; + + /** + * Returns the number of key-value pair stored in the map collection. + * + * @return the number of key-value pair stored in the map collection + */ + TInt Count() const; + + /** + * Returns the key stored at a specified index. + * + * @param aIndex the index of the key to be found + * @param aFndKey the key found at the passed index + * + * @return true if a key-value entry is found at the passed index; + * false otherwise + */ + TBool AtL(TInt aIndex, TDes8& aFndKey) const; + + /** + * Removes a key from the map collection. + * + * @param aKey the key to be removed from the map + */ + void Remove(const TDesC8& aKey); + + private: + + /* + * Constructor + */ + CLiwMessagingMap(CLiwGenericParamList* aMap, CMessagingService* aMsgService) + : iMap(aMap), iMsgService(aMsgService) + {} + + /* + * Destructor + */ + virtual ~CLiwMessagingMap(); + + /* + * the underlying generic parameter list + */ + CLiwGenericParamList* iMap; + + /** + * CMessagingService class pointer + */ + CMessagingService* iMsgService; + +}; + +class CMsgFileBuffer : public CLiwFileBuffer + { + public: + /** + * Two-phase Constructor + * @param aFile file handle + * @return new CMsgFileBuffer object + */ + static CMsgFileBuffer* NewL(RFile& aFile); + + /** + * Destructor. + */ + ~CMsgFileBuffer(); + + /* + * @return RFile handle + */ + RFile& AsFile(); + + /* + * Returns the pointer to the underlying buffer + * + * @return the pointer to the underlying buffer + */ + TUint8* Buf() const; + + /* + * Returns the length of the buffer data + * + * @return the length of the buffer data + */ + TInt Len(); + + /* + * Reads the specified number of bytes of buffer data + * + * @param aPtr the pointer to the area into which buffer data is read + * @param aLength the number of bytes to be read from the buffer + * + * @return KErrNone if the operation is successful; Otherwise + * TLiwBufferAccess::KLiwBufferNonReadable + * + */ + TInt Read(TUint8* aPtr,TInt aLength); + + /* + * Writes the specified number of bytes into the buffer + * + * @param aPtr the pointer to the data to be written into buffer + * @param aLength the number of bytes to be written into buffer + * + * @return KErrNone if the operation is successful; Otherwise + * TLiwBufferAccess::KLiwBufferReadOnly if writing is not supported + * + */ + TInt Write(const TUint8 aPtr, TInt aLength); + + /* + * Releases the buffer. The service provider implementing concrete buffer + * type should provide appropriate implementation + */ + void Release(); + + /* + * Returns the appropriate type of buffer. + */ + TInt TypeID(); + + /* + * The concrete implementation of buffer types should perform equality operation + * check + */ + virtual TBool operator==(CLiwBuffer& aBuffer); + + private: + CMsgFileBuffer(RFile& aFile); + + private: + RFile iFile; + }; + + +/** + * Input Validator Class used internally to check Inputs + */ + class TInputValidator + { + public: + TInputValidator(); + + /* + * Check whether aTime is valid or not + */ + TBool CheckValidDate( const TTime &aTime ); + + /* + * Check whether aDes contains valid number or not + */ + TBool CheckValidNumber( const TDesC &aDes ); + + /* + * Check whether aFileName is a valid file or not + */ + TBool CheckValidFile( const TDesC &aFileName ); + + /* + * Check whether aDesc is a valid phone number + */ + TBool CheckValidNumberWithPlus( const TDesC &aDes ); + + /* + * Check whether aDesc size is not zero + */ + TBool CheckDesSize( const TDesC &aDes ); + }; + +#endif __MESSAGINGINTERFACE_H \ No newline at end of file