~ubuntu-branches/ubuntu/vivid/freerdp/vivid

« back to all changes in this revision

Viewing changes to libfreerdp/core/gateway/rpc_fault.c

  • Committer: Package Import Robot
  • Author(s): Iain Lane
  • Date: 2014-11-11 12:20:50 UTC
  • mfrom: (1.2.5)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: package-import@ubuntu.com-20141111122050-7z628f4ab38qxad5
Tags: upstream-1.1.0~git20140921.1.440916e+dfsg1
ImportĀ upstreamĀ versionĀ 1.1.0~git20140921.1.440916e+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * FreeRDP: A Remote Desktop Protocol Implementation
 
3
 * RPC Fault Handling
 
4
 *
 
5
 * Copyright 2012 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
#ifdef HAVE_CONFIG_H
 
21
#include "config.h"
 
22
#endif
 
23
 
 
24
#include "rpc_fault.h"
 
25
 
 
26
extern const RPC_FAULT_CODE RPC_TSG_FAULT_CODES[];
 
27
 
 
28
const RPC_FAULT_CODE RPC_FAULT_CODES[] =
 
29
{
 
30
        DEFINE_RPC_FAULT_CODE(nca_s_fault_object_not_found)
 
31
        DEFINE_RPC_FAULT_CODE(nca_s_fault_cancel)
 
32
        DEFINE_RPC_FAULT_CODE(nca_s_fault_addr_error)
 
33
        DEFINE_RPC_FAULT_CODE(nca_s_fault_context_mismatch)
 
34
        DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_div_zero)
 
35
        DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_error)
 
36
        DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_overflow)
 
37
        DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_underflow)
 
38
        DEFINE_RPC_FAULT_CODE(nca_s_fault_ill_inst)
 
39
        DEFINE_RPC_FAULT_CODE(nca_s_fault_int_div_by_zero)
 
40
        DEFINE_RPC_FAULT_CODE(nca_s_fault_int_overflow)
 
41
        DEFINE_RPC_FAULT_CODE(nca_s_fault_invalid_bound)
 
42
        DEFINE_RPC_FAULT_CODE(nca_s_fault_invalid_tag)
 
43
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_closed)
 
44
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_comm_error)
 
45
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_discipline)
 
46
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_empty)
 
47
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_memory)
 
48
        DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_order)
 
49
        DEFINE_RPC_FAULT_CODE(nca_s_fault_remote_no_memory)
 
50
        DEFINE_RPC_FAULT_CODE(nca_s_fault_user_defined)
 
51
        DEFINE_RPC_FAULT_CODE(nca_s_fault_tx_open_failed)
 
52
        DEFINE_RPC_FAULT_CODE(nca_s_fault_codeset_conv_error)
 
53
        DEFINE_RPC_FAULT_CODE(nca_s_fault_no_client_stub)
 
54
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_STRING_BINDING)
 
55
        DEFINE_RPC_FAULT_CODE(RPC_S_WRONG_KIND_OF_BINDING)
 
56
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_BINDING)
 
57
        DEFINE_RPC_FAULT_CODE(RPC_S_PROTSEQ_NOT_SUPPORTED)
 
58
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_RPC_PROTSEQ)
 
59
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_STRING_UUID)
 
60
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_ENDPOINT_FORMAT)
 
61
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NET_ADDR)
 
62
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_ENDPOINT_FOUND)
 
63
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_TIMEOUT)
 
64
        DEFINE_RPC_FAULT_CODE(RPC_S_OBJECT_NOT_FOUND)
 
65
        DEFINE_RPC_FAULT_CODE(RPC_S_ALREADY_REGISTERED)
 
66
        DEFINE_RPC_FAULT_CODE(RPC_S_TYPE_ALREADY_REGISTERED)
 
67
        DEFINE_RPC_FAULT_CODE(RPC_S_ALREADY_LISTENING)
 
68
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_PROTSEQS_REGISTERED)
 
69
        DEFINE_RPC_FAULT_CODE(RPC_S_NOT_LISTENING)
 
70
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_MGR_TYPE)
 
71
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_IF)
 
72
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_BINDINGS)
 
73
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_PROTSEQS)
 
74
        DEFINE_RPC_FAULT_CODE(RPC_S_CANT_CREATE_ENDPOINT)
 
75
        DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_RESOURCES)
 
76
        DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_UNAVAILABLE)
 
77
        DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_TOO_BUSY)
 
