javaextensions/wma/mms/src.s60/cjavammsmessagehandler.h
branchRCL_3
changeset 19 04becd199f91
--- /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