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 <winpr/crt.h>
24#include <winpr/stream.h>
25#include <winpr/wtsapi.h>
26
27#include <freerdp/freerdp.h>
28#include <freerdp/constants.h>
29
30#include <freerdp/svc.h>
31#include <freerdp/peer.h>
32#include <freerdp/addin.h>
33#include <freerdp/api.h>
34
35#include <freerdp/client/channels.h>
36#include <freerdp/client/drdynvc.h>
37#include <freerdp/channels/channels.h>
38
39#ifndef CHANNEL_MAX_COUNT
40#define CHANNEL_MAX_COUNT 30
41#endif
42
43typedef struct
44{
45 WINPR_ATTR_NODISCARD PVIRTUALCHANNELENTRY entry;
46 WINPR_ATTR_NODISCARD PVIRTUALCHANNELENTRYEX entryEx;
47 PCHANNEL_INIT_EVENT_FN pChannelInitEventProc;
48 PCHANNEL_INIT_EVENT_EX_FN pChannelInitEventProcEx;
49 void* pInitHandle;
50 void* lpUserParam;
52
53typedef struct
54{
56 ULONG options;
57 int flags;
58 void* pInterface;
59 rdpChannels* channels;
60 void* lpUserParam;
61 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc;
62 PCHANNEL_OPEN_EVENT_EX_FN pChannelOpenEventProcEx;
64
65typedef struct
66{
67 void* Data;
68 UINT32 DataLength;
69 void* UserData;
70 CHANNEL_OPEN_DATA* pChannelOpenData;
72
79typedef struct
80{
81 rdpChannels* channels;
82 void* pInterface;
84
86{
87 int clientDataCount;
88 CHANNEL_CLIENT_DATA clientDataList[CHANNEL_MAX_COUNT];
89
90 int openDataCount;
91 CHANNEL_OPEN_DATA openDataList[CHANNEL_MAX_COUNT];
92
93 int initDataCount;
94 CHANNEL_INIT_DATA initDataList[CHANNEL_MAX_COUNT];
95
96 /* control for entry into MyVirtualChannelInit */
97 int can_call_init;
98
99 /* true once freerdp_channels_post_connect is called */
100 BOOL connected;
101
102 /* used for locating the channels for a given instance */
103 freerdp* instance;
104
105 wMessageQueue* queue;
106
107 DrdynvcClientContext* drdynvc;
108 CRITICAL_SECTION channelsLock;
109
110 wHashTable* channelEvents;
111};
112
113FREERDP_LOCAL void freerdp_channels_free(rdpChannels* channels);
114
115WINPR_ATTR_MALLOC(freerdp_channels_free, 1)
116FREERDP_LOCAL rdpChannels* freerdp_channels_new(freerdp* instance);
117
118FREERDP_LOCAL UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance);
119
120FREERDP_LOCAL void freerdp_channels_close(rdpChannels* channels, freerdp* instance);
121
122FREERDP_LOCAL void freerdp_channels_register_instance(rdpChannels* channels, freerdp* instance);
123
124WINPR_ATTR_NODISCARD
125FREERDP_LOCAL UINT freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance);
126
127WINPR_ATTR_NODISCARD
128FREERDP_LOCAL UINT freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance);
129
131WINPR_ATTR_NODISCARD
132FREERDP_LOCAL SSIZE_T freerdp_client_channel_get_registered_event_handles(rdpChannels* channels,
133 HANDLE* events,
134 DWORD count);
135
136#endif /* FREERDP_LIB_CORE_CLIENT_H */