diff -r f5050f1da672 -r 04becd199f91 javaextensions/wma/mms/src.s60/cjavammsmessagehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/wma/mms/src.s60/cjavammsmessagehandler.h Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,291 @@ +/* +* Copyright (c) 2008 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: ?Description + * +*/ + + +#ifndef CJAVAMMSMESSAGEHANDLER_H +#define CJAVAMMSMESSAGEHANDLER_H + +#include +#include +#include +#include +#include +#include +#include +#include "cmmsmessageinformation.h" + +namespace java +{ +namespace wma +{ + +const TInt KPriorityLow = 1; +const TInt KPriorityNormal = 2; +const TInt KPriorityHigh = 3; + +const TInt K2BitsMask = 2; +const TInt K4BitsMask = 4; +const TInt K8BitsMask = 8; +const TInt K16BitsMask = 16; +const TInt K24BitsMask = 24; +const TInt K32BitsMask = 32; +const TInt K40BitsMask = 40; +const TInt K48BitsMask = 48; +const TInt K56BitsMask = 56; +const TInt K64BitsMask = 64; + +class CJavaMMSMessageHandler:public CBase +{ +public: + //Destructor + virtual ~CJavaMMSMessageHandler(); + + static CJavaMMSMessageHandler* NewL(RFs aFs); + /** + * Deserializes a byte array containing a multimedia message to be sent + * into an internal representation of the multimedia message. + * + * @param aMMS A Buffer containing the multimedia message in a byte + * array representation + * @return The internal representation of the multimedia message to be + * sent + */ + CMMSMessageInformation& DeSerializeL(CBufFlat& aMMS); + /** + * Serializes an internal representation of the multimedia message into + * a byte array representation. + * + * @param aMMS A Buffer containing the multimedia message in the + * internal representation + * @return The byte array representation of the multimedia message + */ + CBufFlat& SerializeLC(CMMSMessageInformation& aMMS); + +private: + //Constructor + CJavaMMSMessageHandler(RFs aRFs); + /** + * Returns the rest of dividing aNum1 with aNum2. + * + * @param aNum1 The number to divide + * @param aNum2 The number to be divided with + * @return The rest of dividing aNum1 with aNum2 + */ + int Divide(int aNum1, int aNum2); + /** + * Reads an integer as 4 bytes from the read stream. + * + * @param aStream The stream containing a byte array + * @return An integer read as 4 bytes + */ + TInt32 ReadIntL(RBufReadStream& aStream); + /** + * Reads an integer as 8 bytes from the read stream. + * + * @param aStream The stream containing a byte array + * @return An integer read as 8 bytes + */ + TInt64 ReadInt64L(RBufReadStream& aStream); + /** + * Resolves the map of the multimedia message. The map of the multimedia + * message consists of a byte whose bits indicate which of the + * multimedia message headers are present. See implementation comments + * for more details. + * + * @param aStream The stream containing the multimedia message + * @param aHeaderLengths The lengths of the multimedia message + * headers + */ + void ResolveMapL(RBufReadStream& aStream, TInt32 aHeaderLengths[]); + /** + * Resolves/reads the headers of the multimedia message from the stream + * and sets them to the internal representation of the multimedia + * message + * + * @param aStream The stream containing the multimedia message + * @param aHeaderLengths The lengths of the multimedia message + * headers + * @return The internal representation of the multimedia message with + * the headers being set + */ + CMMSMessageInformation& ResolveHeadersLC(RBufReadStream& aStream, + TInt32 aHeaderLengths[]); + /** + * Splits the concatenated addresses (";" separated string/descriptor) + * into sepparate tokens and sets them individually to the internal + * representation of the multimedia message. + * + * @param aAddressType The address type. Possible values are: + * EMsvRecipientTo, EMsvRecipient and BccEMsvRecipientCc + * @param aMsg The internal representation of the multimedia + * message where the sepparate addresses will be set to + */ + void ParseAndSetAddressL(TMsvRecipientTypeValues aAddressType, + TDes8& aAddr, CMMSMessageInformation& aMsg); + /** + * Save data to the D-drive. MMS engine assume that attachments are + * always files. It also help us to use less RAM. + * + * @param aDataArray + * @return TDesC* FileName + */ + void SaveDataToFileL(const TDesC8& aDataArray, TDesC8*& aFileName, + const TDesC8& aDataType); + + /** + * Concatenates all the addresses/recipients into a ";" separated + * string/descriptor. + * + * @param aAddressType The address type. Possible values are: + * EMsvRecipientTo, EMsvRecipient and BccEMsvRecipientCc + * @param aMMS The internal representation of the multimedia + * message containing the addresses + */ + HBufC8& BuildAddressLC(TMsvRecipientTypeValues aAddressType, + CMMSMessageInformation& aMMS); + + /** + * Calculates the mms map. See the implementation for more details + * about the mms map. + * + * @param aReplyToAppID The sender's application identifier + * @param aAppID The application identifier + * @param aSubject The subject + * @param aFrom The 'from' address + * @param aTo The 'to' address + * @param aBcc The 'bcc' address + * @param aCc The 'cc' address + * @return The mms map + */ + TInt CalculateMap(TDesC8& aReplyToAppID, TDesC8& aAppID, TDesC8& aSubject, + TDesC8& aFrom, HBufC8& aTo, HBufC8& aBcc, HBufC8& aCc); + + /** + * Writes an integer as 8 bytes into the write stream. + * + * @param aStream The stream where the integer will be written to + * @param aInteger The integer to be written + */ + void WriteInt64L(RBufWriteStream& aStream, const TInt64 aInteger); + + /** + * Writes an integer as 4 bytes into the write stream. + * + * @param aStream The stream where the integer will be written to + * @param aInteger The integer to be written + */ + void WriteIntL(RBufWriteStream& aStream, const TInt32 aInteger); + + /** + * Writes the lengths of all attachments into the write stream. + * + * @param aStream The stream where the attachment lengths will be + * written to + * @param aMMS The internal representation of the multimedia + * message containing all the attachments to be written + * @param aConv The symbian's character converter used for translating + * the encoding from the MIBEnum into the text representation + * @return The index (within the aMMS) of the first attachment + * (if such an attachment has been set to be the first one), or -1 if + * none of the attachments has been set to be the first one + */ + TInt WriteAttachmentsLengthsL(RBufWriteStream& aStream, + CMMSMessageInformation& aMMS, CCnvCharacterSetConverter& aConv); + + /** + * Writes the lengths of an attachment into the write stream. + * + * @param aStream The stream where the attachment lengths will be + * written to + * @param aAttch The attachment whose lengths are to be written + * @param aConv The symbian's character converter used for translating + * the encoding from the MIBEnum into the text representation + */ + void WriteAttachmentLengthsL(RBufWriteStream& aStream, + CMMSMessageAttachment& aAttch, CCnvCharacterSetConverter& aConv); + + /** + * Writes all the attachments into the write stream. + * + * @param aStream The stream where the attachments will be written to + * @param aMMS The internal representation of the multimedia + * message containing all the attachments to be written + * @param aConv The symbian's character converter used for translating + * the encoding from the MIBEnum into the text representation + * @param aFirstAttchmt The index of the first attachment to be written + * or -1 if the attachments could be written in an arbitrary order + */ + void WriteAttachmentsL(RBufWriteStream& aStream, + CMMSMessageInformation& aMMS, CCnvCharacterSetConverter& aConv, + TInt aFirstAttchmt); + + /** + * Writes an attachment into the write stream. + * + * @param aStream The stream where the attachment will be written to + * @param aAttch The attachment which will be written + * @param aConv The symbian's character converter used for translating + * the encoding from the MIBEnum into the text representation + */ + void WriteAttachmentL(RBufWriteStream& aStream, + CMMSMessageAttachment& aAttch, CCnvCharacterSetConverter& aConv); + + /** + * Writes a descriptor (if not NULL) into the write stream. + * + * @param aStream The stream where the descriptor will be written to + * @param aDes The descriptor which will be written + */ + void WriteDes8L(RBufWriteStream& aStream, const TDesC8& aDes); + + /** + * Writes a descriptor's length (if the descriptor is not NULL) + * + * @param aStream The stream where the descriptor's length will be + * written to + * @param aDes The descriptor whose length will be written + */ + void WriteDes8LengthL(RBufWriteStream& aStream, const TDesC8& aDes); + + /** + * Writes a descriptor's length (if the descriptor is not NULL) or zero + * (if the descriptor is NULL) + * + * @param aStream The stream where the descriptor's length will be + * written to + * @param aDes The descriptor whose length will be written + */ + void WriteDes8LengthOrZeroL(RBufWriteStream& aStream, const TDesC8& aDes); + + /** + * Writes a descriptor's length (if the descriptor is not NULL) or zero + * (if the descriptor is NULL) + * + * @param aStream The stream where the descriptor's length will be + * written to + * @param aDes The descriptor whose length will be written + */ + void WriteDesLengthOrZeroL(RBufWriteStream& aStream, const TDesC8& aDes); + +private: + + // handle to file server + RFs mRFs; +}; +} //namespace wma +} //namespace java +#endif // CJAVAMMSMESSAGEHANDLER_H