78
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NETWORK_OPTIONS)
 
79
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_CALL_ACTIVE)
 
80
        DEFINE_RPC_FAULT_CODE(RPC_S_CALL_FAILED)
 
81
        DEFINE_RPC_FAULT_CODE(RPC_S_CALL_FAILED_DNE)
 
82
        DEFINE_RPC_FAULT_CODE(RPC_S_PROTOCOL_ERROR)
 
83
        DEFINE_RPC_FAULT_CODE(RPC_S_PROXY_ACCESS_DENIED)
 
84
        DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_TRANS_SYN)
 
85
        DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_TYPE)
 
86
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_TAG)
 
87
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_BOUND)
 
88
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_ENTRY_NAME)
 
89
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NAME_SYNTAX)
 
90
        DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_NAME_SYNTAX)
 
91
        DEFINE_RPC_FAULT_CODE(RPC_S_UUID_NO_ADDRESS)
 
92
        DEFINE_RPC_FAULT_CODE(RPC_S_DUPLICATE_ENDPOINT)
 
93
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_TYPE)
 
94
        DEFINE_RPC_FAULT_CODE(RPC_S_MAX_CALLS_TOO_SMALL)
 
95
        DEFINE_RPC_FAULT_CODE(RPC_S_STRING_TOO_LONG)
 
96
        DEFINE_RPC_FAULT_CODE(RPC_S_PROTSEQ_NOT_FOUND)
 
97
        DEFINE_RPC_FAULT_CODE(RPC_S_PROCNUM_OUT_OF_RANGE)
 
98
        DEFINE_RPC_FAULT_CODE(RPC_S_BINDING_HAS_NO_AUTH)
 
99
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_SERVICE)
 
100
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_LEVEL)
 
101
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_AUTH_IDENTITY)
 
102
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHZ_SERVICE)
 
103
        DEFINE_RPC_FAULT_CODE(EPT_S_INVALID_ENTRY)
 
104
        DEFINE_RPC_FAULT_CODE(EPT_S_CANT_PERFORM_OP)
 
105
        DEFINE_RPC_FAULT_CODE(EPT_S_NOT_REGISTERED)
 
106
        DEFINE_RPC_FAULT_CODE(RPC_S_NOTHING_TO_EXPORT)
 
107
        DEFINE_RPC_FAULT_CODE(RPC_S_INCOMPLETE_NAME)
 
108
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_VERS_OPTION)
 
109
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_MORE_MEMBERS)
 
110
        DEFINE_RPC_FAULT_CODE(RPC_S_NOT_ALL_OBJS_UNEXPORTED)
 
111
        DEFINE_RPC_FAULT_CODE(RPC_S_INTERFACE_NOT_FOUND)
 
112
        DEFINE_RPC_FAULT_CODE(RPC_S_ENTRY_ALREADY_EXISTS)
 
113
        DEFINE_RPC_FAULT_CODE(RPC_S_ENTRY_NOT_FOUND)
 
114
        DEFINE_RPC_FAULT_CODE(RPC_S_NAME_SERVICE_UNAVAILABLE)
 
115
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NAF_ID)
 
116
        DEFINE_RPC_FAULT_CODE(RPC_S_CANNOT_SUPPORT)
 
117
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_CONTEXT_AVAILABLE)
 
118
        DEFINE_RPC_FAULT_CODE(RPC_S_INTERNAL_ERROR)
 
119
        DEFINE_RPC_FAULT_CODE(RPC_S_ZERO_DIVIDE)
 
120
        DEFINE_RPC_FAULT_CODE(RPC_S_ADDRESS_ERROR)
 
121
        DEFINE_RPC_FAULT_CODE(RPC_S_FP_DIV_ZERO)
 
122
        DEFINE_RPC_FAULT_CODE(RPC_S_FP_UNDERFLOW)
 
123
        DEFINE_RPC_FAULT_CODE(RPC_S_FP_OVERFLOW)
 
124
        DEFINE_RPC_FAULT_CODE(RPC_X_NO_MORE_ENTRIES)
 
125
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_CHAR_TRANS_OPEN_FAIL)
 
126
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_CHAR_TRANS_SHORT_FILE)
 
127
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_IN_NULL_CONTEXT)
 
128
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_CONTEXT_DAMAGED)
 
129
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_HANDLES_MISMATCH)
 
130
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_CANNOT_GET_CALL_HANDLE)
 
