FreeRDP
Loading...
Searching...
No Matches
proxy_context.h
1
22#ifndef FREERDP_SERVER_PROXY_PFCONTEXT_H
23#define FREERDP_SERVER_PROXY_PFCONTEXT_H
24
25#include <freerdp/api.h>
26#include <freerdp/types.h>
27
28#include <freerdp/freerdp.h>
29#include <freerdp/channels/wtsvc.h>
30
31#include <freerdp/server/proxy/proxy_config.h>
32#include <freerdp/server/proxy/proxy_types.h>
33
34#define PROXY_SESSION_ID_LENGTH 32
35
36#ifdef __cplusplus
37extern "C"
38{
39#endif
40
41 typedef struct proxy_data proxyData;
42 typedef struct proxy_module proxyModule;
43 typedef struct p_server_static_channel_context pServerStaticChannelContext;
44
45 typedef struct s_InterceptContextMapEntry
46 {
47 void (*free)(struct s_InterceptContextMapEntry*);
49
50 /* All proxy interception channels derive from this base struct
51 * and set their cleanup function accordingly. */
52 FREERDP_API void intercept_context_entry_free(void* obj);
53
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);
59
62 {
63 char* channel_name;
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;
70 void* context;
71 };
72
73 FREERDP_API void StaticChannelContext_free(pServerStaticChannelContext* ctx);
74
78 typedef struct p_server_context pServerContext;
79
80 WINPR_ATTR_MALLOC(StaticChannelContext_free, 1)
81 WINPR_ATTR_NODISCARD
82 pServerStaticChannelContext* StaticChannelContext_new(pServerContext* ps, const char* name,
83 UINT32 id);
84
85 typedef struct p_client_context pClientContext;
86
91 {
92 proxyModule* module;
93 const proxyConfig* config;
94
95 rdpContext* ps; /* actual type is pServerContext */
96 rdpContext* pc; /* actual type is pClientContext */
97
98 HANDLE abort_event;
99 HANDLE client_thread;
100 HANDLE gfx_server_ready;
101
102 char session_id[PROXY_SESSION_ID_LENGTH + 1];
103
104 /* used to external modules to store per-session info */
105 wHashTable* modules_info;
106 psPeerReceiveChannelData server_receive_channel_data_original;
107 };
108
109 WINPR_ATTR_NODISCARD
110 FREERDP_API BOOL pf_context_copy_settings(rdpSettings* dst, const rdpSettings* src);
111
112 WINPR_ATTR_NODISCARD
113 FREERDP_API BOOL pf_context_init_server_context(freerdp_peer* client);
114
115 WINPR_ATTR_MALLOC(freerdp_client_context_free, 1)
116 FREERDP_API pClientContext* pf_context_create_client_context(const rdpSettings* clientSettings);
117
118 FREERDP_API void proxy_data_free(proxyData* pdata);
119
120 WINPR_ATTR_MALLOC(proxy_data_free, 1)
121 FREERDP_API proxyData* proxy_data_new(void);
122 FREERDP_API void proxy_data_set_client_context(proxyData* pdata, pClientContext* context);
123
130 WINPR_ATTR_NODISCARD
131 FREERDP_API pClientContext* proxy_data_get_client_context(proxyData* pdata);
132
133 FREERDP_API void proxy_data_set_server_context(proxyData* pdata, pServerContext* context);
134
141 WINPR_ATTR_NODISCARD
142 FREERDP_API pServerContext* proxy_data_get_server_context(proxyData* pdata);
143
144 WINPR_ATTR_NODISCARD
145 FREERDP_API BOOL proxy_data_shall_disconnect(proxyData* pdata);
146 FREERDP_API void proxy_data_abort_connect(proxyData* pdata);
147
148#ifdef __cplusplus
149}
150#endif
151
152#endif /* FREERDP_SERVER_PROXY_PFCONTEXT_H */
per channel configuration