smbd: SMB3 POSIX Extensions statfs() is broken
[samba.git] / librpc / idl / frstrans.idl
index 3072ebb4e56a4cfee5b9c91ec2c43a3711569e17..ed5b105e09ac085b75122cb5f3407635b52d392b 100644 (file)
@@ -47,15 +47,117 @@ interface frstrans
 
        /*****************/
        /* Function 0x03 */
-       [todo] void FRSTRANS_REQUEST_UPDATES();
+       typedef enum {
+               FRSTRANS_UPDATE_REQUEST_ALL             = 0x0000,
+               FRSTRANS_UPDATE_REQUEST_TOMBSTONES      = 0x0001,
+               FRSTRANS_UPDATE_REQUEST_LIVE            = 0x0002
+       } frstrans_UpdateRequestType;
+
+       typedef enum {
+               FRSTRANS_UPDATE_STATUS_DONE             = 0x0002,
+               FRSTRANS_UPDATE_STATUS_MORE             = 0x0003
+       } frstrans_UpdateStatus;
+
+       typedef [public] struct {
+               GUID db_guid;
+               hyper low;
+               hyper high;
+       } frstrans_VersionVector;
+
+       typedef [flag(NDR_PAHEX)] struct {
+               boolean32 present;
+               boolean32 name_conflict;
+               uint32 attributes;
+               NTTIME fence;
+               NTTIME clock;
+               NTTIME create_time;
+               GUID content_set_guid;
+               uint8 sha1_hash[20];
+               uint8 rdc_similarity[16];
+               GUID uid_db_guid;
+               hyper uid_version;
+               GUID gsvn_db_guid;
+               hyper gsvn_version;
+               GUID parent_db_guid;
+               hyper parent_version;
+               [string,charset(UTF16)] uint16 name[261];
+               uint32 flags;
+       } frstrans_Update;
+
+       WERROR frstrans_RequestUpdates(
+               [in] GUID connection_guid,
+               [in] GUID content_set_guid,
+               [in,range(0,256)] uint32 credits_available,
+               [in,range(0,1)] boolean32 hash_requested,
+               [in,range(0,2)]
+                       frstrans_UpdateRequestType update_request_type,
+               [in] uint32 version_vector_diff_count,
+               [in,size_is(version_vector_diff_count)]
+                       frstrans_VersionVector *version_vector_diff,
+               [out,ref,size_is(credits_available),length_is(*update_count)]
+                       frstrans_Update *frs_update,
+               [out,ref] uint32 *update_count,
+               [out,ref] frstrans_UpdateStatus *update_status,
+               [out,ref] GUID *gvsn_db_guid,
+               [out,ref] hyper *gvsn_version
+       );
 
        /*****************/
        /* Function 0x04 */
-       [todo] void FRSTRANS_REQUEST_VERSION_VECTOR();
+       typedef enum {
+               FRSTRANS_VERSION_REQUEST_NORNAL_SYNC    = 0x0000,
+               FRSTRANS_VERSION_REQUEST_SLOW_SYNC      = 0x0001,
+               FRSTRANS_VERSION_REQUEST_SLAVE_SYNC     = 0x0002
+       } frstrans_VersionRequestType;
+
+       typedef enum {
+               FRSTRANS_VERSION_CHANGE_NOTIFY  = 0x0000,
+               FRSTRANS_VERSION_CHANGE_ALL     = 0x0002
+       } frstrans_VersionChangeType;
+
+       WERROR frstrans_RequestVersionVector(
+               [in] uint32 sequence_number,
+               [in] GUID connection_guid,
+               [in] GUID content_set_guid,
+               [in,range(0,2)] frstrans_VersionRequestType request_type,
+               [in,range(0,2)] frstrans_VersionChangeType change_type,
+               [in] hyper vv_generation
+       );
 
        /*****************/
        /* Function 0x05 */
-       [todo] void FRSTRANS_ASYNC_POLL();
+       typedef struct {
+               GUID machine_guid;
+               uint32 year;
+               uint32 month;
+               uint32 day_of_week;
+               uint32 day;
+               uint32 hour;
+               uint32 minute;
+               uint32 second;
+               uint32 milli_seconds;
+       } frstrans_EpoqueVector;
+
+       typedef struct {
+               hyper vv_generation;
+               uint32 version_vector_count;
+               [size_is(version_vector_count)]
+                       frstrans_VersionVector *version_vector;
+               uint32 epoque_vector_count;
+               [size_is(epoque_vector_count)]
+                       frstrans_EpoqueVector *epoque_vector;
+       } frstrans_AsyncVersionVectorResponse;
+
+       typedef struct {
+               uint32 sequence_number;
+               WERROR status;
+               frstrans_AsyncVersionVectorResponse response;
+       } frstrans_AsyncResponseContext;
+
+       WERROR frstrans_AsyncPoll(
+               [in] GUID connection_guid,
+               [out,ref] frstrans_AsyncResponseContext *response
+       );
 
        /*****************/
        /* Function 0x06 */
@@ -83,11 +185,91 @@ interface frstrans
 
        /*****************/
        /* Function 0x0c */
