[CLT2012]
[reactos.git] / dll / win32 / rpcrt4 / rpc_defs.h
1 /*
2 * RPC definitions
3 *
4 * Copyright 2001-2002 Ove Kåven, TransGaming Technologies
5 * Copyright 2004 Filip Navara
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22 #ifndef __WINE_RPC_DEFS_H
23 #define __WINE_RPC_DEFS_H
24
25 #include "pshpack1.h"
26 typedef struct
27 {
28 unsigned char rpc_ver; /* RPC major version (5) */
29 unsigned char rpc_ver_minor; /* RPC minor version (0) */
30 unsigned char ptype; /* Packet type (PKT_*) */
31 unsigned char flags;
32 unsigned char drep[4]; /* Data representation */
33 unsigned short frag_len; /* Data size in bytes including header and tail. */
34 unsigned short auth_len; /* Authentication length */
35 unsigned int call_id; /* Call identifier. */
36 } RpcPktCommonHdr;
37
38 typedef struct
39 {
40 RpcPktCommonHdr common;
41 unsigned int alloc_hint; /* Data size in bytes excluding header and tail. */
42 unsigned short context_id; /* Presentation context identifier */
43 unsigned short opnum;
44 } RpcPktRequestHdr;
45
46 typedef struct
47 {
48 RpcPktCommonHdr common;
49 unsigned int alloc_hint; /* Data size in bytes excluding header and tail. */
50 unsigned short context_id; /* Presentation context identifier */
51 unsigned char cancel_count;
52 unsigned char reserved;
53 } RpcPktResponseHdr;
54
55 typedef struct
56 {
57 RpcPktCommonHdr common;
58 unsigned int alloc_hint; /* Data size in bytes excluding header and tail. */
59 unsigned short context_id; /* Presentation context identifier */
60 unsigned char cancel_count; /* Received cancel count */
61 unsigned char reserved; /* Force alignment! */
62 unsigned int status; /* Runtime fault code (RPC_STATUS) */
63 unsigned int reserved2;
64 } RpcPktFaultHdr;
65
66 typedef struct
67 {
68 unsigned short context_id; /* Presentation context identifier */
69 unsigned char num_syntaxes; /* Number of syntaxes */
70 unsigned char reserved; /* For alignment */
71 RPC_SYNTAX_IDENTIFIER abstract_syntax;
72 RPC_SYNTAX_IDENTIFIER transfer_syntaxes[ANYSIZE_ARRAY]; /* size_is(num_syntaxes) */
73 } RpcContextElement;
74
75 typedef struct
76 {
77 RpcPktCommonHdr common;
78 unsigned short max_tsize; /* Maximum transmission fragment size */
79 unsigned short max_rsize; /* Maximum receive fragment size */
80 unsigned int assoc_gid; /* Associated group id */
81 unsigned char num_elements; /* Number of elements */
82 unsigned char padding[3]; /* Force alignment! */
83 /*
84 * Following this header are these fields:
85 * RpcContextElement context_elements[num_elements]
86 */
87 } RpcPktBindHdr;
88
89 typedef struct
90 {
91 unsigned short length; /* Length of the string including null terminator */
92 char string[ANYSIZE_ARRAY]; /* String data in single byte, null terminated form */
93 } RpcAddressString;
94
95 typedef struct
96 {
97 unsigned short result;
98 unsigned short reason;
99 RPC_SYNTAX_IDENTIFIER transfer_syntax;
100 } RpcResult;
101
102 typedef struct
103 {
104 unsigned char num_results; /* Number of results */
105 unsigned char reserved[3]; /* Force alignment! */
106 RpcResult results[ANYSIZE_ARRAY]; /* size_is(num_results) */
107 } RpcResultList;
108
109 typedef struct
110 {
111 RpcPktCommonHdr common;
112 unsigned short max_tsize; /* Maximum transmission fragment size */
113 unsigned short max_rsize; /* Maximum receive fragment size */
114 unsigned int assoc_gid; /* Associated group id */
115 /*
116 * Following this header are these fields:
117 * RpcAddressString server_address;
118 * [0 - 3 bytes of padding so that results is 4-byte aligned]
119 * RpcResultList results;
120 */
121 } RpcPktBindAckHdr;
122
123 typedef struct
124 {
125 RpcPktCommonHdr common;
126 unsigned short reject_reason;
127 unsigned char protocols_count;
128 struct {
129 unsigned char rpc_ver;
130 unsigned char rpc_ver_minor;
131 } protocols[ANYSIZE_ARRAY];
132 } RpcPktBindNAckHdr;
133
134 /* undocumented packet sent during RPC over HTTP */
135 typedef struct
136 {
137 RpcPktCommonHdr common;
138 unsigned short flags;
139 unsigned short num_data_items;
140 } RpcPktHttpHdr;
141
142 /* AUTH3 packet */
143 typedef struct
144 {
145 RpcPktCommonHdr common;
146 unsigned int pad; /* ignored */
147 } RpcPktAuth3Hdr;
148
149 /* Union representing all possible packet headers */
150 typedef union
151 {
152 RpcPktCommonHdr common;
153 RpcPktRequestHdr request;
154 RpcPktResponseHdr response;
155 RpcPktFaultHdr fault;
156 RpcPktBindHdr bind;
157 RpcPktBindAckHdr bind_ack;
158 RpcPktBindNAckHdr bind_nack;
159 RpcPktHttpHdr http;
160 RpcPktAuth3Hdr auth3;
161 } RpcPktHdr;
162
163 typedef struct
164 {
165 unsigned char auth_type; /* authentication scheme in use */
166 unsigned char auth_level; /* RPC_C_AUTHN_LEVEL* */
167 unsigned char auth_pad_length; /* length of padding to restore n % 4 alignment */
168 unsigned char auth_reserved; /* reserved, must be zero */
169 unsigned int auth_context_id; /* unique value for the authenticated connection */
170 } RpcAuthVerifier;
171 #include "poppack.h"
172
173 #define RPC_AUTH_VERIFIER_LEN(common_hdr) \
174 ((common_hdr)->auth_len ? (common_hdr)->auth_len + sizeof(RpcAuthVerifier) : 0)
175
176 #define RPC_VER_MAJOR 5
177 #define RPC_VER_MINOR 0
178
179 #define RPC_FLG_FIRST 1
180 #define RPC_FLG_LAST 2
181 #define RPC_FLG_OBJECT_UUID 0x80
182
183 #define RPC_MIN_PACKET_SIZE 0x1000
184 #define RPC_MAX_PACKET_SIZE 0x16D0
185
186 enum rpc_packet_type
187 {
188 PKT_REQUEST = 0,
189 PKT_PING = 1,
190 PKT_RESPONSE = 2,
191 PKT_FAULT = 3,
192 PKT_WORKING = 4,
193 PKT_NOCALL = 5,
194 PKT_REJECT = 6,
195 PKT_ACK = 7,
196 PKT_CL_CANCEL = 8,
197 PKT_FACK = 9,
198 PKT_CANCEL_ACK = 10,
199 PKT_BIND = 11,
200 PKT_BIND_ACK = 12,
201 PKT_BIND_NACK = 13,
202 PKT_ALTER_CONTEXT = 14,
203 PKT_ALTER_CONTEXT_RESP = 15,
204 PKT_AUTH3 = 16,
205 PKT_SHUTDOWN = 17,
206 PKT_CO_CANCEL = 18,
207 PKT_ORPHANED = 19,
208 PKT_HTTP = 20,
209 };
210
211 #define RESULT_ACCEPT 0
212 #define RESULT_USER_REJECTION 1
213 #define RESULT_PROVIDER_REJECTION 2
214
215 #define REASON_NONE 0
216 #define REASON_ABSTRACT_SYNTAX_NOT_SUPPORTED 1
217 #define REASON_TRANSFER_SYNTAXES_NOT_SUPPORTED 2
218 #define REASON_LOCAL_LIMIT_EXCEEDED 3
219
220 #define REJECT_REASON_NOT_SPECIFIED 0
221 #define REJECT_TEMPORARY_CONGESTION 1
222 #define REJECT_LOCAL_LIMIT_EXCEEDED 2
223 #define REJECT_CALLED_PADDR_UNKNOWN 3 /* not used */
224 #define REJECT_PROTOCOL_VERSION_NOT_SUPPORTED 4
225 #define REJECT_DEFAULT_CONTEXT_NOT_SUPPORTED 5 /* not used */
226 #define REJECT_USER_DATA_NOT_READABLE 6 /* not used */
227 #define REJECT_NO_PSAP_AVAILABLE 7 /* not used */
228 #define REJECT_UNKNOWN_AUTHN_SERVICE 8
229 #define REJECT_INVALID_CHECKSUM 9
230
231 #define NCADG_IP_UDP 0x08
232 #define NCACN_IP_TCP 0x07
233 #define NCADG_IPX 0x0E
234 #define NCACN_SPX 0x0C
235 #define NCACN_NB_NB 0x12
236 #define NCACN_NB_IPX 0x0D
237 #define NCACN_DNET_NSP 0x04
238 #define NCACN_HTTP 0x1F
239
240 /* FreeDCE: TWR_C_FLR_PROT_ID_IP */
241 #define TWR_IP 0x09
242
243 #endif /* __WINE_RPC_DEFS_H */