1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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 */
|