Import and merge Wine-20041201
[reactos.git] / reactos / lib / 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22 #ifndef __WINE_RPC_DEFS_H
23 #define __WINE_RPC_DEFS_H
24
25 /* info from http://www.microsoft.com/msj/0398/dcomtextfigs.htm */
26
27 typedef struct
28 {
29 unsigned char rpc_ver; /* RPC major version (5) */
30 unsigned char rpc_ver_minor; /* RPC minor version (0) */
31 unsigned char ptype; /* Packet type (PKT_*) */
32 unsigned char flags;
33 unsigned char drep[4]; /* Data representation */
34 unsigned short frag_len; /* Data size in bytes including header and tail. */
35 unsigned short auth_len; /* Authentication length */
36 unsigned long call_id; /* Call identifier. */
37 } RpcPktCommonHdr;
38
39 typedef struct
40 {
41 RpcPktCommonHdr common;
42 unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */
43 unsigned short context_id; /* Presentation context identifier */
44 unsigned short opnum;
45 } RpcPktRequestHdr;
46
47 typedef struct
48 {
49 RpcPktCommonHdr common;
50 unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */
51 unsigned short context_id; /* Presentation context identifier */
52 unsigned char cancel_count;
53 unsigned char reserved;
54 } RpcPktResponseHdr;
55
56 typedef struct
57 {
58 RpcPktCommonHdr common;
59 unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */
60 unsigned short context_id; /* Presentation context identifier */
61 unsigned char alert_count; /* Pending alert count */
62 unsigned char padding[3]; /* Force alignment! */
63 unsigned long status; /* Runtime fault code (RPC_STATUS) */
64 unsigned long reserved;
65 } RpcPktFaultHdr;
66
67 typedef struct
68 {
69 RpcPktCommonHdr common;
70 unsigned short max_tsize; /* Maximum transmission fragment size */
71 unsigned short max_rsize; /* Maximum receive fragment size */
72 unsigned long assoc_gid; /* Associated group id */
73 unsigned char num_elements; /* Number of elements */
74 unsigned char padding[3]; /* Force alignment! */
75 unsigned short context_id; /* Presentation context identifier */
76 unsigned char num_syntaxes; /* Number of syntaxes */
77 RPC_SYNTAX_IDENTIFIER abstract;
78 RPC_SYNTAX_IDENTIFIER transfer;
79 } RpcPktBindHdr;
80
81 #include "pshpack1.h"
82 typedef struct
83 {
84 unsigned short length; /* Length of the string including null terminator */
85 char string[1]; /* String data in single byte, null terminated form */
86 } RpcAddressString;
87 #include "poppack.h"
88
89 typedef struct
90 {
91 unsigned char padding1[2]; /* Force alignment! */
92 unsigned char num_results; /* Number of results */
93 unsigned char padding2[3]; /* Force alignment! */
94 struct {
95 unsigned short result;
96 unsigned short reason;
97 } results[1];
98 } RpcResults;
99
100 typedef struct
101 {
102 RpcPktCommonHdr common;
103 unsigned short max_tsize; /* Maximum transmission fragment size */
104 unsigned short max_rsize; /* Maximum receive fragment size */
105 unsigned long assoc_gid; /* Associated group id */
106 /*
107 * Following this header are these fields:
108 * RpcAddressString server_address;
109 * RpcResults results;
110 * RPC_SYNTAX_IDENTIFIER transfer;
111 */
112 } RpcPktBindAckHdr;
113
114 typedef struct
115 {
116 RpcPktCommonHdr common;
117 unsigned short reject_reason;
118 unsigned char protocols_count;
119 struct {
120 unsigned char rpc_ver;
121 unsigned char rpc_ver_minor;
122 } protocols[1];
123 } RpcPktBindNAckHdr;
124
125 /* Union representing all possible packet headers */
126 typedef union
127 {
128 RpcPktCommonHdr common;
129 RpcPktRequestHdr request;
130 RpcPktResponseHdr response;
131 RpcPktFaultHdr fault;
132 RpcPktBindHdr bind;
133 RpcPktBindAckHdr bind_ack;
134 RpcPktBindNAckHdr bind_nack;
135 } RpcPktHdr;
136
137 #define RPC_VER_MAJOR 5
138 #define RPC_VER_MINOR 0
139
140 #define RPC_FLG_FIRST 1
141 #define RPC_FLG_LAST 2
142 #define RPC_FLG_OBJECT_UUID 0x80
143
144 #define RPC_MIN_PACKET_SIZE 0x1000
145 #define RPC_MAX_PACKET_SIZE 0x16D0
146
147 #define PKT_REQUEST 0
148 #define PKT_PING 1
149 #define PKT_RESPONSE 2
150 #define PKT_FAULT 3
151 #define PKT_WORKING 4
152 #define PKT_NOCALL 5
153 #define PKT_REJECT 6
154 #define PKT_ACK 7
155 #define PKT_CL_CANCEL 8
156 #define PKT_FACK 9
157 #define PKT_CANCEL_ACK 10
158 #define PKT_BIND 11
159 #define PKT_BIND_ACK 12
160 #define PKT_BIND_NACK 13
161 #define PKT_ALTER_CONTEXT 14
162 #define PKT_ALTER_CONTEXT_RESP 15
163 #define PKT_SHUTDOWN 17
164 #define PKT_CO_CANCEL 18
165 #define PKT_ORPHANED 19
166
167 #define RESULT_ACCEPT 0
168
169 #define NO_REASON 0
170
171 #define NCADG_IP_UDP 0x08
172 #define NCACN_IP_TCP 0x07
173 #define NCADG_IPX 0x0E
174 #define NCACN_SPX 0x0C
175 #define NCACN_NB_NB 0x12
176 #define NCACN_NB_IPX 0x0D
177 #define NCACN_DNET_NSP 0x04
178 #define NCACN_HTTP 0x1F
179
180 /* FreeDCE: TWR_C_FLR_PROT_ID_IP */
181 #define TWR_IP 0x09
182
183 #endif /* __WINE_RPC_DEFS_H */