22#ifndef FREERDP_SERVER_PROXY_PFCONTEXT_H
23#define FREERDP_SERVER_PROXY_PFCONTEXT_H
25#include <freerdp/api.h>
26#include <freerdp/types.h>
28#include <freerdp/freerdp.h>
29#include <freerdp/channels/wtsvc.h>
31#include <freerdp/server/proxy/proxy_config.h>
32#include <freerdp/server/proxy/proxy_types.h>
34#define PROXY_SESSION_ID_LENGTH 32
42 typedef struct proxy_module proxyModule;
45 typedef struct s_InterceptContextMapEntry
47 void (*free)(
struct s_InterceptContextMapEntry*);
52 FREERDP_API
void intercept_context_entry_free(
void* obj);
54 typedef PfChannelResult (*proxyChannelDataFn)(proxyData* pdata,
55 const pServerStaticChannelContext* channel,
56 const BYTE* xdata,
size_t xsize, UINT32 flags,
57 size_t totalSizepServer);
58 typedef void (*proxyChannelContextDtor)(
void* context);
64 UINT32 front_channel_id;
65 UINT32 back_channel_id;
66 pf_utils_channel_mode channelMode;
67 WINPR_ATTR_NODISCARD proxyChannelDataFn onFrontData;
68 WINPR_ATTR_NODISCARD proxyChannelDataFn onBackData;
69 proxyChannelContextDtor contextDtor;
73 FREERDP_API
void StaticChannelContext_free(pServerStaticChannelContext* ctx);
87 wHashTable* interceptContextMap;
88 wHashTable* channelsByFrontId;
89 wHashTable* channelsByBackId;
93 WINPR_ATTR_MALLOC(StaticChannelContext_free, 1)
95 pServerStaticChannelContext* StaticChannelContext_new(pServerContext* ps, const
char* name,
118 BOOL allow_next_conn_failure;
122 pReceiveChannelData client_receive_channel_data_original;
123 wQueue* cached_server_channel_data;
124 WINPR_ATTR_NODISCARD BOOL (*sendChannelData)(pClientContext* pc,
128 char* remote_hostname;
133 BOOL input_state_sync_pending;
136 wHashTable* interceptContextMap;
137 UINT32 computerNameLen;
138 BOOL computerNameUnicode;
153 const proxyConfig* config;
159 HANDLE client_thread;
160 HANDLE gfx_server_ready;
162 char session_id[PROXY_SESSION_ID_LENGTH + 1];
165 wHashTable* modules_info;
166 psPeerReceiveChannelData server_receive_channel_data_original;
170 FREERDP_API BOOL pf_context_copy_settings(rdpSettings* dst,
const rdpSettings* src);
173 FREERDP_API BOOL pf_context_init_server_context(freerdp_peer* client);
175 WINPR_ATTR_MALLOC(freerdp_client_context_free, 1)
177 FREERDP_API pClientContext* pf_context_create_client_context(const rdpSettings* clientSettings);
179 FREERDP_API
void proxy_data_free(proxyData* pdata);
181 WINPR_ATTR_MALLOC(proxy_data_free, 1)
183 FREERDP_API proxyData* proxy_data_new(
void);
184 FREERDP_API
void proxy_data_set_client_context(proxyData* pdata, pClientContext* context);
185 FREERDP_API
void proxy_data_set_server_context(proxyData* pdata, pServerContext* context);
188 FREERDP_API BOOL proxy_data_shall_disconnect(proxyData* pdata);
189 FREERDP_API
void proxy_data_abort_connect(proxyData* pdata);
per channel configuration