frstrans.idl: add definition of frstrans_InitializeFileTransferAsync()
[sfrench/samba-autobuild/.git] / librpc / idl / frstrans.idl
1 #include "idl_types.h"
2
3 import "misc.idl";
4
5 [
6   uuid("897e2e5f-93f3-4376-9c9c-fd2277495c27"),
7   version(1.0),
8   endpoint("ncacn_ip_tcp:", "ncalrpc:"),
9   helpstring("File Replication Service DFS-R"),
10   pointer_default(unique)
11 ]
12 interface frstrans
13 {
14         /*****************/
15         /* Function 0x00 */
16         WERROR frstrans_CheckConnectivity(
17                 [in] GUID replica_set_guid,
18                 [in] GUID connection_guid
19         );
20
21         /*****************/
22         /* Function 0x01 */
23         typedef [v1_enum,flag(NDR_PAHEX)] enum {
24                 FRSTRANS_PROTOCOL_VERSION_W2K3R2                = 0x00050000,
25                 FRSTRANS_PROTOCOL_VERSION_LONGHORN_SERVER       = 0x00050002
26         } frstrans_ProtocolVersion;
27
28         typedef [bitmap32bit] bitmap {
29                 FRSTRANS_TRANSPORT_SUPPORTS_RDC_SIMILARITY      = 0x00000001
30         } frstrans_TransportFlags;
31
32         WERROR frstrans_EstablishConnection(
33                 [in] GUID replica_set_guid,
34                 [in] GUID connection_guid,
35                 [in] frstrans_ProtocolVersion downstream_protocol_version,
36                 [in] frstrans_TransportFlags downstream_flags,
37                 [out,ref] frstrans_ProtocolVersion *upstream_protocol_version,
38                 [out,ref] frstrans_TransportFlags *upstream_flags
39         );
40
41         /*****************/
42         /* Function 0x02 */
43         WERROR frstrans_EstablishSession(
44                 [in] GUID connection_guid,
45                 [in] GUID content_set_guid
46         );
47
48         /*****************/
49         /* Function 0x03 */
50         typedef enum {
51                 FRSTRANS_UPDATE_REQUEST_ALL             = 0x0000,
52                 FRSTRANS_UPDATE_REQUEST_TOMBSTONES      = 0x0001,
53                 FRSTRANS_UPDATE_REQUEST_LIVE            = 0x0002
54         } frstrans_UpdateRequestType;
55
56         typedef enum {
57                 FRSTRANS_UPDATE_STATUS_DONE             = 0x0002,
58                 FRSTRANS_UPDATE_STATUS_MORE             = 0x0003
59         } frstrans_UpdateStatus;
60
61         typedef struct {
62                 GUID db_guid;
63                 hyper low;
64                 hyper high;
65         } frstrans_VersionVector;
66
67         typedef [flag(NDR_PAHEX)] struct {
68                 boolean32 present;
69                 boolean32 name_conflict;
70                 uint32 attributes;
71                 NTTIME fence;
72                 NTTIME clock;
73                 NTTIME create_time;
74                 GUID content_set_guid;
75                 uint8 sha1_hash[20];
76                 uint8 rdc_similarity[16];
77                 GUID uid_db_guid;
78                 hyper uid_version;
79                 GUID gsvn_db_guid;
80                 hyper gsvn_version;
81                 GUID parent_db_guid;
82                 hyper parent_version;
83                 [string,charset(UTF16)] uint16 name[261];
84                 uint32 flags;
85         } frstrans_Update;
86
87         WERROR frstrans_RequestUpdates(
88                 [in] GUID connection_guid,
89                 [in] GUID content_set_guid,
90                 [in,range(0,256)] uint32 credits_available,
91                 [in,range(0,1)] boolean32 hash_requested,
92                 [in,range(0,2)]
93                         frstrans_UpdateRequestType update_request_type,
94                 [in] uint32 version_vector_diff_count,
95                 [in,size_is(version_vector_diff_count)]
96                         frstrans_VersionVector *version_vector_diff,
97                 [out,ref,size_is(credits_available),length_is(*update_count)]
98                         frstrans_Update *frs_update,
99                 [out,ref] uint32 *update_count,
100                 [out,ref] frstrans_UpdateStatus *update_status,
101                 [out,ref] GUID *gvsn_db_guid,
102                 [out,ref] hyper *gvsn_version
103         );
104
105         /*****************/
106         /* Function 0x04 */
107         typedef enum {
108                 FRSTRANS_VERSION_REQUEST_NORNAL_SYNC    = 0x0000,
109                 FRSTRANS_VERSION_REQUEST_SLOW_SYNC      = 0x0001,
110                 FRSTRANS_VERSION_REQUEST_SLAVE_SYNC     = 0x0002
111         } frstrans_VersionRequestType;
112
113         typedef enum {
114                 FRSTRANS_VERSION_CHANGE_NOTIFY  = 0x0000,
115                 FRSTRANS_VERSION_CHANGE_ALL     = 0x0002
116         } frstrans_VersionChangeType;
117
118         WERROR frstrans_RequestVersionVector(
119                 [in] uint32 sequence_number,
120                 [in] GUID connection_guid,
121                 [in] GUID content_set_guid,
122                 [in,range(0,2)] frstrans_VersionRequestType request_type,
123                 [in,range(0,2)] frstrans_VersionChangeType change_type,
124                 [in] hyper vv_generation
125         );
126
127         /*****************/
128         /* Function 0x05 */
129         typedef struct {
130                 GUID machine_guid;
131                 uint32 year;
132                 uint32 month;
133                 uint32 day_of_week;
134                 uint32 day;
135                 uint32 hour;
136                 uint32 minute;
137                 uint32 second;
138                 uint32 milli_seconds;
139         } frstrans_EpoqueVector;
140
141         typedef struct {
142                 hyper vv_generation;
143                 uint32 version_vector_count;
144                 [size_is(version_vector_count)]
145                         frstrans_VersionVector *version_vector;
146                 uint32 epoque_vector_count;
147                 [size_is(epoque_vector_count)]
148                         frstrans_EpoqueVector *epoque_vector;
149         } frstrans_AsyncVersionVectorResponse;
150
151         typedef struct {
152                 uint32 sequence_number;
153                 WERROR status;
154                 frstrans_AsyncVersionVectorResponse response;
155         } frstrans_AsyncResponseContext;
156
157         WERROR frstrans_AsyncPoll(
158                 [in] GUID connection_guid,
159                 [out,ref] frstrans_AsyncResponseContext *response
160         );
161
162         /*****************/
163         /* Function 0x06 */
164         [todo] void FRSTRANS_REQUEST_RECORDS();
165
166         /*****************/
167         /* Function 0x07 */
168         [todo] void FRSTRANS_UPDATE_CANCEL();
169
170         /*****************/
171         /* Function 0x08 */
172         [todo] void FRSTRANS_RAW_GET_FILE_DATA();
173
174         /*****************/
175         /* Function 0x09 */
176         [todo] void FRSTRANS_RDC_GET_SIGNATURES();
177
178         /*****************/
179         /* Function 0x0a */
180         [todo] void FRSTRANS_RDC_PUSH_SOURCE_NEEDS();
181
182         /*****************/
183         /* Function 0x0b */
184         [todo] void FRSTRANS_RDC_GET_FILE_DATA();
185
186         /*****************/
187         /* Function 0x0c */
188         [todo] void FRSTRANS_RDC_CLOSE();
189
190         /*****************/
191         /* Function 0x0d */
192         typedef enum {
193                 FRSTRANS_STAGING_POLICY_SERVER_DEFAULTY         = 0x0000,
194                 FRSTRANS_STAGING_POLICY_STATGING_REQUIRED       = 0x0001,
195                 FRSTRANS_STAGING_POLICY_RESTATGING_REQUIRED     = 0x0002
196         } frstrans_RequestedStagingPolicy;
197
198         typedef enum {
199                 FRSTRANS_RDC_FILTER_GENERIC     = 0x0000,
200                 FRSTRANS_RDC_FILTER_MAX         = 0x0001,
201                 FRSTRANS_RDC_FILTER_POINT       = 0x0002,
202                 FRSTRANS_RDC_MAX_ALGORITHM      = 0x0003
203         } frstrans_RdcChunckerAlgorithm;
204
205         typedef struct {
206                 frstrans_RdcChunckerAlgorithm chunker_type;
207                 uint8 chunker_parameters[64];
208         } frstrans_RdcParameterGeneric;
209
210         typedef struct {
211                 [range(128,1024*16)] uint16 min_horizon_size;
212                 [range(2,96)] uint16 max_window_size;
213         } frstrans_RdcParameterFilterMax;
214
215         typedef struct {
216                 uint16 min_chunk_size;
217                 uint16 max_chunk_size;
218         } frstrans_RdcParameterFilterPoint;
219
220         typedef [switch_type(frstrans_RdcChunckerAlgorithm)] union {
221                 [case(FRSTRANS_RDC_FILTER_GENERIC)]
222                         frstrans_RdcParameterGeneric filter_generic;
223                 [case(FRSTRANS_RDC_FILTER_MAX)]
224                         frstrans_RdcParameterFilterMax filter_max;
225                 [case(FRSTRANS_RDC_FILTER_POINT)]
226                         frstrans_RdcParameterFilterPoint filter_point;
227         } frstrans_RdcParameterUnion;
228
229         typedef struct {
230                 frstrans_RdcChunckerAlgorithm rdc_chunker_algorithm;
231                 [switch_is(rdc_chunker_algorithm)] frstrans_RdcParameterUnion u;
232         } frstrans_RdcParameters;
233
234         typedef enum {
235                 FRSTRANS_RDC_VERSION            = 0x0001
236         } frstrans_RdcVersion;
237
238         typedef enum {
239                 FRSTRANS_RDC_VERSION_COMPATIBLE = 0x0001
240         } frstrans_RdcVersionCompatible;
241
242         typedef enum {
243                 FRSTRANS_RDC_UNCOMPRESSED       = 0x0000,
244                 FRSTRANS_RDC_XPRESS             = 0x0001
245         } frstrans_RdcCompressionAlgorithm;
246
247         typedef struct {
248                 hyper on_disk_file_size;
249                 hyper file_size_estimate;
250                 frstrans_RdcVersion rdc_version;
251                 frstrans_RdcVersionCompatible rdc_minimum_compatible_version;
252                 [range(0,8)] uint8 rdc_signature_levels;
253                 frstrans_RdcCompressionAlgorithm compression_algorithm;
254                 [size_is(rdc_signature_levels)]
255                         frstrans_RdcParameters rdc_filter_parameters[*];
256         } frstrans_RdcFileInfo;
257
258         WERROR frstrans_InitializeFileTransferAsync(
259                 [in] GUID connection_guid,
260                 [in,out,ref] frstrans_Update *frs_update,
261                 [in,range(0,1)] boolean32 rdc_desired,
262                 [in,out,ref] frstrans_RequestedStagingPolicy *staging_policy,
263                 [out,ref] policy_handle *server_context,
264                 [out,ref] frstrans_RdcFileInfo **rdc_file_info,
265                 [out,ref,size_is(buffer_size),length_is(*size_read)]
266                         uint8 *data_buffer,
267                 [in,range(0,262144)] uint32 buffer_size,
268                 [out,ref] uint32 *size_read,
269                 [out,ref] boolean32 *is_end_of_file
270         );
271
272         /*****************/
273         /* Function 0x0e */
274         [todo] void FRSTRANS_OPNUM_0E_NOT_USED_ON_THE_WIRE();
275
276         /* The following functions are new in Windows 2008 */
277
278         /*****************/
279         /* Function 0x0f */
280         [todo] void FRSTRANS_RAW_GET_FILE_DATA_ASYNC();
281
282         /*****************/
283         /* Function 0x10 */
284         [todo] void FRSTRANS_RDC_GET_FILE_DATA_ASYNC();
285 }