diff -r f5050f1da672 -r 04becd199f91 javacommons/gcfbase/inc/serverconnectionfactorybase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/gcfbase/inc/serverconnectionfactorybase.h Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,234 @@ +/* +* Copyright (c) 2009 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 SERVERCONNECTIONFACTORYBASE_H +#define SERVERCONNECTIONFACTORYBASE_H + +#include +#include "serverconnectionfactory.h" +#include "serverconnection.h" +#include "scopedlocks.h" + +namespace java +{ +namespace push +{ + +class PendingConnectionListener; + +/** + * This class is internal helper class of ServerConnectionFactoryBase class. + * This class contains data of one ServerConnection object. + */ +class SrvConnContainerData +{ +public: + + enum ServerConnectionType_t + { + PUSH, //Push server connection which is listen by Push Controller + NORMAL, //non-push server connection + PUSH_LISTEN_BY_MIDLET //Push server connection listen by MIDlet. + }; + + /** + * @param aConn This class does not take ownership of this argument. + */ + SrvConnContainerData(ServerConnection* aConn,PendingConnectionListener* aListener, + bool aIsActive,ServerConnectionType_t aType) + :mSrvConn(aConn),mPendingConnListener(aListener),mIsActive(aIsActive),mConnType(aType) + { + } + + virtual ~SrvConnContainerData() + { + } + + ServerConnection* getConn() const + { + return mSrvConn; + } + + void setPendingConnListener(PendingConnectionListener* aListener) + { + mPendingConnListener = aListener; + } + + PendingConnectionListener* getPendingConnListener() const + { + return mPendingConnListener; + } + + void setActive(bool aIsActive) + { + mIsActive = aIsActive; + } + bool isActive() const + { + return mIsActive; + } + + void setConnType(ServerConnectionType_t aConnType) + { + mConnType = aConnType; + } + ServerConnectionType_t connType() const + { + return mConnType; + } + + SrvConnContainerData(const SrvConnContainerData &x) + { + *this = x; + } + + SrvConnContainerData &operator=(const SrvConnContainerData &x) + { + mSrvConn = x.mSrvConn; + mPendingConnListener = x.mPendingConnListener; + mIsActive = x.mIsActive; + mConnType = x.mConnType; + return *this; + } + +private: + + //Datamembers. + //This class does not take ownership of this datamember. + ServerConnection* mSrvConn; + PendingConnectionListener* mPendingConnListener; + //Indicates whether incoming message has arrived to the connection. + bool mIsActive; + ServerConnectionType_t mConnType; +}; + +/** + * This class has "default" implementation of ServerConnectionFactory interface. + * Probably this implementation is enough for most of protocols. I.e. it is recommened + * to use this implementation if protocol does not have special reguirements for + * implementation of ServerConnectionFactory. + */ +class ServerConnectionFactoryBase : public ServerConnectionFactory +{ + +public: + + OS_IMPORT ServerConnectionFactoryBase(); + + OS_IMPORT virtual ~ServerConnectionFactoryBase(); + + //Methods of ServerConnectionFactory interface. + /** + * See comments from ServerConnectionFactory::createPushServerConn() operation. + */ + OS_IMPORT virtual ServerConnection& createPushServerConn(const std::wstring& aUri, + const std::wstring& aFilter, + ConnectionListener* aListener, + PendingConnectionListener* aPendingConnListener); + + /** + * This operation creates ServerConnection if it is not already created. + * @exception throws RuntimeException if type of the existing ServerConnection + * object is PUSH_LISTEN_BY_MIDLET || PUSH and isMultipleSrvConnAllowed() + * operation returns 'false'. + */ + OS_IMPORT virtual ServerConnection* create(const std::wstring& aUri); + + /** + * Returns all connections which connection type is PUSH_LISTEN_BY_MIDLET || PUSH. + */ + OS_IMPORT virtual void getPushConnections(bool aAvailable,std::list& aUriList); + + /** + * See comments ServerConnectionFactory::closeAllConnections() operation. + */ + OS_IMPORT virtual void closeAllConnections(); + + /** + * See comments ServerConnectionFactory::deletePushConnection() operation. + */ + OS_IMPORT virtual void deletePushConnection(const std::wstring& aUri); + + /** + * See comments ServerConnectionFactory::getPushConnection() operation. + */ + OS_IMPORT virtual ServerConnection* getPushConnection(const std::wstring& aUri); + + /** + * See comments ServerConnectionFactory::releaseConnection() operation. + */ + OS_IMPORT virtual void releaseConnection(const std::wstring& aUri); + + /** + * Implementation class of the ServerConnection interface must update status whether + * ServerConnection object has pending message(= message arrived but not yet read). + * This information is needed for PushRegistry.listConnections() operation. MIDlet can + * retrieve by this operation active but not handled connections. + * @param aUri URI of the connection. + * @param aPendingMsg Updating logic of pending message flag: + * - Set it 'true' when message arrives to the connection. + * - Set it 'false' when ServerConnection::open() operation has been called. + */ + OS_IMPORT void setPendingMsgFlag(const std::wstring& aUri,bool aPendingMsg); + + /** + * This operation creates protocol specific ServerConnection object. Validation of + * arguments must be done com.nokia.mj.impl.gcf.PushValidator java framework. + * Note: This operation does not open push connection. + * @param aUri ServerConnection URI. + * @param aFilter Connection URL indicating which senders are allowed to cause + * the MIDlet to be launched. + * Value of this argument is empty string in the normal server connection case. + * Note: START_APP_IN_LISTEN_MODE mode is used in the creation of normal server connection. + * @throws PushException with following error codes: + * COMMON_SRV_CONN_PLUGIN_ERROR: + * reserved for other errors in the creation of ServerConnection object. + */ + virtual ServerConnection* createSrvConnObj(const std::wstring& aUri, + const std::wstring& aFilter) = 0; + + /** + * This method indicates whether multiple Connector.open() operation call is allowed + * for a connection. Normally this is not allowed but e.g. for some new protocol it might + * be allowed. + */ + virtual bool isMultipleSrvConnAllowed() = 0; + +protected: + + typedef std::map SrvConnContainer_t; + typedef std::map::iterator SrvConnContainerIter_t; + + //Datamembers. + SrvConnContainer_t mServerConnections; + java::util::ScopedMutex mMutex; + +private: + + //Internal operations. + bool deletePushConnection(SrvConnContainerIter_t& aIter); + + //Not implemented. + ServerConnectionFactoryBase(const ServerConnectionFactoryBase &x); + ServerConnectionFactoryBase &operator=(const ServerConnectionFactoryBase &x); + +}; + +}//end namespace push +}//end namespace java + +#endif // SERVERCONNECTIONFACTORYBASE_H