131
        DEFINE_RPC_FAULT_CODE(RPC_X_NULL_REF_POINTER)
 
132
        DEFINE_RPC_FAULT_CODE(RPC_X_ENUM_VALUE_OUT_OF_RANGE)
 
133
        DEFINE_RPC_FAULT_CODE(RPC_X_BYTE_COUNT_TOO_SMALL)
 
134
        DEFINE_RPC_FAULT_CODE(RPC_X_BAD_STUB_DATA)
 
135
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_INTERFACES)
 
136
        DEFINE_RPC_FAULT_CODE(RPC_S_CALL_CANCELLED)
 
137
        DEFINE_RPC_FAULT_CODE(RPC_S_BINDING_INCOMPLETE)
 
138
        DEFINE_RPC_FAULT_CODE(RPC_S_COMM_FAILURE)
 
139
        DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_AUTHN_LEVEL)
 
140
        DEFINE_RPC_FAULT_CODE(RPC_S_NO_PRINC_NAME)
 
141
        DEFINE_RPC_FAULT_CODE(RPC_S_NOT_RPC_ERROR)
 
142
        DEFINE_RPC_FAULT_CODE(RPC_S_UUID_LOCAL_ONLY)
 
143
        DEFINE_RPC_FAULT_CODE(RPC_S_SEC_PKG_ERROR)
 
144
        DEFINE_RPC_FAULT_CODE(RPC_S_NOT_CANCELLED)
 
145
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_ES_ACTION)
 
146
        DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_ES_VERSION)
 
147
        DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_STUB_VERSION)
 
148
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_PIPE_OBJECT)
 
149
        DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_PIPE_ORDER)
 
150
        DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_PIPE_VERSION)
 
151
        DEFINE_RPC_FAULT_CODE(RPC_S_COOKIE_AUTH_FAILED)
 
152
        DEFINE_RPC_FAULT_CODE(RPC_S_GROUP_MEMBER_NOT_FOUND)
 
153
        DEFINE_RPC_FAULT_CODE(EPT_S_CANT_CREATE)
 
154
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_OBJECT)
 
155
        { 0, NULL }
 
156
};
 
157
 
 
158
const RPC_FAULT_CODE RPC_TSG_FAULT_CODES[] =
 
159
{
 
160
        DEFINE_RPC_FAULT_CODE(RPC_S_OK)
 
161
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_ARG)
 
162
        DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_MEMORY)
 
163
        DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_THREADS)
 
164
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_LEVEL)
 
165
        DEFINE_RPC_FAULT_CODE(RPC_S_BUFFER_TOO_SMALL)
 
166
        DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_SECURITY_DESC)
 
167
        DEFINE_RPC_FAULT_CODE(RPC_S_ACCESS_DENIED)
 
168
        DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_OUT_OF_MEMORY)
 
169
        DEFINE_RPC_FAULT_CODE(RPC_S_ASYNC_CALL_PENDING)
 
170
        DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_PRINCIPAL)
 
171
        DEFINE_RPC_FAULT_CODE(RPC_S_TIMEOUT)
 
172
        DEFINE_RPC_FAULT_CODE(RPC_X_NO_MEMORY)
 
173
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_BOUND)
 
174
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_TAG)
 
175
        DEFINE_RPC_FAULT_CODE(RPC_X_ENUM_VALUE_TOO_LARGE)
 
176
        DEFINE_RPC_FAULT_CODE(RPC_X_SS_CONTEXT_MISMATCH)
 
177
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_BUFFER)
 
178
        DEFINE_RPC_FAULT_CODE(RPC_X_PIPE_APP_MEMORY)
 
179
        DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_PIPE_OPERATION)
 
180
        DEFINE_RPC_FAULT_CODE(ERROR_ONLY_IF_CONNECTED)
 
181
        DEFINE_RPC_FAULT_CODE(ERROR_GRACEFUL_DISCONNECT)
 
182
        DEFINE_RPC_FAULT_CODE(ERROR_OPERATION_ABORTED)
 
183
        DEFINE_RPC_FAULT_CODE(ERROR_BAD_ARGUMENTS)
 
184
        DEFINE_RPC_FAULT_CODE(E_PROXY_INTERNALERROR)
 
185
        DEFINE_RPC_FAULT_CODE(E_PROXY_RAP_ACCESSDENIED)
 
186
        DEFINE_RPC_FAULT_CODE(E_PROXY_NAP_ACCESSDENIED)
 
