--- /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 <jni.h>
+#include <string>
+#include <s32mem.h>
+#include <s32strm.h>
+#include <e32base.h>
+#include <e32const.h>
+#include <charconv.h>
+#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