FreeRDP
Loading...
Searching...
No Matches
libfreerdp/core/client.h
1
20#ifndef FREERDP_LIB_CORE_CLIENT_H
21#define FREERDP_LIB_CORE_CLIENT_H
22
23#include <freerdp/config.h>
24
25#include <winpr/crt.h>
26#include <winpr/stream.h>
27#include <winpr/wtsapi.h>
28
29#include <freerdp/freerdp.h>
30#include <freerdp/constants.h>
31
32#include <freerdp/svc.h>
33#include <freerdp/peer.h>
34#include <freerdp/addin.h>
35#include <freerdp/api.h>
36
37#include <freerdp/client/channels.h>
38#include <freerdp/client/drdynvc.h>
39#include <freerdp/channels/channels.h>
40
41#ifndef CHANNEL_MAX_COUNT
42#define CHANNEL_MAX_COUNT 30
43#endif
44
45typedef struct
46{
47 WINPR_ATTR_NODISCARD PVIRTUALCHANNELENTRY entry;
48 WINPR_ATTR_NODISCARD PVIRTUALCHANNELENTRYEX entryEx;
49 PCHANNEL_INIT_EVENT_FN pChannelInitEventProc;
50 PCHANNEL_INIT_EVENT_EX_FN pChannelInitEventProcEx;
51 void* pInitHandle;
52 void* lpUserParam;
54
55typedef struct
56{
58 ULONG options;
59 int flags;
60 void* pInterface;
61 rdpChannels* channels;
62 void* lpUserParam;
63 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc;
64 PCHANNEL_OPEN_EVENT_EX_FN pChannelOpenEventProcEx;
65#if defined(WITH_RDPEUDP)
66 /* The dynamic channel the data is sent on instead, see freerdp_channels_set_static_bridge.
67 * Set under channels->channelsLock. */
68 struct rdp_channel_bridge* bridge;
69#endif
71
72typedef struct
73{
74 void* Data;
75 UINT32 DataLength;
76 void* UserData;
77 CHANNEL_OPEN_DATA* pChannelOpenData;
79
86typedef struct
87{
88 rdpChannels* channels;
89 void* pInterface;
91
93{
94 int clientDataCount;
95 CHANNEL_CLIENT_DATA clientDataList[CHANNEL_MAX_COUNT];
96
97 int openDataCount;
98 CHANNEL_OPEN_DATA openDataList[CHANNEL_MAX_COUNT];
99
100 int initDataCount;
101 CHANNEL_INIT_DATA initDataList[CHANNEL_MAX_COUNT];
102
103 /* control for entry into MyVirtualChannelInit */
104 int can_call_init;
105
106 /* true once freerdp_channels_post_connect is called */
107 BOOL connected;
108
109 /* used for locating the channels for a given instance */
110 freerdp* instance;
111
112 wMessageQueue* queue;
113
114 DrdynvcClientContext* drdynvc;
115 CRITICAL_SECTION channelsLock;
116
117 wHashTable* channelEvents;
118};
119
120FREERDP_LOCAL void freerdp_channels_free(rdpChannels* channels);
121
122WINPR_ATTR_MALLOC(freerdp_channels_free, 1)
123FREERDP_LOCAL rdpChannels* freerdp_channels_new(freerdp* instance);
124
125FREERDP_LOCAL UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance);
126
127FREERDP_LOCAL void freerdp_channels_close(rdpChannels* channels, freerdp* instance);
128
129FREERDP_LOCAL void freerdp_channels_register_instance(rdpChannels* channels, freerdp* instance);
130
131WINPR_ATTR_NODISCARD
132FREERDP_LOCAL UINT freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance);
133
134WINPR_ATTR_NODISCARD
135FREERDP_LOCAL UINT freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance);
136
138WINPR_ATTR_NODISCARD
139FREERDP_LOCAL SSIZE_T freerdp_client_channel_get_registered_event_handles(rdpChannels* channels,
140 HANDLE* events,
141 DWORD count);
142
143#endif /* FREERDP_LIB_CORE_CLIENT_H */