187
        DEFINE_RPC_FAULT_CODE(E_PROXY_TS_CONNECTFAILED)
 
188
        DEFINE_RPC_FAULT_CODE(E_PROXY_ALREADYDISCONNECTED)
 
189
        DEFINE_RPC_FAULT_CODE(E_PROXY_QUARANTINE_ACCESSDENIED)
 
190
        DEFINE_RPC_FAULT_CODE(E_PROXY_NOCERTAVAILABLE)
 
191
        DEFINE_RPC_FAULT_CODE(E_PROXY_COOKIE_BADPACKET)
 
192
        DEFINE_RPC_FAULT_CODE(E_PROXY_COOKIE_AUTHENTICATION_ACCESS_DENIED)
 
193
        DEFINE_RPC_FAULT_CODE(E_PROXY_UNSUPPORTED_AUTHENTICATION_METHOD)
 
194
        DEFINE_RPC_FAULT_CODE(E_PROXY_CAPABILITYMISMATCH)
 
195
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_NOTSUPPORTED))
 
196
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_TS_CONNECTFAILED))
 
197
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_MAXCONNECTIONSREACHED))
 
198
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_INTERNALERROR))
 
199
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_SESSIONTIMEOUT))
 
200
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_AUTHN_FAILED))
 
201
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_CAP_FAILED))
 
202
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_RAP_FAILED))
 
203
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_SDR_NOT_SUPPORTED_BY_TS))
 
204
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_NAP_FAILED))
 
205
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_CONNECTIONABORTED))
 
206
        DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_NOCERTAVAILABLE))
 
207
        DEFINE_RPC_FAULT_CODE(__HRESULT_FROM_WIN32(RPC_S_CALL_CANCELLED))
 
208
        { 0, NULL }
 
209
};
 
210
 
 
211
/**
 
212
 * [MS-RPCE] 3.1.1.5.5 Returning Win32 Error Values:
 
213
 * http://msdn.microsoft.com/en-us/library/ee442005/
 
214
 */
 
215
 
 
216
UINT32 rpc_map_status_code_to_win32_error_code(UINT32 code)
 
