diff -r e8e63152f320 -r 2a9601315dfc javaextensions/wma/mms/pushplugin/src.s60/s60mmsserverconnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/wma/mms/pushplugin/src.s60/s60mmsserverconnection.h Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,201 @@ +/* +* 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: + * +*/ + +#ifndef S60MMSSERVERCONNECTION_H +#define S60MMSSERVERCONNECTION_H + +#include +#include + +#include "monitor.h" +#include "mmsserverconnection.h" + +using namespace java::push; + +namespace java +{ +namespace wma +{ +/** + * MmsServerConnection implement ServerConnectionBase. + * It is responsible to start the midlet when the message arrive in the device + * for a registered midlet when the midlet is not running.It is also + * responsible to receive message when the midlet is running + * @lib mmsserverconnection.dll + * @ + */ +class S60MmsServerConnection: public CActive, + public MmsServerConnection, + public MMsvSessionObserver, + public MMsvEntryObserver +{ + +public: + //Constructor + OS_IMPORT S60MmsServerConnection(const std::wstring& aUri, + const std::wstring& aFilter); + OS_IMPORT virtual ~S60MmsServerConnection(); + /** + * from ServerConnection + * Opens the connection. It registers the push URI to the mms engine for + * any incoming mms message on this AppId. + * Throws COMMON_SRV_CONN_PLUGIN_ERROR exception if there is an error while + * registering the connection. + * @param aListener: Listener to be notified when message arrives. + * + * @return + */ + OS_IMPORT virtual void open(ConnectionListener* aListener); + /** + *from ServerConnection + * Closes the connection + * @return + */ + OS_IMPORT virtual void close(); + /** + * from ServerConnection + * Return the push register URI + * @return std::wstring + */ + OS_IMPORT virtual std::wstring getUri() const; + /** + * from ServerConnection + * sets the filter string + * @ aFilter - filter string + */ + OS_IMPORT virtual void setFilter(const std::wstring& aFilter); + /** + * from ServerConnection + * Return the filter string + * @return std::wstring the filter string + */ + OS_IMPORT virtual std::wstring getFilter() const; + /** + * SetOpen() + * It is used to Distinguish whether Open is called from Midlet context + * or Push Controller .This function is called first when the server + * connection is called from MIDlet context. + * @return + */ + OS_IMPORT void setOpen(); +private: + //Constructor + S60MmsServerConnection(); + void InitializeL(); + void MmsRequestCompleted(); + + /** + * Check that if the received MMS is valid message + * If the message is valid Push launch the midlet. + * @param aMsvId: Id of the received message + * + * @return . + */ + void CheckForValidMessageAndPushL(TMsvId aMsgId); + /** + * Check that if the received MMS is ready to read + * + * @param aMsvId: Id of the received message + * + * @return positive TInt if the message is ready to read otherwise zero. + */ + TBool IsMmsReadyToReadL(TMsvId aMsvId); + /** + * + * thread function. + * @ + * @param : + * + * @return + */ + static int listenThread(S60MmsServerConnection* aServerConnection); + /** + * HandleSessionEventL from MMsvSessionObserver + * We are not handling any thing in this method. + * @ + * @param aEvent: + * @param aArg1: + * @param aArg2: + * @param aArg3: + * + * @return + */ + void HandleSessionEventL(TMsvSessionEvent aEvent,TAny* aArg1, + TAny* aArg2, + TAny* aArg3); + /** + * 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); +private: // from CActive + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + +protected: + enum TOperation + { + EReceivingMessageForNotify, + EReceivingMessageForListen, + ENotifyingReadMessageSucceeded, + ENotifyingClose, + }; + + int mError; + //thread id + RThread mThread; + // Uri of the push connection + std::wstring mUri; + // the ongoing operation which is executed by the server connection object. + TOperation mState; + // Apllication id + std::wstring mAppId; + //defines the acceptable remote host. + std::wstring mFilter; + CMsvSession* mSession; + // Application ID + HBufC* mApplicationId; + // flag to indicate connection is active or not, useful during close. + bool mActiveConnection; + // To synchronize threads + pthread_mutex_t mMutex; + pthread_cond_t mCondVar; + CMsvEntry* mClientEntry; + // flag to indicate listening by push or application + bool mIsAppLaunched; + //listener to be notified for incoming messages + ConnectionListener* mListener; + // handle to monitor object + java::util::Monitor* mOpenMonitor; + // reference to application adapter + CMmsApplicationAdapter* mMmsApplicationAdapter; +}; + +}//end of namespace wma +}//end of namespace java + +#endif // S60MMSSERVERCONNECTION_H