summaryrefslogtreecommitdiff
path: root/upnpcomponents/connectionmanager.h
blob: 202df5930f5774a0131127ae6a0d77c5d58303aa (plain)
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
/* 
 * File:   connectionmanager.h
 * Author: savop
 *
 * Created on 21. August 2009, 18:35
 */

#ifndef _CONNECTIONMANAGER_H
#define	_CONNECTIONMANAGER_H

#include "upnpservice.h"

enum eConnectionStatus {
    OK,
    CONTENT_FORMAT_MISMATCH,
    INSUFFICIENT_BANDWIDTH,
    UNRELIABLE_CHANNEL,
    UNKNOWN
};

enum eDirection {
    OUTPUT,
    INPUT
};

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);
};

class cConnectionManager : public cUpnpService {
public:
    cConnectionManager(UpnpDevice_Handle DeviceHandle);
    virtual ~cConnectionManager();
    virtual int execute(Upnp_Action_Request* Request);
    virtual int subscribe(Upnp_Subscription_Request* Request);
    bool setProtocolInfo(const char* ProtocolInfo);
private:
    virtual void setError(Upnp_Action_Request* Request, int Error);
    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 */