r6973: Merge new version of pidl into the main SAMBA_4_0 branch.
[samba.git] / source4 / librpc / idl / epmapper.idl
1 #include "idl_types.h"
2
3 /*
4   endpoint mapper interface
5   Related links:
6         http://www.opengroup.org/onlinepubs/9629399/apdxl.htm : Details on towers
7 http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: binding strings
8
9 */
10
11 [
12  uuid("e1af8308-5d1f-11c9-91a4-08002b14a0fa"), 
13  version(3.0), 
14  endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", 
15                   "ncalrpc:[EPMAPPER]"),
16  helpstring("EndPoint Mapper"),
17  pointer_default_top(unique),
18  pointer_default(unique)
19 ]
20 interface epmapper
21 {
22
23         /*
24           note that the following IDL won't work in MIDL, and in fact
25           that the full towers/floors representation of epm cannot be
26           represented in MIDL at all. I decided to represent it using
27           the extended IDL syntax in pidl to make it easier to work
28           with.
29         */
30
31         const int EPMAPPER_STATUS_NO_MORE_ENTRIES = 0x16c9a0d6;
32         const int EPMAPPER_STATUS_NO_MEMORY = 0x16C9A012;
33         const int EPMAPPER_STATUS_OK = 0;
34
35
36         /* this guid indicates NDR encoding in a protocol tower */
37         const string NDR_GUID = "8a885d04-1ceb-11c9-9fe8-08002b104860";
38         const string NDR_GUID_VERSION = 2;
39
40         typedef [enum8bit] enum {
41                 
42                 /* Level 4 and higher */
43                 EPM_PROTOCOL_DNET_NSP           = 0x04,
44                 EPM_PROTOCOL_OSI_TP4            = 0x05,
45                 EPM_PROTOCOL_OSI_CLNS           = 0x06,
46                 EPM_PROTOCOL_TCP                = 0x07,
47                 EPM_PROTOCOL_UDP                = 0x08,
48                 EPM_PROTOCOL_IP                 = 0x09,
49                 /* These 4 are protocol identifiers, always at level 3 or lower */
50                 EPM_PROTOCOL_NCADG                      = 0x0a, /* Connectionless RPC */
51                 EPM_PROTOCOL_NCACN                      = 0x0b,
52                 EPM_PROTOCOL_NCALRPC            = 0x0c, /* Local RPC */
53                 EPM_PROTOCOL_UUID                       = 0x0d,
54                 EPM_PROTOCOL_IPX                        = 0x0e,
55                 EPM_PROTOCOL_SMB                = 0x0f,
56                 EPM_PROTOCOL_PIPE               = 0x10,
57                 EPM_PROTOCOL_NETBIOS            = 0x11,
58                 EPM_PROTOCOL_NETBEUI            = 0x12,
59                 EPM_PROTOCOL_SPX                = 0x13,
60                 EPM_PROTOCOL_NB_IPX             = 0x14, /* NetBIOS over IPX */
61                 EPM_PROTOCOL_DSP                        = 0x16, /* AppleTalk Data Stream Protocol */
62                 EPM_PROTOCOL_DDP                    = 0x17, /* AppleTalk Data Datagram Protocol */
63                 EPM_PROTOCOL_APPLETALK          = 0x18, /* AppleTalk */
64                 EPM_PROTOCOL_VINES_SPP          = 0x1a, 
65                 EPM_PROTOCOL_VINES_IPC          = 0x1b, /* Inter Process Communication */
66                 EPM_PROTOCOL_STREETTALK         = 0x1c, /* Vines Streettalk */
67                 EPM_PROTOCOL_HTTP               = 0x1f,
68                 EPM_PROTOCOL_UNIX_DS            = 0x20, /* Unix domain socket */
69                 EPM_PROTOCOL_NULL                       = 0x21
70         } epm_protocol;
71
72         typedef struct {
73                 /*FIXME */
74         } epm_rhs_dnet_nsp;
75
76         typedef struct {
77                 /*FIXME*/
78         } epm_rhs_osi_tp4;
79
80         typedef struct {
81                 /*FIXME*/
82         } epm_rhs_osi_clns;
83         
84         typedef struct {
85                 uint16 port;
86         } epm_rhs_udp;
87
88         typedef struct {
89                 uint16 port;
90         } epm_rhs_tcp;
91
92         typedef struct {
93                 ipv4address ipaddr;
94         } epm_rhs_ip;
95
96         typedef struct {
97                 uint16 minor_version;
98         } epm_rhs_ncadg;
99
100         typedef struct {
101                 uint16 minor_version;
102         } epm_rhs_ncacn;
103
104         typedef struct {
105                 [flag(NDR_REMAINING)] DATA_BLOB unknown;
106         } epm_rhs_uuid;
107
108         typedef struct {
109                 /*FIXME */
110         } epm_rhs_ipx;
111
112         typedef struct {
113                 astring unc;
114         } epm_rhs_smb;
115
116         typedef struct {
117                 astring path;   
118         } epm_rhs_pipe;
119
120         typedef struct {
121                 astring name;
122         } epm_rhs_netbios;
123
124         typedef struct {
125         } epm_rhs_netbeui;
126
127         typedef struct {
128         } epm_rhs_spx;
129
130         typedef struct {
131         } epm_rhs_nb_ipx;
132
133         typedef struct {
134                 uint16 port;
135         } epm_rhs_http;
136
137         typedef struct {
138                 astring path;
139         } epm_rhs_unix_ds;
140
141         typedef struct {
142         } epm_rhs_null;
143
144         typedef struct {
145                 uint16 minor_version;
146         } epm_rhs_ncalrpc;
147
148         typedef struct {
149         } epm_rhs_appletalk;
150
151         typedef struct {
152         } epm_rhs_atalk_stream;
153
154         typedef struct {
155         } epm_rhs_atalk_datagram;
156
157         typedef struct {
158                 uint16 port;
159         } epm_rhs_vines_spp;
160
161         typedef struct {
162                 uint16 port;
163         } epm_rhs_vines_ipc;
164
165         typedef struct {
166                 astring streettalk;
167         } epm_rhs_streettalk;
168
169         typedef [flag(NDR_BIG_ENDIAN),nodiscriminant] union {
170                 [case(EPM_PROTOCOL_DNET_NSP)] epm_rhs_dnet_nsp dnet_nsp;
171                 [case(EPM_PROTOCOL_OSI_TP4)] epm_rhs_osi_tp4 osi_tp4;
172                 [case(EPM_PROTOCOL_OSI_CLNS)] epm_rhs_osi_clns osi_clns;
173                 [case(EPM_PROTOCOL_TCP)] epm_rhs_tcp tcp;
174                 [case(EPM_PROTOCOL_UDP)] epm_rhs_udp udp;
175                 [case(EPM_PROTOCOL_IP)] epm_rhs_ip ip;
176                 [case(EPM_PROTOCOL_NCADG)] epm_rhs_ncadg ncadg;
177                 [case(EPM_PROTOCOL_NCACN)] epm_rhs_ncacn ncacn;
178                 [case(EPM_PROTOCOL_NCALRPC)] epm_rhs_ncalrpc ncalrpc;
179                 [case(EPM_PROTOCOL_UUID)] epm_rhs_uuid uuid;
180                 [case(EPM_PROTOCOL_IPX)] epm_rhs_ipx ipx;
181                 [case(EPM_PROTOCOL_SMB)] epm_rhs_smb smb;
182                 [case(EPM_PROTOCOL_PIPE)] epm_rhs_pipe pipe;
183                 [case(EPM_PROTOCOL_NETBIOS)] epm_rhs_netbios netbios;
184                 [case(EPM_PROTOCOL_NETBEUI)] epm_rhs_netbeui netbeui;
185                 [case(EPM_PROTOCOL_SPX)] epm_rhs_spx spx;
186                 [case(EPM_PROTOCOL_NB_IPX)] epm_rhs_nb_ipx nb_ipx;
187                 [case(EPM_PROTOCOL_DSP)] epm_rhs_atalk_stream atalk_stream;
188                 [case(EPM_PROTOCOL_DDP)] epm_rhs_atalk_datagram atalk_datagram;
189                 [case(EPM_PROTOCOL_APPLETALK)] epm_rhs_appletalk appletalk;
190                 [case(EPM_PROTOCOL_VINES_SPP)] epm_rhs_vines_spp vines_spp;
191                 [case(EPM_PROTOCOL_VINES_IPC)] epm_rhs_vines_ipc vines_ipc;
192                 [case(EPM_PROTOCOL_STREETTALK)] epm_rhs_streettalk streettalk;
193                 [case(EPM_PROTOCOL_HTTP)] epm_rhs_http http;
194                 [case(EPM_PROTOCOL_UNIX_DS)] epm_rhs_unix_ds unix_ds;
195                 [case(EPM_PROTOCOL_NULL)] epm_rhs_null null;
196                 [default]  [flag(NDR_REMAINING)] DATA_BLOB unknown;
197         } epm_rhs;
198
199         typedef struct {
200                 epm_protocol protocol;
201                 [flag(NDR_REMAINING)] DATA_BLOB lhs_data;
202         } epm_lhs;
203
204         typedef struct {
205                 [subcontext(2)] epm_lhs lhs;
206                 [subcontext(2),switch_is(r->lhs.protocol)] epm_rhs rhs;
207         } epm_floor;
208
209         /* note that the NDR_NOALIGN flag is inherited by all nested
210            structures. All of the towers/floors stuff is
211            non-aligned. I wonder what sort of wicked substance these
212            guys were smoking?
213         */
214         typedef [gensize,flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] struct {
215                 uint16 num_floors;
216                 epm_floor floors[num_floors];
217         } epm_tower;
218
219         typedef struct {
220                 [value(ndr_size_epm_tower(&r->tower, ndr->flags))] uint32  tower_length;
221                 [subcontext(4)] epm_tower tower;
222         } epm_twr_t;
223
224         typedef struct {
225                 GUID        object;
226                 epm_twr_t   *tower;
227                 ascstr2     annotation;
228         } epm_entry_t;
229
230         typedef struct {
231                 GUID                uuid;
232                 uint16              vers_major;
233                 uint16              vers_minor;
234         } rpc_if_id_t;
235     
236         /**********************/
237         /* Function 0x0       */
238         error_status_t epm_Insert(
239                 [in]    uint32          num_ents,
240                 [in,size_is(num_ents)]  epm_entry_t         entries[],
241                 [in]    uint32    replace
242                 );
243     
244         /**********************/
245         /* Function 0x1       */
246         error_status_t epm_Delete(
247                 [in]     uint32          num_ents,
248                 [in, size_is(num_ents)]  epm_entry_t entries[]
249                 );
250     
251         /**********************/
252         /* Function 0x02      */
253         error_status_t epm_Lookup(
254                 [in]            uint32          inquiry_type,
255                 [in]            GUID            *object,
256                 [in]            rpc_if_id_t     *interface_id,
257                 [in]            uint32          vers_option,
258                 [in,out,ref]    policy_handle   *entry_handle,
259                 [in]            uint32          max_ents,
260                 [out]           uint32          num_ents,
261                 [out, length_is(num_ents), size_is(max_ents)]  epm_entry_t entries[]
262                 );
263
264
265         /**********************/
266         /* Function 0x03      */
267
268         typedef struct {
269                 epm_twr_t *twr;
270         } epm_twr_p_t;
271
272         error_status_t epm_Map(
273                 [in]            GUID            *object,
274                 [in]            epm_twr_t       *map_tower,
275                 [in,out,ref]    policy_handle   *entry_handle,
276                 [in]            uint32          max_towers,
277                 [out]           uint32          num_towers,
278                 [out, length_is(num_towers), size_is(max_towers)]  epm_twr_p_t towers[]
279                 );
280     
281
282         /**********************/
283         /* Function 0x04      */
284         error_status_t epm_LookupHandleFree(
285                 [in,out,ref]    policy_handle *entry_handle
286                 );
287     
288         /**********************/
289         /* Function 0x05      */
290         error_status_t epm_InqObject(
291                 [in,ref]    GUID        *epm_object
292                 );
293     
294
295         /**********************/
296         /* Function 0x06      */
297         error_status_t epm_MgmtDelete(
298                 [in]            uint32   object_speced,
299                 [in]            GUID     *object,
300                 [in]            epm_twr_t    *tower
301                 );
302
303         /**********************/
304         /* Function 0x07      */
305         error_status_t epm_MapAuth();
306 }