1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-11 16:58:40 +03:00

frsrpc.idl: almost complete the idl for the frsrpc_FrsSendCommPkt() function

TODO: The amount of chunks is dynamic, we need to fix that

metze
This commit is contained in:
Stefan Metzmacher 2009-07-21 16:05:44 +02:00
parent b91156d4ae
commit 9d148f75c7

View File

@ -14,112 +14,337 @@ interface frsrpc
/*****************/
/* Function 0x00 */
/* TAG:3 this TLV contains a GUID and the name of the server sending
* the call
*/
typedef struct {
[subcontext(4)] GUID unknown1;
[subcontext(4)] nstring source_server;
} frsrpc_FrsSendCommPktChunkDataSSRV;
/* TAG:4 this TLV contains a GUID and the name of the destination
* server the PDU is sent to
*/
typedef struct {
[subcontext(4)] GUID unknown1;
[subcontext(4)] nstring dest_server;
} frsrpc_FrsSendCommPktChunkDataDSRV;
/* TAG:18 this TLV contains a timestamp
*/
typedef struct {
[subcontext(4)] NTTIME time;
} frsrpc_FrsSendCommPktChunkDataTS;
[subcontext(4)] GUID guid;
[subcontext(4)] nstring name;
} frsrpc_CommPktChunkGuidName;
typedef struct {
uint32 unknown1;
} frsrpc_FrsSendCommPktChunkDataA;
hyper vsn;
GUID guid;
} frsrpc_CommPktGSVN;
typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap {
FRSRPC_CO_FLAG_ABORT_CO = 0x00000001,
FRSRPC_CO_FLAG_VV_ACTIVATED = 0x00000002,
FRSRPC_CO_FLAG_CONTENT_CMD = 0x00000004,
FRSRPC_CO_FLAG_LOCATION_CMD = 0x00000008,
FRSRPC_CO_FLAG_ONLIST = 0x00000010,
FRSRPC_CO_FLAG_LOCALCO = 0x00000020,
FRSRPC_CO_FLAG_RETRY = 0x00000040,
FRSRPC_CO_FLAG_OUT_OF_ORDER = 0x00000200,
FRSRPC_CO_FLAG_NEW_FILE = 0x00000400,
FRSRPC_CO_FLAG_CONTROL = 0x00001000,
FRSRPC_CO_FLAG_DIRECTED_CO = 0x00002000,
FRSRPC_CO_FLAG_VVJOIN_TO_ORIG = 0x00040000,
FRSRPC_CO_FLAG_SKIP_ORIG_REC_C = 0x00100000,
FRSRPC_CO_FLAG_MOVEIN_GEN = 0x00200000,
FRSRPC_CO_FLAG_MORPH_GEN_HEAD = 0x00400000,
FRSRPC_CO_FLAG_JUST_OID_RESET = 0x00800000,
FRSRPC_CO_FLAG_COMPRESSED_STAGE = 0x01000000,
FRSRPC_CO_FLAG_COMPRESSED_STAGE = 0x01000000,
FRSRPC_CO_FLAG_SKIP_VV_UPDATE = 0x02000000
} frsrpc_CommPktCoCmdFlags;
const uint32 FRSRPC_CO_IFLAG_NONE = 0x0000000;
typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap {
FRSRPC_CO_IFLAG_VVRETIRE_EXEC = 0x00000001,
FRSRPC_CO_IFLAG_CO_ABORT = 0x00000002,
FRSRPC_CO_IFLAG_DIR_ENUM_PENDING= 0x00000004
} frsrpc_CommPktCoCmdIFlags;
typedef [v1_enum,flag(NDR_PAHEX)] enum {
FRSRPC_CO_STATUS_CO_ENTERED_LOG = 0x00000000,
FRSRPC_CO_STATUS_ALLOC_STAGING_LOCAL_CO = 0x00000001,
FRSRPC_CO_STATUS_LOCAL_CO_STAGING_STARTED = 0x00000002,
FRSRPC_CO_STATUS_LOCAL_CO_STAGING_COMPLETED = 0x00000003,
FRSRPC_CO_STATUS_WAIT_RETRY_LOCAL_CO_STAGING = 0x00000004,
FRSRPC_CO_STATUS_ALLOC_STAGING_REMOTE_CO = 0x00000005,
FRSRPC_CO_STATUS_REMOTE_CO_STAGING_STARTED = 0x00000006,
FRSRPC_CO_STATUS_REMOTE_CO_STAGING_COMPLETED = 0x00000007,
FRSRPC_CO_STATUS_WAIT_RETRY_REMOTE_CO_STAGING = 0x00000008,
FRSRPC_CO_STATUS_FILE_INSTALL_REQUESTED = 0x00000009,
FRSRPC_CO_STATUS_FILE_INSTALL_STARTED = 0x0000000A,
FRSRPC_CO_STATUS_FILE_INSTALL_COMPLETED = 0x0000000B,
FRSRPC_CO_STATUS_FILE_INSTALL_WAIT_RETRY = 0x0000000C,
FRSRPC_CO_STATUS_FILE_INSTALL_RETRYING = 0x0000000D,
FRSRPC_CO_STATUS_FILE_INSTALL_RENAME_RETRYING = 0x0000000E,
FRSRPC_CO_STATUS_FILE_INSTALL_DELETE_RETRYING = 0x0000000F,
FRSRPC_CO_STATUS_CO_RECYCLED_FOR_ENUM = 0x00000013,
FRSRPC_CO_STATUS_REQUEST_OUTBOUND_PROPAGATION = 0x00000014,
FRSRPC_CO_STATUS_REQUEST_ACCEPTED_OUTBOUND_LOG = 0x00000015,
FRSRPC_CO_STATUS_DB_STATE_UPDATE_STARTED = 0x00000016,
FRSRPC_CO_STATUS_DB_STATE_UPDATE_COMPLETED = 0x00000017,
FRSRPC_CO_STATUS_CO_ABORTED = 0x00000018
} frsrpc_CommPktCoCmdStatus;
typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap {
FRSRPC_CONTENT_REASON_DATA_OVERWRITE = 0x00000001,
FRSRPC_CONTENT_REASON_DATA_EXTEND = 0x00000002,
FRSRPC_CONTENT_REASON_DATA_TRUNCATION = 0x00000004,
FRSRPC_CONTENT_REASON_NAMED_DATA_OVERWRITE = 0x00000010,
FRSRPC_CONTENT_REASON_NAMED_DATA_EXTEND = 0x00000020,
FRSRPC_CONTENT_REASON_NAMED_DATA_TRUNCATION = 0x00000040,
FRSRPC_CONTENT_REASON_FILE_CREATE = 0x00000100,
FRSRPC_CONTENT_REASON_FILE_DELETE = 0x00000200,
FRSRPC_CONTENT_REASON_EA_CHANGE = 0x00000400,
FRSRPC_CONTENT_REASON_SECURITY_CHANGE = 0x00000800,
FRSRPC_CONTENT_REASON_OLD_NAME = 0x00001000,
FRSRPC_CONTENT_REASON_NEW_NAME = 0x00002000,
FRSRPC_CONTENT_REASON_BASIC_INFO_CHANGE = 0x00004000,
FRSRPC_CONTENT_REASON_COMPRESSION_CHANGE = 0x00020000
} frsrpc_CommPktCoCmdContentCmd;
typedef [v1_enum,flag(NDR_PAHEX)] enum {
FRSRPC_CO_LOCATION_FILE_CREATE = 0x00000000,
FRSRPC_CO_LOCATION_DIR_CREATE = 0x00000000 | 0x00000001,
FRSRPC_CO_LOCATION_FILE_DELETE = 0x00000002,
FRSRPC_CO_LOCATION_DIR_DELETE = 0x00000002 | 0x00000001,
FRSRPC_CO_LOCATION_FILE_MOVEIN = 0x00000004,
FRSRPC_CO_LOCATION_DIR_MOVEIN = 0x00000004 | 0x00000001,
FRSRPC_CO_LOCATION_FILE_MOVEIN2 = 0x00000006,
FRSRPC_CO_LOCATION_DIR_MOVEIN2 = 0x00000006 | 0x00000001,
FRSRPC_CO_LOCATION_FILE_MOVEOUT = 0x00000008,
FRSRPC_CO_LOCATION_DIR_MOVEOUT = 0x00000008 | 0x00000001,
FRSRPC_CO_LOCATION_FILE_MOVERS = 0x0000000a,
FRSRPC_CO_LOCATION_DIR_MOVERS = 0x0000000a | 0x00000001,
FRSRPC_CO_LOCATION_FILE_MOVEDIR = 0x0000000c,
FRSRPC_CO_LOCATION_DIR_MOVEDIR = 0x0000000c | 0x00000001,
FRSRPC_CO_LOCATION_FILE_NO_CMD = 0x0000000e,
FRSRPC_CO_LOCATION_DIR_NO_CMD = 0x0000000e | 0x00000001
} frsrpc_CommPktCoCmdLocationCmd;
typedef struct {
uint32 unknown1;
GUID unknown2;
[subcontext(4)] nstring unknown3;
} frsrpc_FrsSendCommPktChunkDataB;
uint32 sequence_number;
frsrpc_CommPktCoCmdFlags flags;
frsrpc_CommPktCoCmdIFlags iflags;
frsrpc_CommPktCoCmdStatus status;
frsrpc_CommPktCoCmdContentCmd content_cmd;
frsrpc_CommPktCoCmdLocationCmd location_cmd;
uint32 file_attributes;
uint32 file_version_number;
uint32 partern_ack_sequence_number;
[value(0)] uint32 not_used;
hyper file_size;
hyper file_offset;
hyper frs_vsn;
hyper file_usn;
hyper jrnl_usn;
hyper jrnl_first_usn;
uint32 original_replica_num;
uint32 new_replica_num;
GUID change_order_guid;
GUID originator_guid;
GUID file_guid;
GUID old_parent_guid;
GUID new_parent_guid;
GUID connection_guid;
hyper ack_version;
[value(0)] hyper spare2ul1;
[value(0)] hyper spare1guid_p1;
[value(0)] hyper spare1guid_p2;
[value(0)] hyper spare2guid_p1;
[value(0)] hyper spare3guid_p2;
[value(0)] uint32 spare1wcs;
[value(0)] uint32 spare2wcs;
[value(0)] uint32 extension;
[value(0)] uint32 spare2bin;
NTTIME event_time;
[value(2*strlen_m(file_name))] uint16 file_name_length;
#define FRSRPC_MAX_PATH 260
[charset(UTF16)] uint16 file_name[FRSRPC_MAX_PATH+1];
[value(0)] uint8 padding1;
[value(0)] uint8 padding2;
[value(0)] uint8 padding3;
[value(0)] uint8 padding4;
} frsrpc_CommPktChangeOrderCommand;
typedef [v1_enum,flag(NDR_PAHEX)] enum {
FRSRPC_DATA_EXTENSION_TERMINATOR = 0x00000000,
FRSRPC_DATA_EXTENSION_MD5_CHECKSUM = 0x00000001,
FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT = 0x00000002
} frsrpc_CommPktDataExtensionType;
typedef [flag(NDR_PAHEX)] struct {
[value(0x00000018)] uint32 prefix_size;
[value(FRSRPC_DATA_EXTENSION_MD5_CHECKSUM)]
frsrpc_CommPktDataExtensionType prefix_type;
uint8 data[16];
} frsrpc_CommPktDataExtensionChecksum;
typedef struct {
uint32 unknown1;
GUID unknown2;
} frsrpc_FrsSendCommPktChunkDataC;
[value(0x00000018)] uint32 prefix_size;
[value(FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT)]
frsrpc_CommPktDataExtensionType prefix_type;
uint32 count;
[value(0)] uint32 not_used;
NTTIME first_try_time;
} frsrpc_CommPktDataExtensionRetryTimeout;
typedef [flag(NDR_PAHEX)] enum {
FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K = 0x0000,
FRSRPC_CO_RECORD_EXTENSION_VERSION_1 = 0x0001
} frsrpc_CommPktCoRecordExtensionMajor;
typedef struct {
[value(0x00000028)] uint32 field_size;
[value(FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K)]
frsrpc_CommPktCoRecordExtensionMajor major;
[value(0x0001)] uint16 offset_count;
[value(0x00000010)] uint32 offset;
[value(0)] uint32 offset_last;
frsrpc_CommPktDataExtensionChecksum data_checksum;
} frsrpc_CommPktCoRecordExtensionWin2k;
typedef struct {
[value(0x00000048)] uint32 field_size;
frsrpc_CommPktCoRecordExtensionMajor major;
[value(0x0002)] uint16 offset_count;
[value(0x00000018)] uint32 offset0;
[value(0x00000030)] uint32 offset1;/*TODO: is this correct??? */
[value(0)] uint32 offset_last;
[value(0)] uint32 not_used;
frsrpc_CommPktDataExtensionChecksum data_checksum;
frsrpc_CommPktDataExtensionRetryTimeout data_retry_timeout;
} frsrpc_CommPktChangeOrderRecordExtension;
typedef [v1_enum,flag(NDR_PAHEX)] enum {
FRSRPC_COMMAND_REMOTE_CO = 0x00000218,
FRSRPC_COMMAND_RECEIVING_STATE = 0x00000238,
FRSRPC_COMMAND_REMOTE_CO_DONE = 0x00000250,
FRSRPC_COMMAND_ABORT_FETCH = 0x00000246,
FRSRPC_COMMAND_RETRY_FETCH = 0x00000244,
FRSRPC_COMMAND_NEED_JOIN = 0x00000121,
FRSRPC_COMMAND_START_JOIN = 0x00000122,
FRSRPC_COMMAND_JOINING = 0x00000130,
FRSRPC_COMMAND_JOINED = 0x00000128,
FRSRPC_COMMAND_UNJOIN_REMOTE = 0x00000148,
FRSRPC_COMMAND_WJOIN_DONE = 0x00000136,
FRSRPC_COMMAND_SEND_STAGE = 0x00000228
} frsrpc_CommPktCommand;
typedef [flag(NDR_PAHEX)] enum {
FRSRPC_COMM_PKT_CHUNK_BOP = 0x0001,
FRSRPC_COMM_PKT_CHUNK_COMMAND = 0x0002,
FRSRPC_COMM_PKT_CHUNK_TO = 0x0003,
FRSRPC_COMM_PKT_CHUNK_FROM = 0x0004,
FRSRPC_COMM_PKT_CHUNK_REPLICA = 0x0005,
FRSRPC_COMM_PKT_CHUNK_CONNECTION = 0x0008,
FRSRPC_COMM_PKT_CHUNK_JOIN_GUID = 0x0006,
FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME = 0x0012,
FRSRPC_COMM_PKT_CHUNK_VVECTOR = 0x0007,
FRSRPC_COMM_PKT_CHUNK_JOIN_TIME = 0x0011,
FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID = 0x0014,
FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID = 0x0018,
FRSRPC_COMM_PKT_CHUNK_BLOCK = 0x0009,
FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE = 0x000A,
FRSRPC_COMM_PKT_CHUNK_FILE_SIZE = 0x000B,
FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET = 0x000C,
FRSRPC_COMM_PKT_CHUNK_GVSN = 0x000E,
FRSRPC_COMM_PKT_CHUNK_CO_GUID = 0x000F,
FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER = 0x0010,
FRSRPC_COMM_PKT_CHUNK_REMOTE_CO = 0x000D,
FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K = 0x0016,
FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2 = 0x0017,
FRSRPC_COMM_PKT_CHUNK_EOP = 0x0013
} frsrpc_CommPktChunkType;
typedef [nodiscriminant] union {
[default,flag(NDR_REMAINING)] DATA_BLOB blob;
[case(1)] frsrpc_FrsSendCommPktChunkDataA A;
[case(2)] frsrpc_FrsSendCommPktChunkDataA A;
[case(3)] frsrpc_FrsSendCommPktChunkDataSSRV SSRV;
[case(4)] frsrpc_FrsSendCommPktChunkDataDSRV DSRV;
[case(5)] frsrpc_FrsSendCommPktChunkDataB B;
[case(8)] frsrpc_FrsSendCommPktChunkDataB B;
[case(6)] frsrpc_FrsSendCommPktChunkDataC C;
[case(18)] frsrpc_FrsSendCommPktChunkDataTS TS;
[case(19)] frsrpc_FrsSendCommPktChunkDataA A;
} frsrpc_FrsSendCommPktChunkData;
typedef struct {
uint16 type;
[subcontext(4),switch_is(type)] frsrpc_FrsSendCommPktChunkData data;
} frsrpc_FrsSendCommPktChunk;
[case(FRSRPC_COMM_PKT_CHUNK_BOP)]
[value(0)] uint32 bop;
[case(FRSRPC_COMM_PKT_CHUNK_COMMAND)]
frsrpc_CommPktCommand command;
[case(FRSRPC_COMM_PKT_CHUNK_TO)]
frsrpc_CommPktChunkGuidName to;
[case(FRSRPC_COMM_PKT_CHUNK_FROM)]
frsrpc_CommPktChunkGuidName from;
[case(FRSRPC_COMM_PKT_CHUNK_REPLICA)]
frsrpc_CommPktChunkGuidName replica;
[case(FRSRPC_COMM_PKT_CHUNK_CONNECTION)]
frsrpc_CommPktChunkGuidName connection;
[case(FRSRPC_COMM_PKT_CHUNK_JOIN_GUID)][subcontext(4)]
GUID join_guid;
[case(FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME)]
NTTIME last_join_time;
[case(FRSRPC_COMM_PKT_CHUNK_VVECTOR)][subcontext(4)]
frsrpc_CommPktGSVN vvector;
[case(FRSRPC_COMM_PKT_CHUNK_JOIN_TIME)][subcontext(4)]
NTTIME join_time;
[case(FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID)][subcontext(4)]
GUID replica_version_guid;
[case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID)]
GUID compression_guid;
[case(FRSRPC_COMM_PKT_CHUNK_BLOCK)]
[flag(NDR_REMAINING)] DATA_BLOB block;
[case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE)]
hyper block_size;
[case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE)]
hyper file_size;
[case(FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET)]
hyper file_offset;
[case(FRSRPC_COMM_PKT_CHUNK_GVSN)][subcontext(4)]
frsrpc_CommPktGSVN gvsn;
[case(FRSRPC_COMM_PKT_CHUNK_CO_GUID)][subcontext(4)]
GUID co_guid;
[case(FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER)]
uint32 co_sequnence_number;
[case(FRSRPC_COMM_PKT_CHUNK_REMOTE_CO)][subcontext(4)]
frsrpc_CommPktChangeOrderCommand remote_co;
[case(FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K)][subcontext(4)]
frsrpc_CommPktCoRecordExtensionWin2k co_ext_win2k;
[case(FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2)][subcontext(4)]
frsrpc_CommPktChangeOrderRecordExtension co_extension2;
[case(FRSRPC_COMM_PKT_CHUNK_EOP)]
[value(0xFFFFFFFF)] uint32 bop;
} frsrpc_CommPktChunkData;
typedef [flag(NDR_NOALIGN)] struct {
frsrpc_FrsSendCommPktChunk chunk1;
frsrpc_FrsSendCommPktChunk chunk2;
frsrpc_FrsSendCommPktChunk chunk3;
frsrpc_FrsSendCommPktChunk chunk4;
frsrpc_FrsSendCommPktChunk chunk5;
frsrpc_FrsSendCommPktChunk chunk6;
frsrpc_FrsSendCommPktChunk chunk7;
frsrpc_FrsSendCommPktChunk chunk8;
frsrpc_FrsSendCommPktChunk chunk9;
} frsrpc_FrsSendCommPktChunkCtr;
frsrpc_CommPktChunkType type;
[subcontext(4),switch_is(type)] frsrpc_CommPktChunkData data;
} frsrpc_CommPktChunk;
typedef [gensize,flag(NDR_NOALIGN)] struct {
/* TODO: make this dynamic */
frsrpc_CommPktChunk chunks[9];
} frsrpc_CommPktChunkCtr;
typedef [v1_enum] enum {
FRSRPC_COMM_PKT_MAJOR_0 = 0x00000000
} frsrpc_CommPktMajor;
typedef [v1_enum] enum {
FRSRPC_COMM_PKT_MINOR_0 = 0x00000000,
FRSRPC_COMM_PKT_MINOR_1 = 0x00000001,
FRSRPC_COMM_PKT_MINOR_2 = 0x00000002,
FRSRPC_COMM_PKT_MINOR_3 = 0x00000003,
FRSRPC_COMM_PKT_MINOR_4 = 0x00000004,
FRSRPC_COMM_PKT_MINOR_5 = 0x00000005,
FRSRPC_COMM_PKT_MINOR_6 = 0x00000006,
FRSRPC_COMM_PKT_MINOR_7 = 0x00000007,
FRSRPC_COMM_PKT_MINOR_8 = 0x00000008,
FRSRPC_COMM_PKT_MINOR_9 = 0x00000009
} frsrpc_CommPktMinor;
typedef struct {
uint32 unknown1;
uint32 unknown2;
uint32 unknown3;
uint32 unknown4;
uint32 tlv_size;
uint32 unknown6;
uint32 unknown7; /* This may be a UNIQUE pointer? */
uint32 unknown8;
uint32 unknown9;
/*
* The format of this blob is this a concatenation
* of TLVs which are not really NDR encoded.
*
* The individual TLVs are encoded as :
* struct {
* uint16 type;
* [subcontext(4),switch_is(type)] chunk_data data;
* } chunk;
*
* some of the chunk are like this:
*
* struct {
* uint32 unknown; // 0x00000010
* struct GUID guid;
* lstring string;
* } ...;
*
*
* The tags are (might be) :
* 3: Source server sending the PDU
* 4: Destination server the PDU is sent to
* 18: Timestamp
*
*/
[subcontext(4)/*,size_is(tlv_size)*/] frsrpc_FrsSendCommPktChunkCtr *chunks;
uint32 unknown10;
uint32 unknown11;
frsrpc_CommPktMajor major;
frsrpc_CommPktMinor minor;
[value(1)] uint32 cs_id;
[value(pkt_len+12)] uint32 memory_len;
[value(ndr_size_frsrpc_CommPktChunkCtr(r->ctr,
ndr->iconv_convenience, ndr->flags))]
[range(0, 262144)]
uint32 pkt_len;
[value(0)] uint32 upk_len;
[subcontext(4),subcontext_size(pkt_len)]
frsrpc_CommPktChunkCtr *ctr;
[value(0)] uint32 data_name;
[value(0)] uint32 data_handle;
} frsrpc_FrsSendCommPktReq;
WERROR frsrpc_FrsSendCommPkt(