diff -r e8e63152f320 -r 2a9601315dfc javaextensions/wma/mms/src.s60/cmmsplatformservices60impl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/wma/mms/src.s60/cmmsplatformservices60impl.h Mon May 03 12:27:20 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 +#include +#include +#include + +#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 mSendTMsvIdArray; + + // array containing the IDs of the received MMS messages + RArray 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* mSendMsgArray; + + // Own the mReceivedMsgArray + CArrayPtrSeg* mReceivedMsgArray; + +}; + +inline int CMMSPlatformServiceS60Impl::getError() +{ + return mError; +} +/////////////////////////////////////////////////////////// +} //namespace wma +} //namespace java +#endif // CMMSPLATFORMSERVICES60IMPL_H +// End of File