The branch, master has been updated
       via  424e7636957f07c044ee24a9bbf650b02291939b (commit)
       via  9d148f75c712d4cf6863f8eb1256f806eac8d38b (commit)
       via  b91156d4ae8f1b0e60a4cdacd1aa34b110b6451a (commit)
       via  143625661300e7ee52e969bc3790e50a0016b88b (commit)
      from  8b6ec5b82cbc66cf8efd9d0713e36aac63c8c49e (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 424e7636957f07c044ee24a9bbf650b02291939b
Author: Stefan Metzmacher <me...@samba.org>
Date:   Tue Jul 21 16:48:06 2009 +0200

    frsrpc.idl: make the chunk array in frsrpc_CommPktChunkCtr dynamic
    
    We add an extra num_chunks to the frsrpc_CommPktChunkCtr structure
    and use hand modified ndr_push/pull functions to let it not appear
    on the wire.
    
    metze

commit 9d148f75c712d4cf6863f8eb1256f806eac8d38b
Author: Stefan Metzmacher <me...@samba.org>
Date:   Tue Jul 21 16:05:44 2009 +0200

    frsrpc.idl: almost complete the idl for the frsrpc_FrsSendCommPkt() function
    
    TODO: The amount of chunks is dynamic, we need to fix that
    
    metze

commit b91156d4ae8f1b0e60a4cdacd1aa34b110b6451a
Author: Stefan Metzmacher <me...@samba.org>
Date:   Tue Jul 21 16:04:35 2009 +0200

    frsapi.idl: fill the frsapi_WriterCommand() function
    
    metze

commit 143625661300e7ee52e969bc3790e50a0016b88b
Author: Stefan Metzmacher <me...@samba.org>
Date:   Tue Jul 21 16:04:07 2009 +0200

    frsapi.idl: fix some unknown field names
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 librpc/idl/frsapi.idl        |   23 ++-
 librpc/idl/frsrpc.idl        |  402 +++++++++++++++++++++++++++++++++---------
 librpc/ndr/ndr_frsrpc.c      |   94 ++++++++++
 librpc/ndr/ndr_frsrpc.h      |   35 ++++
 source4/librpc/config.mk     |    2 +-
 source4/torture/rpc/frsapi.c |   18 +-
 6 files changed, 468 insertions(+), 106 deletions(-)
 create mode 100644 librpc/ndr/ndr_frsrpc.c
 create mode 100644 librpc/ndr/ndr_frsrpc.h


Changeset truncated at 500 lines:

diff --git a/librpc/idl/frsapi.idl b/librpc/idl/frsapi.idl
index 11593f4..ea7880c 100644
--- a/librpc/idl/frsapi.idl
+++ b/librpc/idl/frsapi.idl
@@ -98,24 +98,31 @@ interface frsapi
        WERROR frsapi_IsPathReplicated(
                [in,unique] [string,charset(UTF16)] uint16 *path,
                [in] frsapi_ReplicaSetType replica_set_type,
-               [out] uint32 *unknown1,
-               [out] uint32 *unknown2,
-               [out] uint32 *unknown3,
+               [out] uint32 *replicated,
+               [out] uint32 *primary,
+               [out] uint32 *root,
                [out] GUID *replica_set_guid
        );
 
        /****************/
        /* Function 0x09 */
-       [todo] void FRSAPI_WRITER_COMMAND();
+       typedef [v1_enum] enum {
+               FRSAPI_WRITER_COMMAND_FREEZE    = 0x00000001,
+               FRSAPI_WRITER_COMMAND_THAW      = 0x00000002
+       } frsapi_WriterCommandsValues;
+
+       WERROR frsapi_WriterCommand(
+               [in] frsapi_WriterCommandsValues command
+       );
 
        /****************/
        /* Function 0x0a */
        /* not supported before w2k3 sp2 */
        WERROR frsapi_ForceReplication(
-               [in,unique] GUID *guid1,
-               [in,unique] GUID *guid2,
-               [in,unique] [charset(UTF16),string] uint16 *replica_set,
-               [in,unique] [charset(UTF16),string] uint16 *partner_name
+               [in,unique] GUID *replica_set_guid,
+               [in,unique] GUID *connection_guid,
+               [in,unique] [charset(UTF16),string] uint16 *replica_set_name,
+               [in,unique] [charset(UTF16),string] uint16 *partner_dns_name
        );
 
 }
diff --git a/librpc/idl/frsrpc.idl b/librpc/idl/frsrpc.idl
index 1019a25..233fbcb 100644
--- a/librpc/idl/frsrpc.idl
+++ b/librpc/idl/frsrpc.idl
@@ -7,6 +7,7 @@ import "misc.idl";
   version(1.1),
   endpoint("ncacn_ip_tcp:", "ncalrpc:"),
   helpstring("File Replication Service"),
+  helper("../librpc/ndr/ndr_frsrpc.h"),
   pointer_default(unique)
 ] 
 interface frsrpc
@@ -14,112 +15,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;
+               [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 struct {
-               uint16 type;
-               [subcontext(4),switch_is(type)] frsrpc_FrsSendCommPktChunkData 
data;
-       } frsrpc_FrsSendCommPktChunk;
-
-       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;
+       typedef [public,flag(NDR_NOALIGN)] struct {
+               frsrpc_CommPktChunkType type;
+               [subcontext(4),switch_is(type)] frsrpc_CommPktChunkData data;
+       } frsrpc_CommPktChunk;
+
+       typedef [nopull,nopush,flag(NDR_NOALIGN)] struct {
+               uint32 num_chunks; /* this doesn't appear on the wire */
+               frsrpc_CommPktChunk chunks[num_chunks];
+       } 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(
diff --git a/librpc/ndr/ndr_frsrpc.c b/librpc/ndr/ndr_frsrpc.c
new file mode 100644
index 0000000..c997459
--- /dev/null
+++ b/librpc/ndr/ndr_frsrpc.c
@@ -0,0 +1,94 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   helper routines for FRSRPC marshalling
+
+   Copyright (C) Stefan (metze) Metzmacher 2009
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+


-- 
Samba Shared Repository

Reply via email to