--- /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