FreeRDP
Loading...
Searching...
No Matches
client/drdynvc_main.h
1
22
#ifndef FREERDP_CHANNEL_DRDYNVC_CLIENT_MAIN_H
23
#define FREERDP_CHANNEL_DRDYNVC_CLIENT_MAIN_H
24
25
#include <freerdp/config.h>
26
27
#include <winpr/wlog.h>
28
#include <winpr/synch.h>
29
#include <freerdp/settings.h>
30
#include <winpr/collections.h>
31
32
#include <freerdp/api.h>
33
#include <freerdp/svc.h>
34
#include <freerdp/dvc.h>
35
#include <freerdp/addin.h>
36
#include <freerdp/channels/log.h>
37
#include <freerdp/client/drdynvc.h>
38
#include <freerdp/codec/zgfx.h>
39
#include <freerdp/freerdp.h>
40
41
typedef
struct
drdynvc_plugin
drdynvcPlugin;
42
43
typedef
struct
44
{
45
IWTSVirtualChannelManager iface;
46
47
drdynvcPlugin* drdynvc;
48
49
wArrayList* plugin_names;
50
wArrayList* plugins;
51
52
wHashTable* listeners;
53
wHashTable* channelsById;
54
wStreamPool* pool;
55
}
DVCMAN
;
56
57
typedef
struct
58
{
59
IWTSListener iface;
60
61
DVCMAN
* dvcman;
62
char
* channel_name;
63
UINT32 flags;
64
IWTSListenerCallback* listener_callback;
65
}
DVCMAN_LISTENER
;
66
67
typedef
struct
68
{
69
IDRDYNVC_ENTRY_POINTS iface;
70
71
DVCMAN
* dvcman;
72
const
ADDIN_ARGV
* args;
73
rdpContext* context;
74
}
DVCMAN_ENTRY_POINTS
;
75
76
typedef
enum
77
{
78
DVC_CHANNEL_INIT,
79
DVC_CHANNEL_RUNNING,
80
DVC_CHANNEL_CLOSED
81
} DVC_CHANNEL_STATE;
82
83
typedef
struct
84
{
85
uint64_t bytesIn;
86
uint64_t bytesOut;
87
uint64_t fragmentsIn;
88
uint64_t fragmentsOut;
89
uint64_t packetsIn;
90
uint64_t packetsOut;
91
}
DVCMAN_CHANNEL_STATS
;
92
93
typedef
struct
94
{
95
IWTSVirtualChannel iface;
96
97
volatile
LONG refCounter;
98
DVC_CHANNEL_STATE state;
99
DVCMAN
* dvcman;
100
void
* pInterface;
101
UINT32 channel_id;
102
char
* channel_name;
103
IWTSVirtualChannelCallback* channel_callback;
104
105
wStream
* dvc_data;
106
UINT32 dvc_data_length;
107
ZGFX_CONTEXT* decompressor;
108
CRITICAL_SECTION
lock;
109
DVCMAN_CHANNEL_STATS
stats;
110
111
/* TUNNELTYPE_ the channel's data is written on, 0 for the drdynvc static channel. Guarded by
112
* lock: a writer holds it for a whole message, so Soft-Sync cannot move the channel between
113
* two fragments, nor while a message is still on its way out over TCP. */
114
UINT32 tunnelType;
115
#if defined(WITH_RDPEUDP)
116
/* The channel carries a static virtual channel's traffic, see dvcman_static_bridge_new. Its
117
* data is passed on in the chunks it came in: bridgeFragmented is set from a DATA_FIRST PDU
118
* until bridgeReceived reaches its length (dvc_data_length). */
119
BOOL staticBridge;
120
BOOL bridgeFragmented;
121
UINT32 bridgeReceived;
122
#endif
123
}
DVCMAN_CHANNEL
;
124
125
typedef
enum
126
{
127
DRDYNVC_STATE_INITIAL,
128
DRDYNVC_STATE_CAPABILITIES,
129
DRDYNVC_STATE_READY,
130
DRDYNVC_STATE_OPENING_CHANNEL,
131
DRDYNVC_STATE_SEND_RECEIVE,
132
DRDYNVC_STATE_FINAL
133
} DRDYNVC_STATE;
134
135
struct
drdynvc_plugin
136
{
137
CHANNEL_DEF
channelDef;
138
CHANNEL_ENTRY_POINTS_FREERDP_EX
channelEntryPoints;
139
140
wLog* log;
141
HANDLE thread;
142
BOOL async;
143
wStream
* data_in;
144
void
* InitHandle;
145
DWORD OpenHandle;
146
wMessageQueue* queue;
147
148
DRDYNVC_STATE state;
149
DrdynvcClientContext* context;
150
151
UINT16 version;
152
int
PriorityCharge0;
153
int
PriorityCharge1;
154
int
PriorityCharge2;
155
int
PriorityCharge3;
156
rdpContext* rdpcontext;
157
158
IWTSVirtualChannelManager* channel_mgr;
159
BOOL firstFlagReceived;
160
UINT32 totalLength;
161
162
/* Soft-Sync ([MS-RDPEDYC] 3.1.5.3) */
163
BOOL softSyncDone;
164
wStream
* pendingSoftSync;
165
wStream
** tunnelBacklog;
166
UINT32* tunnelBacklogTypes;
167
size_t
tunnelBacklogCount;
168
size_t
tunnelBacklogCapacity;
169
};
170
171
#endif
/* FREERDP_CHANNEL_DRDYNVC_CLIENT_MAIN_H */
ADDIN_ARGV
Definition
settings_types.h:396
CHANNEL_DEF
Definition
wtsapi.h:78
CHANNEL_ENTRY_POINTS_FREERDP_EX
Definition
svc.h:60
DVCMAN_CHANNEL_STATS
Definition
client/drdynvc_main.h:84
DVCMAN_CHANNEL
Definition
client/drdynvc_main.h:94
DVCMAN_ENTRY_POINTS
Definition
client/drdynvc_main.h:68
DVCMAN_LISTENER
Definition
client/drdynvc_main.h:58
DVCMAN
Definition
client/drdynvc_main.h:44
RTL_CRITICAL_SECTION
Definition
include/winpr/synch.h:160
drdynvc_plugin
Definition
client/drdynvc_main.h:136
wStream
Definition
include/winpr/stream.h:42
channels
drdynvc
client
drdynvc_main.h
Generated by
1.9.8