diff options
Diffstat (limited to 'inc/upnp/connectionmanager.h')
-rw-r--r-- | inc/upnp/connectionmanager.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/inc/upnp/connectionmanager.h b/inc/upnp/connectionmanager.h new file mode 100644 index 0000000..6ed2987 --- /dev/null +++ b/inc/upnp/connectionmanager.h @@ -0,0 +1,99 @@ +/* + * File: connectionmanager.h + * Author: savop + * + * Created on 21. August 2009, 18:35 + */ + +#ifndef _CONNECTIONMANAGER_H +#define _CONNECTIONMANAGER_H + +#include "service.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 <em>Connection Manager Service</em> 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<cVirtualConnection>* mVirtualConnections; + cString mSupportedProtocols; +}; + +#endif /* _CONNECTIONMANAGER_H */ + |