20#ifndef FREERDP_LIB_CORE_CLIENT_H
21#define FREERDP_LIB_CORE_CLIENT_H
23#include <freerdp/config.h>
26#include <winpr/stream.h>
27#include <winpr/wtsapi.h>
29#include <freerdp/freerdp.h>
30#include <freerdp/constants.h>
32#include <freerdp/svc.h>
33#include <freerdp/peer.h>
34#include <freerdp/addin.h>
35#include <freerdp/api.h>
37#include <freerdp/client/channels.h>
38#include <freerdp/client/drdynvc.h>
39#include <freerdp/channels/channels.h>
41#ifndef CHANNEL_MAX_COUNT
42#define CHANNEL_MAX_COUNT 30
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;
61 rdpChannels* channels;
63 PCHANNEL_OPEN_EVENT_FN pChannelOpenEventProc;
64 PCHANNEL_OPEN_EVENT_EX_FN pChannelOpenEventProcEx;
65#if defined(WITH_RDPEUDP)
68 struct rdp_channel_bridge* bridge;
88 rdpChannels* channels;
112 wMessageQueue* queue;
114 DrdynvcClientContext* drdynvc;
117 wHashTable* channelEvents;
120FREERDP_LOCAL
void freerdp_channels_free(rdpChannels* channels);
122WINPR_ATTR_MALLOC(freerdp_channels_free, 1)
123FREERDP_LOCAL rdpChannels* freerdp_channels_new(freerdp* instance);
125FREERDP_LOCAL UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance);
127FREERDP_LOCAL
void freerdp_channels_close(rdpChannels* channels, freerdp* instance);
129FREERDP_LOCAL
void freerdp_channels_register_instance(rdpChannels* channels, freerdp* instance);
132FREERDP_LOCAL UINT freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance);
135FREERDP_LOCAL UINT freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance);
139FREERDP_LOCAL SSIZE_T freerdp_client_channel_get_registered_event_handles(rdpChannels* channels,