diff options
| author | Stefan Metzmacher <metze@samba.org> | 2009-07-21 16:05:44 +0200 | 
|---|---|---|
| committer | Stefan Metzmacher <metze@samba.org> | 2009-07-21 19:11:22 +0200 | 
| commit | 9d148f75c712d4cf6863f8eb1256f806eac8d38b (patch) | |
| tree | 356c2c60d689713572e2aef7b070982b8fa7cf72 | |
| parent | b91156d4ae8f1b0e60a4cdacd1aa34b110b6451a (diff) | |
| download | samba-9d148f75c712d4cf6863f8eb1256f806eac8d38b.tar.gz samba-9d148f75c712d4cf6863f8eb1256f806eac8d38b.tar.bz2 samba-9d148f75c712d4cf6863f8eb1256f806eac8d38b.zip  | |
frsrpc.idl: almost complete the idl for the frsrpc_FrsSendCommPkt() function
TODO: The amount of chunks is dynamic, we need to fix that
metze
| -rw-r--r-- | librpc/idl/frsrpc.idl | 399 | 
1 files changed, 312 insertions, 87 deletions
diff --git a/librpc/idl/frsrpc.idl b/librpc/idl/frsrpc.idl index 1019a25b28..54f143c1f1 100644 --- a/librpc/idl/frsrpc.idl +++ b/librpc/idl/frsrpc.idl @@ -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; +		[subcontext(4)] GUID guid; +		[subcontext(4)] nstring name; +	} frsrpc_CommPktChunkGuidName; -	/* 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; +		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; -	/* TAG:18 this TLV contains a  timestamp  -	*/  	typedef struct { -		[subcontext(4)] NTTIME time; -	} frsrpc_FrsSendCommPktChunkDataTS; +		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; -	} frsrpc_FrsSendCommPktChunkDataA; +		[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 { -		uint32 unknown1; -		GUID unknown2; -		[subcontext(4)] nstring unknown3; -	} frsrpc_FrsSendCommPktChunkDataB; +		[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 { -		uint32 unknown1; -		GUID unknown2; -	} frsrpc_FrsSendCommPktChunkDataC; +		[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(  | 