217
{
 
218
        switch (code)
 
219
        {
 
220
                case nca_s_comm_failure:
 
221
                        return RPC_S_COMM_FAILURE;
 
222
                case nca_s_op_rng_error:
 
223
                        return RPC_S_PROCNUM_OUT_OF_RANGE;
 
224
                case nca_s_unk_if:
 
225
                        return RPC_S_UNKNOWN_IF;
 
226
                case nca_s_wrong_boot_time:
 
227
                        return nca_s_wrong_boot_time;
 
228
                case nca_s_you_crashed:
 
229
                        return RPC_S_CALL_FAILED;
 
230
                case nca_s_proto_error:
 
231
                        return RPC_S_PROTOCOL_ERROR;
 
232
                case nca_s_out_args_too_big:
 
233
                        return RPC_S_SERVER_OUT_OF_MEMORY;
 
234
                case nca_s_server_too_busy:
 
235
                        return RPC_S_SERVER_TOO_BUSY;
 
236
                case nca_s_unsupported_type:
 
237
                        return RPC_S_UNSUPPORTED_TYPE;
 
238
                case nca_s_fault_int_div_by_zero:
 
239
                        return RPC_S_ZERO_DIVIDE;
 
240
                case nca_s_fault_addr_error:
 
241
                        return RPC_S_ADDRESS_ERROR;
 
242
                case nca_s_fault_fp_div_zero:
 
243
                        return RPC_S_FP_DIV_ZERO;
 
244
                case nca_s_fault_fp_underflow:
 
245
                        return RPC_S_FP_UNDERFLOW;
 
246
                case nca_s_fault_fp_overflow:
 
247
                        return RPC_S_FP_OVERFLOW;
 
248
                case nca_s_fault_invalid_tag:
 
249
                        return RPC_S_INVALID_TAG;
 
250
                case nca_s_fault_invalid_bound:
 
251
                        return RPC_S_INVALID_BOUND;
 
252
                case nca_s_rpc_version_mismatch:
 
253
                        return RPC_S_PROTOCOL_ERROR;
 
254
                case nca_s_unspec_reject:
 
255
                        return RPC_S_CALL_FAILED;
 
256
                case nca_s_bad_actid:
 
257
                        return RPC_S_CALL_FAILED_DNE;
 
258
                case nca_s_who_are_you_failed:
 
259
                        return RPC_S_CALL_FAILED;
 
260
                case nca_s_manager_not_entered:
 
261
                        return RPC_S_CALL_FAILED_DNE;
 
262
                case nca_s_fault_cancel:
 
263
                        return RPC_S_CALL_CANCELLED;
 
264
                case nca_s_fault_ill_inst:
 
265
                        return RPC_S_ADDRESS_ERROR;
 
266
                case nca_s_fault_fp_error:
 
267
                        return RPC_S_FP_OVERFLOW;
 
268
                case nca_s_fault_int_overflow:
 
269
                        return RPC_S_ADDRESS_ERROR;
 
270
                case nca_s_fault_unspec:
 
271
                        return RPC_S_CALL_FAILED;
 
272
                case nca_s_fault_remote_comm_failure:
 
273
                        return nca_s_fault_remote_comm_failure;
 
274
                case nca_s_fault_pipe_empty:
 
275
                        return RPC_X_PIPE_EMPTY;
 
276
                case nca_s_fault_pipe_closed:
 
277
                        return RPC_X_PIPE_CLOSED;
 
278
                case nca_s_fault_pipe_order:
 
279
                        return RPC_X_WRONG_PIPE_ORDER;
 
280
                case nca_s_fault_pipe_discipline:
 
281
                        return RPC_X_PIPE_DISCIPLINE_ERROR;
 
282
                case nca_s_fault_pipe_comm_error:
 
283
                        return RPC_S_COMM_FAILURE;
 
284
                case nca_s_fault_pipe_memory:
 
285
                        return RPC_S_OUT_OF_MEMORY;
 
286
                case nca_s_fault_context_mismatch:
 
287
                        return RPC_X_SS_CONTEXT_MISMATCH;
 
288
                case nca_s_fault_remote_no_memory:
 
289
                        return RPC_S_SERVER_OUT_OF_MEMORY;
 
290
                case nca_s_invalid_pres_context_id:
 
291
                        return RPC_S_PROTOCOL_ERROR;
 
292
                case nca_s_unsupported_authn_level:
 
293
                        return RPC_S_UNSUPPORTED_AUTHN_LEVEL;
 
294
                case nca_s_invalid_checksum:
 
295
                        return RPC_S_CALL_FAILED_DNE;
 
296
                case nca_s_invalid_crc:
 
297
                        return RPC_S_CALL_FAILED_DNE;
 
298
                case nca_s_fault_user_defined:
 
299
                        return nca_s_fault_user_defined;
 
300
                case nca_s_fault_tx_open_failed:
 
301
                        return nca_s_fault_tx_open_failed;
 
302
                case nca_s_fault_codeset_conv_error:
 
303
                        return nca_s_fault_codeset_conv_error;
 
304
                case nca_s_fault_object_not_found:
 
305
                        return nca_s_fault_object_not_found;
 
306
                case nca_s_fault_no_client_stub:
 
307
                        return nca_s_fault_no_client_stub;
 
308
        }
 
309
 
 
310
        return code;
 
311
}
 
312
 
 
313
int rpc_recv_fault_pdu(rpcconn_hdr_t* header)
 
314
{
 
315
        int index;
 
316
        UINT32 code;
 
317
 
 
318
        fprintf(stderr, "RPC Fault PDU:\n");
 
319
 
 
320
        code = rpc_map_status_code_to_win32_error_code(header->fault.status);
 
321
 
 
322
        for (index = 0; RPC_FAULT_CODES[index].name != NULL; index++)
 
323
        {
 
324
                if (RPC_FAULT_CODES[index].code == code)
 
325
                {
 
326
                        fprintf(stderr, "status: %s (0x%08X)\n", RPC_FAULT_CODES[index].name, code);
 
327
                        return 0;
 
328
                }
 
329
        }
 
330
 
 
331
        for (index = 0; RPC_TSG_FAULT_CODES[index].name != NULL; index++)
 
332
        {
 
333
                if (RPC_TSG_FAULT_CODES[index].code == code)
 
334
                {
 
335
                        fprintf(stderr, "status: %s (0x%08X)\n", RPC_TSG_FAULT_CODES[index].name, code);
 
336
                        return 0;
 
337
                }
 
338
        }
 
339
 
 
340
        fprintf(stderr, "status: %s (0x%08X)\n", "UNKNOWN", code);
 
341
 
 
342
        return 0;
 
343
}