javaextensions/wma/mms/src.s60/cmmsplatformservices60impl.h
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/wma/mms/src.s60/cmmsplatformservices60impl.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,499 @@
+/*
+* 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 CMMSPLATFORMSERVICES60IMPL_H
+#define CMMSPLATFORMSERVICES60IMPL_H
+
+// INCLUDE FILES
+#include <msvids.h>
+#include <mtclreg.h>
+#include <mmsclient.h>
+#include <mmsapplicationadapter.h>
+
+#include "monitor.h"
+#include "functionserver.h"
+#include "cmmsmessageinformation.h"
+#include "cjavammsmessagehandler.h"
+#include "mmsplatformservice.h"
+
+using namespace java::push;
+using namespace java::util;
+_LIT8(KSlash, "/");
+
+const TInt KArrayGranularity = 2;
+const TInt KSlashLength = 1;
+
+// CLASS DECLARATION
+/**
+ *   to create and send the MMS messages
+ *
+ *
+ *
+ */
+namespace java
+{
+namespace wma
+{
+
+class CMMSPlatformServiceS60Impl: public CActive,
+        public MMSPlatformService,
+        public FunctionServer,
+        public MMsvSessionObserver,
+        public MMsvEntryObserver
+{
+public:
+
+    /**
+     * Destructor.
+     */
+    virtual ~CMMSPlatformServiceS60Impl();
+
+    static CMMSPlatformServiceS60Impl* New(JNIEnv& aJni, jobject aPeer,
+                                           const bool aServerConnection,
+                                           const std::wstring& aUri,
+                                           ConnectionListener* aListener);
+    /**
+     * Sends a multimedia message to its recipients.
+     * @param aJni JNI environment
+     * @param jbyteArray message byte array
+     * @param aOffset
+     * @param aLength message length
+     * @param aDestination destination address
+     * @return int status of the send functionality.
+     */
+    int send(JNIEnv& aJni, jbyteArray aJavaBuffer, int aOffset, int aLength,
+             jstring aDestination);
+
+    /**
+     * Retrieves the first message from the queue.
+     * @param aJni JNI environment
+     * @return A byte array containing the first multimedia message received
+     */
+    jbyteArray retrieveMessage(JNIEnv& aJni);
+    /**
+     * closes the connection
+     */
+    void closeConnection(JNIEnv& aJni, jobject aPeer);
+
+    int getNumberOfMessages();
+
+    int getError();
+
+private:
+    /**
+     * C++ default constructor.
+     * @param aServerConnection for handling server connection
+     * @param aServerApplicationId to register for incoming messages
+     * @return
+     */
+    CMMSPlatformServiceS60Impl(const bool aServerConnection,
+                               HBufC* aServerApplicationId, ConnectionListener* aListener);
+    // From FunctionServer
+    virtual void vmAttached();
+
+    //From FunctionServer
+    virtual void doServerSideInit();
+    /**
+     * Notifies java side send about the status of sending mms message
+     * @param aJni - Jni interface pointer
+     * @param aPeer - Jni object reference
+     * @param aError - status of send functionality
+     */
+    void NotifySend(JNIEnv& aJni, jobject aPeer, int aError);
+    /**
+     * Send the Message
+     * @param aMidMessageInformation contain the message information and
+     *        attachments
+     * @return
+     */
+
+    void SendMultiPartMessageL();
+
+    /**
+     * From MMsvSessionObserver
+     * @param aEvent: Event type
+     * @param aArg1: contain different values for different aEvent
+     * @param aArg2: contain different values for different aEvent
+     * @param aArg3: contain different values for different aEvent
+     * @return
+     */
+    void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2,
+                             TAny* aArg3);
+
+    /**
+     * Clears the message send array. If there is some message that is not
+     *  send yet.Delete it and do not send the messages.
+     *
+     * @return
+     */
+    void ClearSendMessageArray();
+    /**
+     * ReceivedMessage
+     * get the received message
+     *
+     * @param aMessageId: Received message Id
+     *
+     * @return CMidMessageInformation: received message
+     */
+    CMMSMessageInformation* ReceivedMessage(TMsvId aMessageId);
+
+    /**
+     * NotifyReceivedMessageL
+     * Get the URL check for the register folder. If already register
+     * then check for the messages in the register folder. If there are messages
+     * in the folder then send notification to the connection for the messages.
+     *
+     *
+     * @return
+     */
+
+    void NotifyReceivedMessageL();
+
+    /**
+     * HandleEntryEventL
+     * From MMsvEntryObserver
+     *
+     * @param aEvent: TMsv entry event
+     * @param aArg1:
+     * @param aArg2:
+     * @param aArg3:
+     *
+     * @return
+     */
+    void HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* aArg2,
+                           TAny* aArg3);
+
+    /**
+     * ScanRegisterFolderAndNotifyL
+     * Scan the register folder and Notify the listener.
+     *
+     *
+     * @return
+     */
+    void ScanRegisterFolderAndNotifyL();
+
+    /**
+     * create MMS messsage in draft folder.
+     *
+     *
+     * @return TMsvId: Id of the newly created message.
+     */
+    TMsvId CreateMessageL();
+
+    /**
+     * Load the message by TMsvId
+     *
+     * @param aMessageEntry:
+     *
+     * @return
+     */
+    void LoadMessageL(TMsvId aMessageEntry);
+
+    /**
+     * Set the subject of newly created MMS message.
+     *
+     * @param aSubject:
+     *
+     * @return
+     */
+    void SetSubjectL(const TDesC& aSubject);
+
+    /**
+     * add receipient addresses by type to the newly created message.
+     *
+     * @param aAddress:
+     * @param aAddressType:
+     *
+     * @return
+     */
+    void AddRecipientL(const TDesC& aAddress, TMmsRecipients aAddressType);
+
+    /**
+     * add attachment by name to the newly created MMS message.
+     *
+     * @param aFileName:
+     * @param aMimeType:
+     *
+     * @return
+     */
+    void AddAttchmentL(TDesC& aFileName, TDesC8& aMimeType);
+
+    /**
+     * Set application-id in the newly created message.
+     *
+     * @param aApplicationId:
+     *
+     * @return
+     */
+    void SetApplicationIdL(const TDesC& aApplicationId);
+
+    /**
+     * Set reply-to -application-id in the newly created message.
+     *
+     * @param aReplyToApplicationId:
+     *
+     * @return
+     */
+    void SetReplyToApplicationIdL(const TDesC& aReplyToApplicationId);
+
+    /**
+     * Set the date of the newly created message.
+     *
+     * @param aLong:
+     *
+     * @return
+     */
+    void SetMessageSendDate(TInt64& aLong);
+
+    /**
+     * Set the setting of the newly created message.
+     *
+     *
+     * @return
+     */
+    void SetMessageSettingL();
+
+    /**
+     * create and send the MMS messge from CMidMessageInformation
+     *
+     * @param aMidMessageInformation:
+     *
+     * @return
+     */
+    // send MMS message from send array
+    void SendMmsMessageL(CMMSMessageInformation* aMessageInformation);
+
+    /**
+     * Read the message Setting of received message.
+     *
+     *
+     * @return
+     */
+    void ReadSettingL();
+
+    /**
+     * Delete the message by TMsvId
+     *
+     * @param aMsvId:
+     *
+     * @return
+     */
+    void DeleteMmsMessageL(TMsvId aMsvId);
+
+    /**
+     * Read the newly received message. Client connection should not call
+     *  this method.It will panic if invoked on client connection
+     *
+     * @param aMsvId:
+     *
+     * @return
+     */
+    void ReceiveMessageL(TMsvId aMsvId);
+
+    /**
+     * Send the message from by TMsvId
+     *
+     * @param aSendMmsMsgId:
+     *
+     * @return
+     */
+    void SendMmsMessageL(TMsvId aSendMmsMsgId);
+
+    /**
+     * close the connection
+     *
+     *
+     * @return
+     */
+    void Close();
+    /**
+     * add attachment to newly created entry in the message store.
+     *
+     * @param aMidMessageInformation:
+     *
+     * @return
+     */
+    void AddAttachmentsL(CMMSMessageInformation* aMessageInformation);
+
+    /**
+     * During construction of this method create the send message array.
+     *
+     *
+     * @return
+     */
+    void CreateSendMessageArrayL();
+
+    /**
+     * Clear and Destroy the message send array. If there is some message
+     * that is not send yet. Delete it and do not send the messages.
+     *
+     *
+     * @return
+     */
+    void ClearAndDestroySendMessageArray();
+
+    /**
+     * Delete the message of given Id.
+     *
+     * @param aMsvId: Id of the messagethat should be deleted.
+     *
+     * @return
+     */
+    void DeleteSentMessageL(TMsvId aMsvId);
+
+    /**
+     * Received the message one by one.
+     *
+     * @param aMsvId: Id of the message that is received in the device.
+     *
+     * @return
+     */
+    void DoReceiveMessageL(TMsvId aMsvId);
+
+    /**
+     * ReadAttachmentsL
+     * Read the attachmnets and add it to aMidMessageInformation
+     *
+     * @param aMidMessageInformation:
+     *
+     * @return
+     */
+    void ReadAttachmentsL(CMMSMessageInformation& aMessageInformation);
+
+    /**
+     * Read data from the attached files
+     *
+     * @param aRFile: Handle of the file to read the data from
+     * @param aDataArray: Copy the data to the dataArray
+     *
+     * @return
+     */
+    void ReadDataFromAttachFileL(RFile& aRFile, TDesC8*& aDataArray);
+    /**
+     * Sends notifications towards java about the number of messages arrived.
+     *
+     * @param aDescription
+     * @param messages
+     */
+    void NotifyJava(const TDesC& aDescription, int aMessages);
+
+protected:
+
+    /**
+     * default Symbian 2nd phase constructor
+     * @return
+     */
+    void ConstructL();
+    void mmsRequestComplete(int result);
+    /**
+     * from CActive
+     *
+     *
+     * @return
+     */
+    void RunL();
+
+    /**
+     * from CActive
+     *
+     *
+     * @return
+     */
+    void DoCancel();
+
+    /**
+     * from CActive
+     *
+     * @param aError: error value
+     *
+     * @return TInt
+     */
+    TInt RunError(TInt aError);
+
+private:
+    // flag used to indicate that 'send' operation is ongoing
+    bool mIsSending;
+
+    //flag used to indicate Client/Server connection
+    bool mServerConnection;
+
+    int mError;
+    //number of new messages
+    int mNewMessages;
+
+    // handle to the file system
+    RFs mRFs;
+
+    RArray<TMsvId> mSendTMsvIdArray;
+
+    // array containing the IDs of the received MMS messages
+    RArray<TMsvId> mReceivedMMSIDs;
+
+    //message sent callback method id
+    jmethodID mSendCallBackMethodId;
+
+    // The delivery date
+    TTime mMessageDeliveryDate;
+
+    TMmsMessagePriority mMmsMessagePriority;
+
+    //Own the mServerApplicationId
+    HBufC* mServerApplicationId;
+
+    // buffer to be used when sending
+    CBufFlat* mSendBuf;
+
+    //Own the mSession
+    CMsvSession* mSession;
+
+    //Own the mMmsClient
+    CMmsClientMtm* mMmsClient;
+
+    //Own the mServerMmsMtm
+    CMmsClientMtm* mServerMmsMtm;
+
+    CMsvEntry* mRegisterCMsvEntry;
+
+    //listener to be notified for an incoming message
+    ConnectionListener* mMessageListener;
+
+    //Own the ClientMtmRegistry
+    CClientMtmRegistry* mClientMtmRegistry;
+
+    CJavaMMSMessageHandler* mMessageHandler;
+
+    //Own the mMmsApplicationAdapter
+    CMmsApplicationAdapter* mMmsApplicationAdapter;
+
+    //Own the mSendMsgArray
+    CArrayPtrSeg<CMMSMessageInformation>* mSendMsgArray;
+
+    // Own the mReceivedMsgArray
+    CArrayPtrSeg<CMMSMessageInformation>* mReceivedMsgArray;
+
+};
+
+inline int CMMSPlatformServiceS60Impl::getError()
+{
+    return mError;
+}
+///////////////////////////////////////////////////////////
+} //namespace wma
+} //namespace java
+#endif // CMMSPLATFORMSERVICES60IMPL_H
+// End of File