/src/FreeRDP/libfreerdp/core/errinfo.c
Line | Count | Source (jump to first uncovered line) |
1 | | /** |
2 | | * FreeRDP: A Remote Desktop Protocol Implementation |
3 | | * Error Info |
4 | | * |
5 | | * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com> |
6 | | * |
7 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
8 | | * you may not use this file except in compliance with the License. |
9 | | * You may obtain a copy of the License at |
10 | | * |
11 | | * http://www.apache.org/licenses/LICENSE-2.0 |
12 | | * |
13 | | * Unless required by applicable law or agreed to in writing, software |
14 | | * distributed under the License is distributed on an "AS IS" BASIS, |
15 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
16 | | * See the License for the specific language governing permissions and |
17 | | * limitations under the License. |
18 | | */ |
19 | | |
20 | | #include <freerdp/config.h> |
21 | | |
22 | | #include <stdio.h> |
23 | | |
24 | | #include <freerdp/log.h> |
25 | | |
26 | | #include "errinfo.h" |
27 | | |
28 | | #define TAG FREERDP_TAG("core") |
29 | | |
30 | | #define ERRINFO_DEFINE(_code, category) \ |
31 | | { \ |
32 | | ERRINFO_##_code, "ERRINFO_" #_code, ERRINFO_##_code##_STRING, category \ |
33 | | } |
34 | | |
35 | | /* Protocol-independent codes */ |
36 | | |
37 | | #define ERRINFO_RPC_INITIATED_DISCONNECT_STRING \ |
38 | | "The disconnection was initiated by an administrative tool on the server in another session." |
39 | | |
40 | | #define ERRINFO_RPC_INITIATED_LOGOFF_STRING \ |
41 | | "The disconnection was due to a forced logoff initiated by an administrative tool on the " \ |
42 | | "server in another session." |
43 | | |
44 | | #define ERRINFO_IDLE_TIMEOUT_STRING "The idle session limit timer on the server has elapsed." |
45 | | |
46 | | #define ERRINFO_LOGON_TIMEOUT_STRING "The active session limit timer on the server has elapsed." |
47 | | |
48 | | #define ERRINFO_DISCONNECTED_BY_OTHER_CONNECTION_STRING \ |
49 | | "Another user connected to the server, forcing the disconnection of the current connection." |
50 | | |
51 | | #define ERRINFO_OUT_OF_MEMORY_STRING "The server ran out of available memory resources." |
52 | | |
53 | | #define ERRINFO_SERVER_DENIED_CONNECTION_STRING "The server denied the connection." |
54 | | |
55 | | #define ERRINFO_SERVER_INSUFFICIENT_PRIVILEGES_STRING \ |
56 | | "The user cannot connect to the server due to insufficient access privileges." |
57 | | |
58 | | #define ERRINFO_SERVER_FRESH_CREDENTIALS_REQUIRED_STRING \ |
59 | | "The server does not accept saved user credentials and requires that the user enter their " \ |
60 | | "credentials for each connection." |
61 | | |
62 | | #define ERRINFO_RPC_INITIATED_DISCONNECT_BY_USER_STRING \ |
63 | | "The disconnection was initiated by an administrative tool on the server running in the " \ |
64 | | "user's session." |
65 | | |
66 | | #define ERRINFO_LOGOFF_BY_USER_STRING \ |
67 | | "The disconnection was initiated by the user logging off their session on the server." |
68 | | |
69 | | #define ERRINFO_CLOSE_STACK_ON_DRIVER_NOT_READY_STRING \ |
70 | | "The display driver in the remote session did not report any status within the time allotted " \ |
71 | | "for startup." |
72 | | |
73 | | #define ERRINFO_SERVER_DWM_CRASH_STRING \ |
74 | | "The DWM process running in the remote session terminated unexpectedly." |
75 | | |
76 | | #define ERRINFO_CLOSE_STACK_ON_DRIVER_FAILURE_STRING \ |
77 | | "The display driver in the remote session was unable to complete all the tasks required for " \ |
78 | | "startup." |
79 | | |
80 | | #define ERRINFO_CLOSE_STACK_ON_DRIVER_IFACE_FAILURE_STRING \ |
81 | | "The display driver in the remote session started up successfully, but due to internal " \ |
82 | | "failures was not usable by the remoting stack." |
83 | | |
84 | | #define ERRINFO_SERVER_WINLOGON_CRASH_STRING \ |
85 | | "The Winlogon process running in the remote session terminated unexpectedly." |
86 | | |
87 | | #define ERRINFO_SERVER_CSRSS_CRASH_STRING \ |
88 | | "The CSRSS process running in the remote session terminated unexpectedly." |
89 | | |
90 | | /* Protocol-independent codes generated by the Connection Broker */ |
91 | | |
92 | | #define ERRINFO_CB_DESTINATION_NOT_FOUND_STRING "The target endpoint could not be found." |
93 | | |
94 | | #define ERRINFO_CB_LOADING_DESTINATION_STRING \ |
95 | | "The target endpoint to which the client is being redirected is disconnecting from the " \ |
96 | | "Connection Broker." |
97 | | |
98 | | #define ERRINFO_CB_REDIRECTING_TO_DESTINATION_STRING \ |
99 | | "An error occurred while the connection was being redirected to the target endpoint." |
100 | | |
101 | | #define ERRINFO_CB_SESSION_ONLINE_VM_WAKE_STRING \ |
102 | | "An error occurred while the target endpoint (a virtual machine) was being awakened." |
103 | | |
104 | | #define ERRINFO_CB_SESSION_ONLINE_VM_BOOT_STRING \ |
105 | | "An error occurred while the target endpoint (a virtual machine) was being started." |
106 | | |
107 | | #define ERRINFO_CB_SESSION_ONLINE_VM_NO_DNS_STRING \ |
108 | | "The IP address of the target endpoint (a virtual machine) cannot be determined." |
109 | | |
110 | | #define ERRINFO_CB_DESTINATION_POOL_NOT_FREE_STRING \ |
111 | | "There are no available endpoints in the pool managed by the Connection Broker." |
112 | | |
113 | | #define ERRINFO_CB_CONNECTION_CANCELLED_STRING "Processing of the connection has been cancelled." |
114 | | |
115 | | #define ERRINFO_CB_CONNECTION_ERROR_INVALID_SETTINGS_STRING \ |
116 | | "The settings contained in the routingToken field of the X.224 Connection Request PDU " \ |
117 | | "(section 2.2.1.1) cannot be validated." |
118 | | |
119 | | #define ERRINFO_CB_SESSION_ONLINE_VM_BOOT_TIMEOUT_STRING \ |
120 | | "A time-out occurred while the target endpoint (a virtual machine) was being started." |
121 | | |
122 | | #define ERRINFO_CB_SESSION_ONLINE_VM_SESSMON_FAILED_STRING \ |
123 | | "A session monitoring error occurred while the target endpoint (a virtual machine) was being " \ |
124 | | "started." |
125 | | |
126 | | /* Protocol-independent licensing codes */ |
127 | | |
128 | | #define ERRINFO_LICENSE_INTERNAL_STRING \ |
129 | | "An internal error has occurred in the Terminal Services licensing component." |
130 | | |
131 | | #define ERRINFO_LICENSE_NO_LICENSE_SERVER_STRING \ |
132 | | "A Remote Desktop License Server ([MS-RDPELE] section 1.1) could not be found to provide a " \ |
133 | | "license." |
134 | | |
135 | | #define ERRINFO_LICENSE_NO_LICENSE_STRING \ |
136 | | "There are no Client Access Licenses ([MS-RDPELE] section 1.1) available for the target " \ |
137 | | "remote computer." |
138 | | |
139 | | #define ERRINFO_LICENSE_BAD_CLIENT_MSG_STRING \ |
140 | | "The remote computer received an invalid licensing message from the client." |
141 | | |
142 | | #define ERRINFO_LICENSE_HWID_DOESNT_MATCH_LICENSE_STRING \ |
143 | | "The Client Access License ([MS-RDPELE] section 1.1) stored by the client has been modified." |
144 | | |
145 | | #define ERRINFO_LICENSE_BAD_CLIENT_LICENSE_STRING \ |
146 | | "The Client Access License ([MS-RDPELE] section 1.1) stored by the client is in an invalid " \ |
147 | | "format." |
148 | | |
149 | | #define ERRINFO_LICENSE_CANT_FINISH_PROTOCOL_STRING \ |
150 | | "Network problems have caused the licensing protocol ([MS-RDPELE] section 1.3.3) to be " \ |
151 | | "terminated." |
152 | | |
153 | | #define ERRINFO_LICENSE_CLIENT_ENDED_PROTOCOL_STRING \ |
154 | | "The client prematurely ended the licensing protocol ([MS-RDPELE] section 1.3.3)." |
155 | | |
156 | | #define ERRINFO_LICENSE_BAD_CLIENT_ENCRYPTION_STRING \ |
157 | | "A licensing message ([MS-RDPELE] sections 2.2 and 5.1) was incorrectly encrypted." |
158 | | |
159 | | #define ERRINFO_LICENSE_CANT_UPGRADE_LICENSE_STRING \ |
160 | | "The Client Access License ([MS-RDPELE] section 1.1) stored by the client could not be " \ |
161 | | "upgraded or renewed." |
162 | | |
163 | | #define ERRINFO_LICENSE_NO_REMOTE_CONNECTIONS_STRING \ |
164 | | "The remote computer is not licensed to accept remote connections." |
165 | | |
166 | | /* RDP specific codes */ |
167 | | |
168 | | #define ERRINFO_UNKNOWN_DATA_PDU_TYPE_STRING \ |
169 | | "Unknown pduType2 field in a received Share Data Header (section 2.2.8.1.1.1.2)." |
170 | | |
171 | | #define ERRINFO_UNKNOWN_PDU_TYPE_STRING \ |
172 | | "Unknown pduType field in a received Share Control Header (section 2.2.8.1.1.1.1)." |
173 | | |
174 | | #define ERRINFO_DATA_PDU_SEQUENCE_STRING \ |
175 | | "An out-of-sequence Slow-Path Data PDU (section 2.2.8.1.1.1.1) has been received." |
176 | | |
177 | | #define ERRINFO_CONTROL_PDU_SEQUENCE_STRING \ |
178 | | "An out-of-sequence Slow-Path Non-Data PDU (section 2.2.8.1.1.1.1) has been received." |
179 | | |
180 | | #define ERRINFO_INVALID_CONTROL_PDU_ACTION_STRING \ |
181 | | "A Control PDU (sections 2.2.1.15 and 2.2.1.16) has been received with an invalid action " \ |
182 | | "field." |
183 | | |
184 | | #define ERRINFO_INVALID_INPUT_PDU_TYPE_STRING \ |
185 | | "(a) A Slow-Path Input Event (section 2.2.8.1.1.3.1.1) has been received with an invalid " \ |
186 | | "messageType field.\n" \ |
187 | | "(b) A Fast-Path Input Event (section 2.2.8.1.2.2) has been received with an invalid " \ |
188 | | "eventCode field." |
189 | | |
190 | | #define ERRINFO_INVALID_INPUT_PDU_MOUSE_STRING \ |
191 | | "(a) A Slow-Path Mouse Event (section 2.2.8.1.1.3.1.1.3) or Extended Mouse Event " \ |
192 | | "(section 2.2.8.1.1.3.1.1.4) has been received with an invalid pointerFlags field.\n" \ |
193 | | "(b) A Fast-Path Mouse Event (section 2.2.8.1.2.2.3) or Fast-Path Extended Mouse Event " \ |
194 | | "(section 2.2.8.1.2.2.4) has been received with an invalid pointerFlags field." |
195 | | |
196 | | #define ERRINFO_INVALID_REFRESH_RECT_PDU_STRING \ |
197 | | "An invalid Refresh Rect PDU (section 2.2.11.2) has been received." |
198 | | |
199 | | #define ERRINFO_CREATE_USER_DATA_FAILED_STRING \ |
200 | | "The server failed to construct the GCC Conference Create Response user data (section " \ |
201 | | "2.2.1.4)." |
202 | | |
203 | | #define ERRINFO_CONNECT_FAILED_STRING \ |
204 | | "Processing during the Channel Connection phase of the RDP Connection Sequence " \ |
205 | | "(see section 1.3.1.1 for an overview of the RDP Connection Sequence phases) has failed." |
206 | | |
207 | | #define ERRINFO_CONFIRM_ACTIVE_HAS_WRONG_SHAREID_STRING \ |
208 | | "A Confirm Active PDU (section 2.2.1.13.2) was received from the client with an invalid " \ |
209 | | "shareId field." |
210 | | |
211 | | #define ERRINFO_CONFIRM_ACTIVE_HAS_WRONG_ORIGINATOR_STRING \ |
212 | | "A Confirm Active PDU (section 2.2.1.13.2) was received from the client with an invalid " \ |
213 | | "originatorId field." |
214 | | |
215 | | #define ERRINFO_PERSISTENT_KEY_PDU_BAD_LENGTH_STRING \ |
216 | | "There is not enough data to process a Persistent Key List PDU (section 2.2.1.17)." |
217 | | |
218 | | #define ERRINFO_PERSISTENT_KEY_PDU_ILLEGAL_FIRST_STRING \ |
219 | | "A Persistent Key List PDU (section 2.2.1.17) marked as PERSIST_PDU_FIRST (0x01) was " \ |
220 | | "received after the reception " \ |
221 | | "of a prior Persistent Key List PDU also marked as PERSIST_PDU_FIRST." |
222 | | |
223 | | #define ERRINFO_PERSISTENT_KEY_PDU_TOO_MANY_TOTAL_KEYS_STRING \ |
224 | | "A Persistent Key List PDU (section 2.2.1.17) was received which specified a total number of " \ |
225 | | "bitmap cache entries larger than 262144." |
226 | | |
227 | | #define ERRINFO_PERSISTENT_KEY_PDU_TOO_MANY_CACHE_KEYS_STRING \ |
228 | | "A Persistent Key List PDU (section 2.2.1.17) was received which specified an invalid total " \ |
229 | | "number of keys for a bitmap cache " \ |
230 | | "(the number of entries that can be stored within each bitmap cache is specified in the " \ |
231 | | "Revision 1 or 2 Bitmap Cache Capability Set " \ |
232 | | "(section 2.2.7.1.4) that is sent from client to server)." |
233 | | |
234 | | #define ERRINFO_INPUT_PDU_BAD_LENGTH_STRING \ |
235 | | "There is not enough data to process Input Event PDU Data (section 2.2.8.1.1.3.1) or a " \ |
236 | | "Fast-Path Input Event PDU (section 2.2.8.1.2)." |
237 | | |
238 | | #define ERRINFO_BITMAP_CACHE_ERROR_PDU_BAD_LENGTH_STRING \ |
239 | | "There is not enough data to process the shareDataHeader, NumInfoBlocks, " \ |
240 | | "Pad1, and Pad2 fields of the Bitmap Cache Error PDU Data ([MS-RDPEGDI] section 2.2.2.3.1.1)." |
241 | | |
242 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT_STRING \ |
243 | | "(a) The dataSignature field of the Fast-Path Input Event PDU (section 2.2.8.1.2) does not " \ |
244 | | "contain enough data.\n" \ |
245 | | "(b) The fipsInformation and dataSignature fields of the Fast-Path Input Event PDU (section " \ |
246 | | "2.2.8.1.2) do not contain enough data." |
247 | | |
248 | | #define ERRINFO_VCHANNEL_DATA_TOO_SHORT_STRING \ |
249 | | "(a) There is not enough data in the Client Network Data (section 2.2.1.3.4) to read the " \ |
250 | | "virtual channel configuration data.\n" \ |
251 | | "(b) There is not enough data to read a complete Channel PDU Header (section 2.2.6.1.1)." |
252 | | |
253 | | #define ERRINFO_SHARE_DATA_TOO_SHORT_STRING \ |
254 | | "(a) There is not enough data to process Control PDU Data (section 2.2.1.15.1).\n" \ |
255 | | "(b) There is not enough data to read a complete Share Control Header (section " \ |
256 | | "2.2.8.1.1.1.1).\n" \ |
257 | | "(c) There is not enough data to read a complete Share Data Header (section 2.2.8.1.1.1.2) " \ |
258 | | "of a Slow-Path Data PDU (section 2.2.8.1.1.1.1).\n" \ |
259 | | "(d) There is not enough data to process Font List PDU Data (section 2.2.1.18.1)." |
260 | | |
261 | | #define ERRINFO_BAD_SUPPRESS_OUTPUT_PDU_STRING \ |
262 | | "(a) There is not enough data to process Suppress Output PDU Data (section 2.2.11.3.1).\n" \ |
263 | | "(b) The allowDisplayUpdates field of the Suppress Output PDU Data (section 2.2.11.3.1) is " \ |
264 | | "invalid." |
265 | | |
266 | | #define ERRINFO_CONFIRM_ACTIVE_PDU_TOO_SHORT_STRING \ |
267 | | "(a) There is not enough data to read the shareControlHeader, shareId, originatorId, " \ |
268 | | "lengthSourceDescriptor, " \ |
269 | | "and lengthCombinedCapabilities fields of the Confirm Active PDU Data (section " \ |
270 | | "2.2.1.13.2.1).\n" \ |
271 | | "(b) There is not enough data to read the sourceDescriptor, numberCapabilities, pad2Octets, " \ |
272 | | "and capabilitySets " \ |
273 | | "fields of the Confirm Active PDU Data (section 2.2.1.13.2.1)." |
274 | | |
275 | | #define ERRINFO_CAPABILITY_SET_TOO_SMALL_STRING \ |
276 | | "There is not enough data to read the capabilitySetType and the lengthCapability fields in a " \ |
277 | | "received Capability Set (section 2.2.1.13.1.1.1)." |
278 | | |
279 | | #define ERRINFO_CAPABILITY_SET_TOO_LARGE_STRING \ |
280 | | "A Capability Set (section 2.2.1.13.1.1.1) has been received with a lengthCapability " \ |
281 | | "field that contains a value greater than the total length of the data received." |
282 | | |
283 | | #define ERRINFO_NO_CURSOR_CACHE_STRING \ |
284 | | "(a) Both the colorPointerCacheSize and pointerCacheSize fields in the Pointer Capability " \ |
285 | | "Set (section 2.2.7.1.5) are set to zero.\n" \ |
286 | | "(b) The pointerCacheSize field in the Pointer Capability Set (section 2.2.7.1.5) is not " \ |
287 | | "present, and the colorPointerCacheSize field is set to zero." |
288 | | |
289 | | #define ERRINFO_BAD_CAPABILITIES_STRING \ |
290 | | "The capabilities received from the client in the Confirm Active PDU (section 2.2.1.13.2) " \ |
291 | | "were not accepted by the server." |
292 | | |
293 | | #define ERRINFO_VIRTUAL_CHANNEL_DECOMPRESSION_STRING \ |
294 | | "An error occurred while using the bulk compressor (section 3.1.8 and [MS-RDPEGDI] section " \ |
295 | | "3.1.8) to decompress a Virtual Channel PDU (section 2.2.6.1)" |
296 | | |
297 | | #define ERRINFO_INVALID_VC_COMPRESSION_TYPE_STRING \ |
298 | | "An invalid bulk compression package was specified in the flags field of the Channel PDU " \ |
299 | | "Header (section 2.2.6.1.1)." |
300 | | |
301 | | #define ERRINFO_INVALID_CHANNEL_ID_STRING \ |
302 | | "An invalid MCS channel ID was specified in the mcsPdu field of the Virtual Channel PDU " \ |
303 | | "(section 2.2.6.1)." |
304 | | |
305 | | #define ERRINFO_VCHANNELS_TOO_MANY_STRING \ |
306 | | "The client requested more than the maximum allowed 31 static virtual channels in the Client " \ |
307 | | "Network Data (section 2.2.1.3.4)." |
308 | | |
309 | | #define ERRINFO_REMOTEAPP_NOT_ENABLED_STRING \ |
310 | | "The INFO_RAIL flag (0x00008000) MUST be set in the flags field of the Info Packet (section " \ |
311 | | "2.2.1.11.1.1) " \ |
312 | | "as the session on the remote server can only host remote applications." |
313 | | |
314 | | #define ERRINFO_CACHE_CAP_NOT_SET_STRING \ |
315 | | "The client sent a Persistent Key List PDU (section 2.2.1.17) without including the " \ |
316 | | "prerequisite Revision 2 Bitmap Cache " \ |
317 | | "Capability Set (section 2.2.7.1.4.2) in the Confirm Active PDU (section 2.2.1.13.2)." |
318 | | |
319 | | #define ERRINFO_BITMAP_CACHE_ERROR_PDU_BAD_LENGTH2_STRING \ |
320 | | "The NumInfoBlocks field in the Bitmap Cache Error PDU Data is inconsistent with the amount " \ |
321 | | "of data in the " \ |
322 | | "Info field ([MS-RDPEGDI] section 2.2.2.3.1.1)." |
323 | | |
324 | | #define ERRINFO_OFFSCREEN_CACHE_ERROR_PDU_BAD_LENGTH_STRING \ |
325 | | "There is not enough data to process an Offscreen Bitmap Cache Error PDU ([MS-RDPEGDI] " \ |
326 | | "section 2.2.2.3.2)." |
327 | | |
328 | | #define ERRINFO_DRAWNINEGRID_CACHE_ERROR_PDU_BAD_LENGTH_STRING \ |
329 | | "There is not enough data to process a DrawNineGrid Cache Error PDU ([MS-RDPEGDI] section " \ |
330 | | "2.2.2.3.3)." |
331 | | |
332 | | #define ERRINFO_GDIPLUS_PDU_BAD_LENGTH_STRING \ |
333 | | "There is not enough data to process a GDI+ Error PDU ([MS-RDPEGDI] section 2.2.2.3.4)." |
334 | | |
335 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT2_STRING \ |
336 | | "There is not enough data to read a Basic Security Header (section 2.2.8.1.1.2.1)." |
337 | | |
338 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT3_STRING \ |
339 | | "There is not enough data to read a Non-FIPS Security Header (section 2.2.8.1.1.2.2) or FIPS " \ |
340 | | "Security Header (section 2.2.8.1.1.2.3)." |
341 | | |
342 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT4_STRING \ |
343 | | "There is not enough data to read the basicSecurityHeader and length fields of the Security " \ |
344 | | "Exchange PDU Data (section 2.2.1.10.1)." |
345 | | |
346 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT5_STRING \ |
347 | | "There is not enough data to read the CodePage, flags, cbDomain, cbUserName, cbPassword, " \ |
348 | | "cbAlternateShell, " \ |
349 | | "cbWorkingDir, Domain, UserName, Password, AlternateShell, and WorkingDir fields in the Info " \ |
350 | | "Packet (section 2.2.1.11.1.1)." |
351 | | |
352 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT6_STRING \ |
353 | | "There is not enough data to read the CodePage, flags, cbDomain, cbUserName, cbPassword, " \ |
354 | | "cbAlternateShell, " \ |
355 | | "and cbWorkingDir fields in the Info Packet (section 2.2.1.11.1.1)." |
356 | | |
357 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT7_STRING \ |
358 | | "There is not enough data to read the clientAddressFamily and cbClientAddress fields in the " \ |
359 | | "Extended Info Packet (section 2.2.1.11.1.1.1)." |
360 | | |
361 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT8_STRING \ |
362 | | "There is not enough data to read the clientAddress field in the Extended Info Packet " \ |
363 | | "(section 2.2.1.11.1.1.1)." |
364 | | |
365 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT9_STRING \ |
366 | | "There is not enough data to read the cbClientDir field in the Extended Info Packet (section " \ |
367 | | "2.2.1.11.1.1.1)." |
368 | | |
369 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT10_STRING \ |
370 | | "There is not enough data to read the clientDir field in the Extended Info Packet (section " \ |
371 | | "2.2.1.11.1.1.1)." |
372 | | |
373 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT11_STRING \ |
374 | | "There is not enough data to read the clientTimeZone field in the Extended Info Packet " \ |
375 | | "(section 2.2.1.11.1.1.1)." |
376 | | |
377 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT12_STRING \ |
378 | | "There is not enough data to read the clientSessionId field in the Extended Info Packet " \ |
379 | | "(section 2.2.1.11.1.1.1)." |
380 | | |
381 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT13_STRING \ |
382 | | "There is not enough data to read the performanceFlags field in the Extended Info Packet " \ |
383 | | "(section 2.2.1.11.1.1.1)." |
384 | | |
385 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT14_STRING \ |
386 | | "There is not enough data to read the cbAutoReconnectLen field in the Extended Info Packet " \ |
387 | | "(section 2.2.1.11.1.1.1)." |
388 | | |
389 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT15_STRING \ |
390 | | "There is not enough data to read the autoReconnectCookie field in the Extended Info Packet " \ |
391 | | "(section 2.2.1.11.1.1.1)." |
392 | | |
393 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT16_STRING \ |
394 | | "The cbAutoReconnectLen field in the Extended Info Packet (section 2.2.1.11.1.1.1) contains " \ |
395 | | "a value " \ |
396 | | "which is larger than the maximum allowed length of 128 bytes." |
397 | | |
398 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT17_STRING \ |
399 | | "There is not enough data to read the clientAddressFamily and cbClientAddress fields in the " \ |
400 | | "Extended Info Packet (section 2.2.1.11.1.1.1)." |
401 | | |
402 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT18_STRING \ |
403 | | "There is not enough data to read the clientAddress field in the Extended Info Packet " \ |
404 | | "(section 2.2.1.11.1.1.1)." |
405 | | |
406 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT19_STRING \ |
407 | | "There is not enough data to read the cbClientDir field in the Extended Info Packet (section " \ |
408 | | "2.2.1.11.1.1.1)." |
409 | | |
410 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT20_STRING \ |
411 | | "There is not enough data to read the clientDir field in the Extended Info Packet (section " \ |
412 | | "2.2.1.11.1.1.1)." |
413 | | |
414 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT21_STRING \ |
415 | | "There is not enough data to read the clientTimeZone field in the Extended Info Packet " \ |
416 | | "(section 2.2.1.11.1.1.1)." |
417 | | |
418 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT22_STRING \ |
419 | | "There is not enough data to read the clientSessionId field in the Extended Info Packet " \ |
420 | | "(section 2.2.1.11.1.1.1)." |
421 | | |
422 | | #define ERRINFO_SECURITY_DATA_TOO_SHORT23_STRING \ |
423 | | "There is not enough data to read the Client Info PDU Data (section 2.2.1.11.1)." |
424 | | |
425 | | #define ERRINFO_BAD_MONITOR_DATA_STRING \ |
426 | | "The monitorCount field in the Client Monitor Data (section 2.2.1.3.6) is invalid." |
427 | | |
428 | | #define ERRINFO_VC_DECOMPRESSED_REASSEMBLE_FAILED_STRING \ |
429 | | "The server-side decompression buffer is invalid, or the size of the decompressed VC data " \ |
430 | | "exceeds " \ |
431 | | "the chunking size specified in the Virtual Channel Capability Set (section 2.2.7.1.10)." |
432 | | |
433 | | #define ERRINFO_VC_DATA_TOO_LONG_STRING \ |
434 | | "The size of a received Virtual Channel PDU (section 2.2.6.1) exceeds the chunking size " \ |
435 | | "specified " \ |
436 | | "in the Virtual Channel Capability Set (section 2.2.7.1.10)." |
437 | | |
438 | | #define ERRINFO_BAD_FRAME_ACK_DATA_STRING \ |
439 | | "There is not enough data to read a TS_FRAME_ACKNOWLEDGE_PDU ([MS-RDPRFX] section 2.2.3.1)." |
440 | | |
441 | | #define ERRINFO_GRAPHICS_MODE_NOT_SUPPORTED_STRING \ |
442 | | "The graphics mode requested by the client is not supported by the server." |
443 | | |
444 | | #define ERRINFO_GRAPHICS_SUBSYSTEM_RESET_FAILED_STRING \ |
445 | | "The server-side graphics subsystem failed to reset." |
446 | | |
447 | | #define ERRINFO_GRAPHICS_SUBSYSTEM_FAILED_STRING \ |
448 | | "The server-side graphics subsystem is in an error state and unable to continue graphics " \ |
449 | | "encoding." |
450 | | |
451 | | #define ERRINFO_TIMEZONE_KEY_NAME_LENGTH_TOO_SHORT_STRING \ |
452 | | "There is not enough data to read the cbDynamicDSTTimeZoneKeyName field in the Extended Info " \ |
453 | | "Packet (section 2.2.1.11.1.1.1)." |
454 | | |
455 | | #define ERRINFO_TIMEZONE_KEY_NAME_LENGTH_TOO_LONG_STRING \ |
456 | | "The length reported in the cbDynamicDSTTimeZoneKeyName field of the Extended Info Packet " \ |
457 | | "(section 2.2.1.11.1.1.1) is too long." |
458 | | |
459 | | #define ERRINFO_DYNAMIC_DST_DISABLED_FIELD_MISSING_STRING \ |
460 | | "The dynamicDaylightTimeDisabled field is not present in the Extended Info Packet (section " \ |
461 | | "2.2.1.11.1.1.1)." |
462 | | |
463 | | #define ERRINFO_VC_DECODING_ERROR_STRING \ |
464 | | "An error occurred when processing dynamic virtual channel data ([MS-RDPEDYC] section 3.3.5)." |
465 | | |
466 | | #define ERRINFO_VIRTUALDESKTOPTOOLARGE_STRING \ |
467 | | "The width or height of the virtual desktop defined by the monitor layout in the Client " \ |
468 | | "Monitor Data " \ |
469 | | "(section 2.2.1.3.6) is larger than the maximum allowed value of 32,766." |
470 | | |
471 | | #define ERRINFO_MONITORGEOMETRYVALIDATIONFAILED_STRING \ |
472 | | "The monitor geometry defined by the Client Monitor Data (section 2.2.1.3.6) is invalid." |
473 | | |
474 | | #define ERRINFO_INVALIDMONITORCOUNT_STRING \ |
475 | | "The monitorCount field in the Client Monitor Data(section 2.2.1.3.6) is too large." |
476 | | |
477 | | #define ERRINFO_UPDATE_SESSION_KEY_FAILED_STRING \ |
478 | | "An attempt to update the session keys while using Standard RDP Security mechanisms (section " \ |
479 | | "5.3.7) failed." |
480 | | |
481 | | #define ERRINFO_DECRYPT_FAILED_STRING \ |
482 | | "(a) Decryption using Standard RDP Security mechanisms (section 5.3.6) failed.\n" \ |
483 | | "(b) Session key creation using Standard RDP Security mechanisms (section 5.3.5) failed." |
484 | | |
485 | | #define ERRINFO_ENCRYPT_FAILED_STRING \ |
486 | | "Encryption using Standard RDP Security mechanisms (section 5.3.6) failed." |
487 | | |
488 | | #define ERRINFO_ENCRYPTION_PACKAGE_MISMATCH_STRING \ |
489 | | "Failed to find a usable Encryption Method (section 5.3.2) in the encryptionMethods field of " \ |
490 | | "the Client Security Data (section 2.2.1.4.3)." |
491 | | |
492 | | #define ERRINFO_DECRYPT_FAILED2_STRING \ |
493 | | "Unencrypted data was encountered in a protocol stream which is meant to be encrypted with " \ |
494 | | "Standard RDP Security mechanisms (section 5.3.6)." |
495 | | |
496 | | #define ERRINFO_PEER_DISCONNECTED_STRING "The peer connection was lost." |
497 | | |
498 | | /* Special codes */ |
499 | | #define ERRINFO_SUCCESS_STRING "Success." |
500 | | #define ERRINFO_NONE_STRING "" |
501 | | |
502 | | static const ERRINFO ERRINFO_CODES[] = { |
503 | | ERRINFO_DEFINE(SUCCESS, CAT_NONE), |
504 | | |
505 | | /* Protocol-independent codes */ |
506 | | ERRINFO_DEFINE(RPC_INITIATED_DISCONNECT, CAT_ADMIN), |
507 | | ERRINFO_DEFINE(RPC_INITIATED_LOGOFF, CAT_ADMIN), ERRINFO_DEFINE(IDLE_TIMEOUT, CAT_ADMIN), |
508 | | ERRINFO_DEFINE(LOGON_TIMEOUT, CAT_ADMIN), |
509 | | ERRINFO_DEFINE(DISCONNECTED_BY_OTHER_CONNECTION, CAT_USE), |
510 | | ERRINFO_DEFINE(OUT_OF_MEMORY, CAT_ADMIN), ERRINFO_DEFINE(SERVER_DENIED_CONNECTION, CAT_ADMIN), |
511 | | ERRINFO_DEFINE(SERVER_INSUFFICIENT_PRIVILEGES, CAT_ADMIN), |
512 | | ERRINFO_DEFINE(SERVER_FRESH_CREDENTIALS_REQUIRED, CAT_ADMIN), |
513 | | ERRINFO_DEFINE(RPC_INITIATED_DISCONNECT_BY_USER, CAT_ADMIN), |
514 | | ERRINFO_DEFINE(LOGOFF_BY_USER, CAT_USE), |
515 | | ERRINFO_DEFINE(CLOSE_STACK_ON_DRIVER_NOT_READY, CAT_SERVER), |
516 | | ERRINFO_DEFINE(SERVER_DWM_CRASH, CAT_SERVER), |
517 | | ERRINFO_DEFINE(CLOSE_STACK_ON_DRIVER_FAILURE, CAT_SERVER), |
518 | | ERRINFO_DEFINE(CLOSE_STACK_ON_DRIVER_IFACE_FAILURE, CAT_SERVER), |
519 | | ERRINFO_DEFINE(SERVER_WINLOGON_CRASH, CAT_SERVER), |
520 | | ERRINFO_DEFINE(SERVER_CSRSS_CRASH, CAT_SERVER), |
521 | | |
522 | | /* Protocol-independent licensing codes */ |
523 | | ERRINFO_DEFINE(LICENSE_INTERNAL, CAT_LICENSING), |
524 | | ERRINFO_DEFINE(LICENSE_NO_LICENSE_SERVER, CAT_LICENSING), |
525 | | ERRINFO_DEFINE(LICENSE_NO_LICENSE, CAT_LICENSING), |
526 | | ERRINFO_DEFINE(LICENSE_BAD_CLIENT_MSG, CAT_LICENSING), |
527 | | ERRINFO_DEFINE(LICENSE_HWID_DOESNT_MATCH_LICENSE, CAT_LICENSING), |
528 | | ERRINFO_DEFINE(LICENSE_BAD_CLIENT_LICENSE, CAT_LICENSING), |
529 | | ERRINFO_DEFINE(LICENSE_CANT_FINISH_PROTOCOL, CAT_LICENSING), |
530 | | ERRINFO_DEFINE(LICENSE_CLIENT_ENDED_PROTOCOL, CAT_LICENSING), |
531 | | ERRINFO_DEFINE(LICENSE_BAD_CLIENT_ENCRYPTION, CAT_LICENSING), |
532 | | ERRINFO_DEFINE(LICENSE_CANT_UPGRADE_LICENSE, CAT_LICENSING), |
533 | | ERRINFO_DEFINE(LICENSE_NO_REMOTE_CONNECTIONS, CAT_LICENSING), |
534 | | |
535 | | /* Protocol-independent codes generated by the Connection Broker */ |
536 | | ERRINFO_DEFINE(CB_DESTINATION_NOT_FOUND, CAT_BROKER), |
537 | | ERRINFO_DEFINE(CB_LOADING_DESTINATION, CAT_BROKER), |
538 | | ERRINFO_DEFINE(CB_REDIRECTING_TO_DESTINATION, CAT_BROKER), |
539 | | ERRINFO_DEFINE(CB_SESSION_ONLINE_VM_WAKE, CAT_BROKER), |
540 | | ERRINFO_DEFINE(CB_SESSION_ONLINE_VM_BOOT, CAT_BROKER), |
541 | | ERRINFO_DEFINE(CB_SESSION_ONLINE_VM_NO_DNS, CAT_BROKER), |
542 | | ERRINFO_DEFINE(CB_DESTINATION_POOL_NOT_FREE, CAT_BROKER), |
543 | | ERRINFO_DEFINE(CB_CONNECTION_CANCELLED, CAT_BROKER), |
544 | | ERRINFO_DEFINE(CB_CONNECTION_ERROR_INVALID_SETTINGS, CAT_BROKER), |
545 | | ERRINFO_DEFINE(CB_SESSION_ONLINE_VM_BOOT_TIMEOUT, CAT_BROKER), |
546 | | ERRINFO_DEFINE(CB_SESSION_ONLINE_VM_SESSMON_FAILED, CAT_BROKER), |
547 | | |
548 | | /* RDP specific codes */ |
549 | | ERRINFO_DEFINE(UNKNOWN_DATA_PDU_TYPE, CAT_PROTOCOL), |
550 | | ERRINFO_DEFINE(UNKNOWN_PDU_TYPE, CAT_PROTOCOL), ERRINFO_DEFINE(DATA_PDU_SEQUENCE, CAT_PROTOCOL), |
551 | | ERRINFO_DEFINE(CONTROL_PDU_SEQUENCE, CAT_PROTOCOL), |
552 | | ERRINFO_DEFINE(INVALID_CONTROL_PDU_ACTION, CAT_PROTOCOL), |
553 | | ERRINFO_DEFINE(INVALID_INPUT_PDU_TYPE, CAT_PROTOCOL), |
554 | | ERRINFO_DEFINE(INVALID_INPUT_PDU_MOUSE, CAT_PROTOCOL), |
555 | | ERRINFO_DEFINE(INVALID_REFRESH_RECT_PDU, CAT_PROTOCOL), |
556 | | ERRINFO_DEFINE(CREATE_USER_DATA_FAILED, CAT_PROTOCOL), ERRINFO_DEFINE(CONNECT_FAILED, CAT_USE), |
557 | | ERRINFO_DEFINE(CONFIRM_ACTIVE_HAS_WRONG_SHAREID, CAT_PROTOCOL), |
558 | | ERRINFO_DEFINE(CONFIRM_ACTIVE_HAS_WRONG_ORIGINATOR, CAT_PROTOCOL), |
559 | | ERRINFO_DEFINE(PERSISTENT_KEY_PDU_BAD_LENGTH, CAT_PROTOCOL), |
560 | | ERRINFO_DEFINE(PERSISTENT_KEY_PDU_ILLEGAL_FIRST, CAT_PROTOCOL), |
561 | | ERRINFO_DEFINE(PERSISTENT_KEY_PDU_TOO_MANY_TOTAL_KEYS, CAT_PROTOCOL), |
562 | | ERRINFO_DEFINE(PERSISTENT_KEY_PDU_TOO_MANY_CACHE_KEYS, CAT_PROTOCOL), |
563 | | ERRINFO_DEFINE(INPUT_PDU_BAD_LENGTH, CAT_PROTOCOL), |
564 | | ERRINFO_DEFINE(BITMAP_CACHE_ERROR_PDU_BAD_LENGTH, CAT_PROTOCOL), |
565 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT, CAT_PROTOCOL), |
566 | | ERRINFO_DEFINE(VCHANNEL_DATA_TOO_SHORT, CAT_PROTOCOL), |
567 | | ERRINFO_DEFINE(SHARE_DATA_TOO_SHORT, CAT_PROTOCOL), |
568 | | ERRINFO_DEFINE(BAD_SUPPRESS_OUTPUT_PDU, CAT_PROTOCOL), |
569 | | ERRINFO_DEFINE(CONFIRM_ACTIVE_PDU_TOO_SHORT, CAT_PROTOCOL), |
570 | | ERRINFO_DEFINE(CAPABILITY_SET_TOO_SMALL, CAT_PROTOCOL), |
571 | | ERRINFO_DEFINE(CAPABILITY_SET_TOO_LARGE, CAT_PROTOCOL), |
572 | | ERRINFO_DEFINE(NO_CURSOR_CACHE, CAT_PROTOCOL), ERRINFO_DEFINE(BAD_CAPABILITIES, CAT_PROTOCOL), |
573 | | ERRINFO_DEFINE(VIRTUAL_CHANNEL_DECOMPRESSION, CAT_PROTOCOL), |
574 | | ERRINFO_DEFINE(INVALID_VC_COMPRESSION_TYPE, CAT_PROTOCOL), |
575 | | ERRINFO_DEFINE(INVALID_CHANNEL_ID, CAT_PROTOCOL), |
576 | | ERRINFO_DEFINE(VCHANNELS_TOO_MANY, CAT_PROTOCOL), |
577 | | ERRINFO_DEFINE(REMOTEAPP_NOT_ENABLED, CAT_ADMIN), |
578 | | ERRINFO_DEFINE(CACHE_CAP_NOT_SET, CAT_PROTOCOL), |
579 | | ERRINFO_DEFINE(BITMAP_CACHE_ERROR_PDU_BAD_LENGTH2, CAT_PROTOCOL), |
580 | | ERRINFO_DEFINE(OFFSCREEN_CACHE_ERROR_PDU_BAD_LENGTH, CAT_PROTOCOL), |
581 | | ERRINFO_DEFINE(DRAWNINEGRID_CACHE_ERROR_PDU_BAD_LENGTH, CAT_PROTOCOL), |
582 | | ERRINFO_DEFINE(GDIPLUS_PDU_BAD_LENGTH, CAT_PROTOCOL), |
583 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT2, CAT_PROTOCOL), |
584 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT3, CAT_PROTOCOL), |
585 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT4, CAT_PROTOCOL), |
586 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT5, CAT_PROTOCOL), |
587 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT6, CAT_PROTOCOL), |
588 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT7, CAT_PROTOCOL), |
589 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT8, CAT_PROTOCOL), |
590 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT9, CAT_PROTOCOL), |
591 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT10, CAT_PROTOCOL), |
592 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT11, CAT_PROTOCOL), |
593 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT12, CAT_PROTOCOL), |
594 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT13, CAT_PROTOCOL), |
595 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT14, CAT_PROTOCOL), |
596 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT15, CAT_PROTOCOL), |
597 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT16, CAT_PROTOCOL), |
598 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT17, CAT_PROTOCOL), |
599 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT18, CAT_PROTOCOL), |
600 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT19, CAT_PROTOCOL), |
601 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT20, CAT_PROTOCOL), |
602 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT21, CAT_PROTOCOL), |
603 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT22, CAT_PROTOCOL), |
604 | | ERRINFO_DEFINE(SECURITY_DATA_TOO_SHORT23, CAT_PROTOCOL), |
605 | | ERRINFO_DEFINE(BAD_MONITOR_DATA, CAT_PROTOCOL), |
606 | | ERRINFO_DEFINE(VC_DECOMPRESSED_REASSEMBLE_FAILED, CAT_PROTOCOL), |
607 | | ERRINFO_DEFINE(VC_DATA_TOO_LONG, CAT_PROTOCOL), |
608 | | ERRINFO_DEFINE(BAD_FRAME_ACK_DATA, CAT_PROTOCOL), |
609 | | ERRINFO_DEFINE(GRAPHICS_MODE_NOT_SUPPORTED, CAT_SERVER), |
610 | | ERRINFO_DEFINE(GRAPHICS_SUBSYSTEM_RESET_FAILED, CAT_SERVER), |
611 | | ERRINFO_DEFINE(GRAPHICS_SUBSYSTEM_FAILED, CAT_SERVER), |
612 | | ERRINFO_DEFINE(TIMEZONE_KEY_NAME_LENGTH_TOO_SHORT, CAT_PROTOCOL), |
613 | | ERRINFO_DEFINE(TIMEZONE_KEY_NAME_LENGTH_TOO_LONG, CAT_PROTOCOL), |
614 | | ERRINFO_DEFINE(DYNAMIC_DST_DISABLED_FIELD_MISSING, CAT_PROTOCOL), |
615 | | ERRINFO_DEFINE(VC_DECODING_ERROR, CAT_PROTOCOL), |
616 | | ERRINFO_DEFINE(VIRTUALDESKTOPTOOLARGE, CAT_SERVER), |
617 | | ERRINFO_DEFINE(MONITORGEOMETRYVALIDATIONFAILED, CAT_PROTOCOL), |
618 | | ERRINFO_DEFINE(INVALIDMONITORCOUNT, CAT_PROTOCOL), |
619 | | ERRINFO_DEFINE(UPDATE_SESSION_KEY_FAILED, CAT_PROTOCOL), |
620 | | ERRINFO_DEFINE(DECRYPT_FAILED, CAT_PROTOCOL), ERRINFO_DEFINE(ENCRYPT_FAILED, CAT_PROTOCOL), |
621 | | ERRINFO_DEFINE(ENCRYPTION_PACKAGE_MISMATCH, CAT_PROTOCOL), |
622 | | ERRINFO_DEFINE(DECRYPT_FAILED2, CAT_PROTOCOL), ERRINFO_DEFINE(PEER_DISCONNECTED, CAT_USE), |
623 | | |
624 | | ERRINFO_DEFINE(NONE, CAT_NONE) |
625 | | }; |
626 | | |
627 | | const char* freerdp_get_error_info_string(UINT32 code) |
628 | 0 | { |
629 | 0 | const ERRINFO* errInfo = NULL; |
630 | 0 | errInfo = &ERRINFO_CODES[0]; |
631 | |
|
632 | 0 | while (errInfo->code != ERRINFO_NONE) |
633 | 0 | { |
634 | 0 | if (code == errInfo->code) |
635 | 0 | { |
636 | 0 | return errInfo->info; |
637 | 0 | } |
638 | | |
639 | 0 | errInfo++; |
640 | 0 | } |
641 | | |
642 | 0 | return "Unknown error."; |
643 | 0 | } |
644 | | |
645 | | const char* freerdp_get_error_info_category(UINT32 code) |
646 | 0 | { |
647 | 0 | const ERRINFO* errInfo = NULL; |
648 | 0 | errInfo = &ERRINFO_CODES[0]; |
649 | |
|
650 | 0 | while (errInfo->code != ERRINFO_NONE) |
651 | 0 | { |
652 | 0 | if (code == errInfo->code) |
653 | 0 | { |
654 | 0 | return errInfo->category; |
655 | 0 | } |
656 | | |
657 | 0 | errInfo++; |
658 | 0 | } |
659 | | |
660 | 0 | return "ERRINFO_UNKNOWN"; |
661 | 0 | } |
662 | | |
663 | | const char* freerdp_get_error_info_name(UINT32 code) |
664 | 599 | { |
665 | 599 | const ERRINFO* errInfo = NULL; |
666 | 599 | errInfo = &ERRINFO_CODES[0]; |
667 | | |
668 | 6.23k | while (errInfo->code != ERRINFO_NONE) |
669 | 6.19k | { |
670 | 6.19k | if (code == errInfo->code) |
671 | 560 | { |
672 | 560 | return errInfo->name; |
673 | 560 | } |
674 | | |
675 | 5.63k | errInfo++; |
676 | 5.63k | } |
677 | | |
678 | 39 | return "ERRINFO_UNKNOWN"; |
679 | 599 | } |
680 | | |
681 | | void rdp_print_errinfo(UINT32 code) |
682 | 776 | { |
683 | 776 | const ERRINFO* errInfo = NULL; |
684 | 776 | errInfo = &ERRINFO_CODES[0]; |
685 | | |
686 | 30.1k | while (errInfo->code != ERRINFO_NONE) |
687 | 29.9k | { |
688 | 29.9k | if (code == errInfo->code) |
689 | 536 | { |
690 | 536 | WLog_INFO(TAG, "%s (0x%08" PRIX32 "):%s", errInfo->name, code, errInfo->info); |
691 | 536 | return; |
692 | 536 | } |
693 | | |
694 | 29.4k | errInfo++; |
695 | 29.4k | } |
696 | | |
697 | 240 | WLog_ERR(TAG, "ERRINFO_UNKNOWN 0x%08" PRIX32 ": Unknown error.", code); |
698 | 240 | } |