-       [todo] void FRSTRANS_RDC_CLOSE();
+       WERROR frstrans_RdcClose(
+               [in,out,ref] policy_handle *server_context
+               );
 
        /*****************/
        /* Function 0x0d */
-       [todo] void FRSTRANS_INITIALIZE_FILE_TRANSFER_ASYNC();
+       typedef enum {
+               FRSTRANS_STAGING_POLICY_SERVER_DEFAULTY         = 0x0000,
+               FRSTRANS_STAGING_POLICY_STATGING_REQUIRED       = 0x0001,
+               FRSTRANS_STAGING_POLICY_RESTATGING_REQUIRED     = 0x0002
+       } frstrans_RequestedStagingPolicy;
+
+       typedef enum {
+               FRSTRANS_RDC_FILTER_GENERIC     = 0x0000,
+               FRSTRANS_RDC_FILTER_MAX         = 0x0001,
+               FRSTRANS_RDC_FILTER_POINT       = 0x0002,
+               FRSTRANS_RDC_MAX_ALGORITHM      = 0x0003
+       } frstrans_RdcChunckerAlgorithm;
+
+       typedef struct {
+               frstrans_RdcChunckerAlgorithm chunker_type;
+               uint8 chunker_parameters[64];
+       } frstrans_RdcParameterGeneric;
+
+       typedef struct {
+               [range(128,1024*16)] uint16 min_horizon_size;
+               [range(2,96)] uint16 max_window_size;
+       } frstrans_RdcParameterFilterMax;
+
+       typedef struct {
+               uint16 min_chunk_size;
+               uint16 max_chunk_size;
+       } frstrans_RdcParameterFilterPoint;
+
+       typedef [switch_type(frstrans_RdcChunckerAlgorithm)] union {
+               [case(FRSTRANS_RDC_FILTER_GENERIC)]
+                       frstrans_RdcParameterGeneric filter_generic;
+               [case(FRSTRANS_RDC_FILTER_MAX)]
+                       frstrans_RdcParameterFilterMax filter_max;
+               [case(FRSTRANS_RDC_FILTER_POINT)]
+                       frstrans_RdcParameterFilterPoint filter_point;
+       } frstrans_RdcParameterUnion;
+
+       typedef struct {
+               frstrans_RdcChunckerAlgorithm rdc_chunker_algorithm;
+               [switch_is(rdc_chunker_algorithm)] frstrans_RdcParameterUnion u;
+       } frstrans_RdcParameters;
+
+       typedef enum {
+               FRSTRANS_RDC_VERSION            = 0x0001
+       } frstrans_RdcVersion;
+
+       typedef enum {
+               FRSTRANS_RDC_VERSION_COMPATIBLE = 0x0001
+       } frstrans_RdcVersionCompatible;
+
+       typedef enum {
+               FRSTRANS_RDC_UNCOMPRESSED       = 0x0000,
+               FRSTRANS_RDC_XPRESS             = 0x0001
+       } frstrans_RdcCompressionAlgorithm;
+
+       typedef struct {
+               hyper on_disk_file_size;
+               hyper file_size_estimate;
+               frstrans_RdcVersion rdc_version;
+               frstrans_RdcVersionCompatible rdc_minimum_compatible_version;
+               [range(0,8)] uint8 rdc_signature_levels;
+               frstrans_RdcCompressionAlgorithm compression_algorithm;
+               [size_is(rdc_signature_levels)]
+                       frstrans_RdcParameters rdc_filter_parameters[*];
+       } frstrans_RdcFileInfo;
+
+       WERROR frstrans_InitializeFileTransferAsync(
+               [in] GUID connection_guid,
+               [in,out,ref] frstrans_Update *frs_update,
+               [in,range(0,1)] boolean32 rdc_desired,
+               [in,out,ref] frstrans_RequestedStagingPolicy *staging_policy,
+               [out,ref] policy_handle *server_context,
+               [out,ref] frstrans_RdcFileInfo **rdc_file_info,
+               [out,ref,size_is(buffer_size),length_is(*size_read)]
+                       uint8 *data_buffer,
+               [in,range(0,262144)] uint32 buffer_size,
+               [out,ref] uint32 *size_read,
+               [out,ref] boolean32 *is_end_of_file
+       );
 
        /*****************/
        /* Function 0x0e */
@@ -97,9 +279,17 @@ interface frstrans
 
        /*****************/
        /* Function 0x0f */
-       [todo] void FRSTRANS_RAW_GET_FILE_DATA_ASYNC();
+       typedef [flag(NDR_PAHEX)] pipe uint8 frstrans_BytePipe;
+
+       WERROR frstrans_RawGetFileDataAsync(
+               [in,ref] policy_handle *server_context,
+               [out,ref] frstrans_BytePipe *byte_pipe
+               );
 
        /*****************/
        /* Function 0x10 */
-       [todo] void FRSTRANS_RDC_GET_FILE_DATA_ASYNC();
+       WERROR frstrans_RdcGetFileDataAsync(
+               [in,ref] policy_handle *server_context,
+               [out,ref] frstrans_BytePipe *byte_pipe
+               );
 }