/* * File: connectionmanager.h * Author: savop * * Created on 21. August 2009, 18:35 */ #ifndef _CONNECTIONMANAGER_H #define _CONNECTIONMANAGER_H #include "upnpservice.h" /** * Connection status * * The connection status of a certain virtual connection */ enum eConnectionStatus { OK, CONTENT_FORMAT_MISMATCH, INSUFFICIENT_BANDWIDTH, UNRELIABLE_CHANNEL, UNKNOWN }; /** * Direction * * The direction of a virtual connection. Input means client to server, Output * server to client */ enum eDirection { OUTPUT, INPUT }; /** * Virtual connection * * A virtual connection managed by the connection manager service */ class cVirtualConnection : public cListObject { friend class cConnectionManager; private: cString mRemoteProtocolInfo; cString mRemoteConnectionManager; eDirection mDirection; int mRemoteConnectionID; int mConnectionID; int mAVTransportID; const int mRcsID; eConnectionStatus mStatus; cVirtualConnection(); static const char* getStatusString(eConnectionStatus Status); static const char* getDirectionString(eDirection Direction); static int getDirection(const char* Direction); static int getConnectionStatus(const char* ConnectionStatus); }; /** * The connection manager service * * This is the connection manager service which handles all incoming connection, * creates and destroys connections to clients. */ class cConnectionManager : public cUpnpService { public: /** * Constructor of a Connection manager * * This creates an instance of a Connection Manager Service and provides * interfaces for executing actions and subscribing on events. */ cConnectionManager( UpnpDevice_Handle DeviceHandle ///< the UPnP device handle of this root device ); virtual ~cConnectionManager(); /*! @copydoc cUpnpService::subscribe(Upnp_Subscription_Request* Request) */ virtual int subscribe(Upnp_Subscription_Request* Request); /*! @copydoc cUpnpService::execute(Upnp_Action_Request* Request) */ virtual int execute(Upnp_Action_Request* Request); /*! @copydoc cUpnpService::setError(Upnp_Action_Request* Request, int Error) */ virtual void setError(Upnp_Action_Request* Request, int Error); private: int getProtocolInfo(Upnp_Action_Request* Request); int getCurrentConnectionIDs(Upnp_Action_Request* Request); int getCurrentConnectionInfo(Upnp_Action_Request* Request); int prepareForConnection(Upnp_Action_Request* Request); int connectionComplete(Upnp_Action_Request* Request); cVirtualConnection* createVirtualConnection(const char* RemoteProtocolInfo = NULL, const char* RemoteConnectionManager = NULL, int RemoteConnectionID = -1, eDirection Direction = OUTPUT); bool destroyVirtualConnection(int ConnectionID); const char* getConnectionIDsCVS(); cVirtualConnection* mDefaultConnection; cList* mVirtualConnections; cString mSupportedProtocols; }; #endif /* _CONNECTIONMANAGER_H */