--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/inc/mmsgenutils.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,508 @@
+/*
+* Copyright (c) 2002 - 2009 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:
+* Utility methods for UI and engine modules. Provides help for address
+* string parsing, and contact database access.
+* General address format is either
+* alias<real-address>
+* or
+* <real-address>
+* as used in the Client MTM API.
+*
+*/
+
+
+
+#ifndef TMMSGENUTILS_H
+#define TMMSGENUTILS_H
+
+// INCLUDES
+#include <badesca.h> // CDesCArray
+#include "mmsconst.h"
+
+// CONSTANTS
+_LIT( KSepaOpen, "<" );
+_LIT( KSepaClose, ">" );
+
+// This defines the number of digits that will used for matching phone numbers to contacts
+// in contact database. The number is counted from the right.
+const TInt KMmsNumberOfDigitsToMatch = 7;
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+class CContactMatcher;
+class CVPbkContactStoreUriArray;
+class MVPbkContactLink;
+class CVPbkContactLinkArray;
+
+/**
+* TMmsGenUtils
+*/
+class TMmsGenUtils
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ IMPORT_C TMmsGenUtils();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~TMmsGenUtils();
+
+
+ public: // New functions
+
+ /**
+ * Resolve address type and the real address part excluding alias definition.
+ * NOTE: Ipv4 and IPv6 not yet supported.
+ * @param aAddress address to be resolved. May include alias part.
+ * @param aType address type (OUT)
+ * @param aRealAddress real address part (OUT)
+ * @param aMaxLength maximum length of the address.
+ * @return KErrNone if successful.
+ */
+ IMPORT_C static TInt AddressTypeAndRealAddress(
+ const TDesC& aAddress,
+ TMmsAddressType& aType,
+ TDes& aRealAddress,
+ TInt aMaxLength,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Validate the address.
+ * The address must be EMail address or MMS global phone number address.
+ * @param aAddress address to be resolved.
+ * @param aReal is true if address is real address excluding alias definition.
+ * @return ETrue if real address without alias part
+ * @param aOpen real address part start separator. Optional. Open bracket is default.
+ * @param aClose real address part end separator. Optional. Close bracket is default.
+ */
+ IMPORT_C static TBool IsValidAddress(
+ const TDesC& aAddress,
+ TBool aReal = ETrue,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Validate that the address contains valid EMail address.
+ * @param aAddress address to be resolved.
+ * @param aReal is true if address is real address excluding alias definition.
+ * @return ETrue if real address without alias part
+ * @param aOpen real address part start separator. Optional. Open bracket is default.
+ * @param aClose real address part end separator. Optional. Close bracket is default.
+ */
+ IMPORT_C static TBool IsValidEmailAddress(
+ const TDesC& aAddress,
+ TBool aReal = ETrue,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Validate that the address contains valid MMS global phone number address.
+ * You do not need to strip off the alias before this method.
+ * @param aAddress address to be resolved.
+ * @param aReal is true if address is real address without alias definition.
+ * @param aOpen real address part start separator. Optional. Open bracket is default.
+ * @param aClose real address part end separator. Optional. Close bracket is default.
+ * @return ETrue if valid address
+ */
+ IMPORT_C static TBool IsValidMMSPhoneAddress(
+ const TDesC& aAddress,
+ TBool aReal = ETrue,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Alias part from the address.
+ * @param aAddress address to be resolved.
+ * @param aOpen real address part start separator. Optional. Open bracket is default.
+ * @param aClose real address part end separator. Optional. Close bracket is default.
+ * @return address alias. Zero length if not defined.
+ */
+ IMPORT_C static TPtrC Alias(
+ const TDesC& aAddress,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Real address excluding alias part.
+ * @param aAddress address to be resolved.
+ * @param aOpen real address part start separator. Optional. Open bracket is default.
+ * @param aClose real address part end separator. Optional. Close bracket is default.
+ * @return real address.
+ */
+ IMPORT_C static TPtrC PureAddress(
+ const TDesC& aAddress,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Generate address from given address and alias
+ * @param aRealAddress real address
+ * @param aAlias alias part
+ * @param aOpen real address part start separator.
+ * Optional. Open bracket is default.
+ * @param aClose real address part end separator.
+ * Optional. Close bracket is default.
+ * @return combined address in format: <br>
+ * alias separator1 real_address separator2
+ */
+ IMPORT_C static HBufC* GenerateAddressL(
+ const TDesC& aRealAddress,
+ const TDesC& aAlias,
+ const TDesC& aOpen = KSepaOpen,
+ const TDesC& aClose = KSepaClose );
+
+ /**
+ * Get message's description.
+ * @param aPath full path of the attachment binary file
+ * @param aFileSize attachment size
+ * @param aMimeType attachment's MIME type.
+ * @param aCharSet attachment character set MIBEnum value.
+ * @param aDescription message entry's description (OUT).
+ * Truncated as necessary to fit into return value.
+ */
+ IMPORT_C static void GetDescriptionL(
+ RFs& aFs,
+ const TDesC& aPath,
+ TInt aFileSize,
+ TPtrC8 aMimetype,
+ TInt aCharSet,
+ TDes& aDescription );
+
+ /**
+ * Replaces CRs + LFs with spaces and trims all white spaces.
+ * @param aDes string where to replace CRs + LFs (IN/OUT)
+ */
+ IMPORT_C static void ReplaceCRLFAndTrim( TDes16& aDes );
+
+ /**
+ * Replaces CRs + LFs with spaces and trims all white spaces.
+ * @param aDes string where to replace CRs + LFs (IN/OUT)
+ */
+ IMPORT_C static void ReplaceCRLFAndTrim( TDes8& aDes );
+
+
+ /**
+ * Write message to MMS client log
+ * @param aFmt like sprintf params in C++.
+ */
+ IMPORT_C static void Log(
+ TRefByValue<const TDesC> aFmt,...);
+
+// The following function is for future use
+ /**
+ * Removes all escapes from standard URIs, and replaces them with chars.
+ * The user is reponsible for allocating the aOutput object prior to
+ * calling the method.
+ * (e.g. <space> character coding is changed from "%20" to " ".)
+ * @param aInput URI received from network (IN).
+ * @param aOutput descriptor containing the resulting string (OUT).
+ * @return errorvalue.
+ */
+ /*static TInt ConvertEscapesFromUri(
+ const TDesC8& aInput,
+ TDes8& aOutput
+ );*/
+
+ /**
+ * Decodes base64 or quoted-printable descriptor into plain unicode.
+ * The user is responsible for allocating memory for output parameter.
+ * @param[in] aInput 'base64' or 'quoted-printable' encoded string (IN).
+ * @param[out] aOutput 16 bit unicode descriptor containing the resulting
+ * string.
+ * @param[in] aFs open file system handle
+ * @return errorvalue.
+ */
+ IMPORT_C static void DecodeAndConvertMessageHeaderL(
+ const TDesC8& aInput,
+ TDes16& aOutput,
+ RFs& aFs
+ );
+
+ /**
+ * Generic method to check if free drive storage
+ * space is or will fall below Critical Level (CL).
+ * The CL per drive is defined by this module.
+ * @param aFs File server session.
+ * Must be given if available in the caller.
+ * If NULL this method will create a temporary session for
+ * a check, but then the check is more expensive.
+ * @param aBytesToWrite number of bytes the caller is about to add
+ * FFS.The value 0 checks if the current
+ * space is already below the CL.
+ * @param aDrive number of the drive to be checked.
+ * (see TDriveNumber of f32file.h)
+ * @return ETrue if storage space would go below CL after adding
+ * aBytesToWrite more data, EFalse otherwise.
+ * Leaves on error with one of system-wide error code.
+ * e.g. KErrNotReady if drive contais no media.
+ */
+ IMPORT_C static TBool DiskSpaceBelowCriticalLevelL(
+ RFs* aFs, TInt aBytesToWrite, TInt aDrive);
+
+ /**
+ * Check if network operations are allowed
+ * @return ETrue if network operations are allowed
+ * EFalse if network operations are forbidden
+ */
+ IMPORT_C static TBool NetworkOperationsAllowed();
+
+ /**
+ * Add attribute to an attribute array. No duplicates allowed
+ * If attribute exists, its value is changed
+ * @param aName Name of the attribute (case sensitive)
+ * @param aValue Value of the attribute
+ * @param aAttributeList Array of attributes
+ * Leaves if memory runs out
+ */
+ IMPORT_C static void AddAttributeL(
+ const TDesC& aName,
+ const TDesC& aValue,
+ CDesCArray& aAttributeList );
+
+ /**
+ * Get value for an attribute.
+ * @param aName Name of the attribute (case sensitive)
+ * @param aAttributeList Array of attributes
+ * @return Pointer to the value of the attribute
+ * Leaves with KErrNotFound if attribute not found
+ */
+ IMPORT_C static TPtrC GetAttributeL(
+ const TDesC& aName,
+ const CDesCArray& aAttributeList );
+
+ /**
+ * Check if attribute is present
+ * @param aName Name of the attribute (case sensitive)
+ * @param aAttributeList Array of attributes
+ * @return ETrue if the attribute is found, EFalse otherwise
+ */
+ IMPORT_C static TBool FindAttribute(
+ const TDesC& aName,
+ const CDesCArray& aAttributeList );
+
+ /**
+ * Delete named attribute from list
+ * @param aName Name of the attribute (case sensitive)
+ * @param aAttributeList Array of attributes
+ */
+ IMPORT_C static void DeleteAttribute(
+ const TDesC& aName,
+ CDesCArray& aAttributeList );
+
+ /**
+ * Generate message details (alias) from ContactDb based on given address.
+ * Only default separators <> are allowed (compatibility with email)
+ *
+ * @since 3.1
+ * @param aAddress address. May include alias part, which will be the result.
+ * @param aAlias generated alias name (OUT). If no match in contact db then
+ * this is a real address part of aAddress.
+ * @param aMaxLength maximum length of the alias
+ * @param aFs file system
+ * @return KErrNone if no fatal error, Otherwise general error code.
+ */
+ IMPORT_C static TInt GenerateDetails(
+ const TDesC& aAddress,
+ TDes& aAlias,
+ TInt aMaxLength,
+ RFs& aFs );
+
+ /**
+ * Get alias from ContactDb based on given address.
+ *
+ * @since 3.1
+ * @param aAddress address (pure real address).
+ * @param aAlias generated alias name (OUT).
+ * @param aMaxLength maximum length of the alias
+ * @param aFs file system
+ * @return KErrNone if no fatal error, Otherwise general error code.
+ */
+ IMPORT_C static TInt GetAlias(
+ const TDesC& aAddress,
+ TDes& aAlias,
+ TInt aMaxLength,
+ RFs& aFs );
+
+ /**
+ * Get alias from ContactDb based on given address.
+ *
+ * @since 3.1
+ * @param aAddress Array of addresses (pure real address).
+ * @param aAlias Array of generated alias names (OUT).
+ * @param aMaxLength maximum length of the alias
+ * @param aFs file system
+ * Leaves in case of error
+ */
+ IMPORT_C static void GetAliasForAllL(
+ const CDesCArray& aAddress,
+ CDesCArray& aAlias,
+ TInt aMaxLength,
+ RFs& aFs );
+
+ /**
+ * Read decode logging and dump settings from central repository
+ * @since 3.2
+ *
+ * @param aDecodeLoggingOn tells if detailed logging is needed
+ * @param aDumpOn tells if binary dump of message is needed
+ */
+ IMPORT_C static void GetLoggingSettings( TBool& aDecodeLoggingOn, TBool& aDumpOn );
+
+
+ protected: // New functions
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ TMmsGenUtils( const TMmsGenUtils& );
+
+ // Prohibit assignment operator
+ TMmsGenUtils& operator= ( const TMmsGenUtils& );
+
+ /**
+ * Generate alias from ContactDb based on given address.
+ * @param aFs file system
+ * @param aAddress real address
+ * @param aAlias generated alias name (OUT)
+ * @param aMaxLength maximum length of the alias
+ * @param aId contacd db id of the matched contact
+ */
+ static void DoGetAliasL(
+ RFs& aFs,
+ const TDesC& aAddress,
+ TDes& aAlias,
+ TInt aMaxLength );
+
+
+ /**
+ * Generate aliases from ContactDb based on given address.
+ * This is optimized version of the previous DoGetAliasL
+ * because the contact db is opened before calling this function.
+ * Opening the db is quite an time consuming operation.
+ * @param aAddress real address
+ * @param aAlias generated alias name (OUT)
+ * @param aMaxLength maximum length of the alias
+ * @param aContactMatcher pointer to contact matcher
+ * @param aId contacd db id of the matched contact
+ * @param aDigitsToMatch number of digits to match
+ */
+ static void DoGetAliasL(
+ const TDesC& aAddress,
+ TDes& aAlias,
+ TInt aMaxLength,
+ CContactMatcher& aContactMatcher,
+ TInt aDigitsToMatch );
+
+ /**
+ * Find position of attribute
+ * @param aName Name of the attribute (case sensitive)
+ * @param aAttributeList Array of attributes
+ * @return index of attribute, KerrNot found if not found
+ */
+ static TInt FindAttributePosition(
+ const TDesC& aName,
+ const CDesCArray& aAttributeList );
+
+ /**
+ * Get number of digits to be used when matching phone numbers
+ * @return number of digits to match from central repository
+ * If reading central repository fails, returns hard coded default
+ */
+ static TInt DigitsToMatch();
+
+ /**
+ * Create contact match wrapper and open all stores
+ * Caller must close stores and delete contact matcher when no longer needed
+ * @param aFs file system
+ * @return pointer to contact matcher for further operations
+ * Leaves in case of error
+ */
+ static CContactMatcher* OpenAllStoresL( RFs& aFs );
+
+
+ /**
+ * extracts contact name out of the contact link passed
+ * Caller must delete the name buffer returned
+ * @param aContactLink - contact link
+ * @param aContactMatcher - contact matcher
+ * @return pointer to contact name for further operation
+ * Leaves in case of error
+ */
+ static HBufC* GetContactNameL(
+ const MVPbkContactLink& aContactLink,
+ CContactMatcher &aContactMatcher);
+
+
+ /**
+ * extracts contact name and converts to lower case chars.
+ * Caller must delete the name buffer returned
+ * @param aContactLink - contact link
+ * @param aContactMatcher - contact matcher
+ * @return pointer to contact name for further operation
+ * Leaves in case of error
+ */
+ static HBufC* GetContactNameInLowerCaseL(
+ const MVPbkContactLink& aContactLink,
+ CContactMatcher &aContactMatcher);
+
+ /**
+ * checks if contact names in the linkArray are identical. Can be used t
+ * Caller must delete the name buffer returned
+ * @param aLinkArray- contact link array
+ * @param aContactMatcher - contact matcher
+ * @param aNameIndex - index of the name to be finally shown(output param)
+ * @return true/false, to decide if name has to be shown or not.
+ * Leaves in case of error
+ */
+ static TBool ShowContactNameL(
+ CVPbkContactLinkArray* aLinkArray,
+ TInt &aNameIndex,
+ CContactMatcher &aContactMatcher);
+
+
+ /**
+ * Gets the index of contact match in current store.
+ * If multiple matches are found in current store, then the link Array
+ * is modified to include only current store contact matches for further name mapping.
+ * else, link array can be used as is for further name mapping
+ * @param aLinkArray- contact link array containing all the matches
+ * @return Valid name index, if single match in current store is found
+ * else returns KErrMultipleMatchFound, if multiple mathes are found
+ * and also modifies aLinkArray as explained above.
+ * Leaves in case of error
+ */
+ static TInt GetCurrentStoreIndexL( CVPbkContactLinkArray& aLinkArray );
+
+ private: // Data
+
+ };
+
+#endif // TMMSGENUTILS_H
+
+// End of File