Fix syntax errors.
[metze/samba/wip.git] / source4 / librpc / idl / winsrepl.idl
index 986b16ce04214cb49c3badabc90e0b68509b2fd5..0ec05e891cbb6880e836fec30f3fcabf9c1a0833 100644 (file)
@@ -9,12 +9,8 @@
    Written by Andrew Tridgell <tridge@osdl.org>
 */
 
-[
-  uuid("0-1-2-3-4"),
-  version(0.0),
-  pointer_default(unique),
-  pointer_default_top(unique)
-]
+import "nbt.idl";
+
 interface wrepl
 {
        const int WINS_REPLICATION_PORT = 42;
@@ -27,21 +23,59 @@ interface wrepl
        typedef [flag(NDR_LITTLE_ENDIAN)] struct {
                uint32      num_ips;
                wrepl_ip    ips[num_ips];
-               ipv4address unknown;
        } wrepl_address_list;
 
        typedef [nodiscriminant] union {
-               [case(0)] wrepl_ip           address;
+               [case(0)] ipv4address ip;
                [case(2)] wrepl_address_list addresses;
        } wrepl_addresses;
 
+       typedef [enum8bit] enum {
+               WREPL_TYPE_UNIQUE       = 0x0,
+               WREPL_TYPE_GROUP        = 0x1,
+               WREPL_TYPE_SGROUP       = 0x2,
+               WREPL_TYPE_MHOMED       = 0x3
+       } wrepl_name_type;
+
+       typedef [enum8bit] enum {
+               WREPL_STATE_ACTIVE      = 0x0,
+               WREPL_STATE_RELEASED    = 0x1,
+               WREPL_STATE_TOMBSTONE   = 0x2,
+               WREPL_STATE_RESERVED    = 0x3
+       } wrepl_name_state;
+
+       typedef [enum8bit] enum {
+               WREPL_NODE_B    = 0x0,
+               WREPL_NODE_P    = 0x1,
+               WREPL_NODE_M    = 0x2,
+               WREPL_NODE_H    = 0x3
+       } wrepl_name_node;
+
+       typedef [bitmap32bit] bitmap {
+               WREPL_FLAGS_RECORD_TYPE         = 0x00000003,
+               WREPL_FLAGS_RECORD_STATE        = 0x0000000C,
+               WREPL_FLAGS_REGISTERED_LOCAL    = 0x00000010,
+               WREPL_FLAGS_NODE_TYPE           = 0x00000060,
+               WREPL_FLAGS_IS_STATIC           = 0x00000080
+       } wrepl_flags;
+
+       typedef [v1_enum] enum {
+               WREPL_GROUP_FLAG_NO_GROUP       = 0x00000000,
+               WREPL_GROUP_FLAG_IS_GROUP       = 0x00000001
+       } wrepl_group_flag;
+
+#define WREPL_IS_GROUP(flags) (\
+       ((((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_GROUP)|| \
+       (((flags) & WREPL_FLAGS_RECORD_TYPE) == WREPL_TYPE_SGROUP))\
+       ? WREPL_GROUP_FLAG_IS_GROUP : WREPL_GROUP_FLAG_NO_GROUP)
+
        typedef struct {
-               uint32    name_len;
-               uint8     name[name_len];
-               uint32    flags;
-               [flag(NDR_LITTLE_ENDIAN)] uint32 group_flag;
+               wrepl_nbt_name name;
+               wrepl_flags flags;
+               [flag(NDR_LITTLE_ENDIAN),value(WREPL_IS_GROUP(flags))] wrepl_group_flag is_group;
                udlongr   id;
                [switch_is(flags & 2)] wrepl_addresses addresses;
+               ipv4address unknown;
        } wrepl_wins_name;
 
        typedef struct {
@@ -68,9 +102,9 @@ interface wrepl
                WREPL_REPL_SEND_REQUEST = 2,
                WREPL_REPL_SEND_REPLY   = 3,
                WREPL_REPL_UPDATE       = 4,
-               WREPL_REPL_5            = 5,
+               WREPL_REPL_UPDATE2      = 5,
                WREPL_REPL_INFORM       = 8,
-               WREPL_REPL_9            = 9
+               WREPL_REPL_INFORM2      = 9
        } wrepl_replication_cmd;
 
        typedef [nodiscriminant] union {
@@ -79,9 +113,9 @@ interface wrepl
                [case(WREPL_REPL_SEND_REQUEST)] wrepl_wins_owner owner;
                [case(WREPL_REPL_SEND_REPLY)]   wrepl_send_reply reply;
                [case(WREPL_REPL_UPDATE)]       wrepl_table      table;
-               [case(WREPL_REPL_5)]            wrepl_table      table;
+               [case(WREPL_REPL_UPDATE2)]      wrepl_table      table;
                [case(WREPL_REPL_INFORM)]       wrepl_table      table;
-               [case(WREPL_REPL_9)]            wrepl_table      table;
+               [case(WREPL_REPL_INFORM2)]      wrepl_table      table;
        } wrepl_replication_info;
 
        typedef struct {
@@ -130,7 +164,7 @@ interface wrepl
        } wrepl_packet;
 
        typedef [flag(NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
-               [value(ndr_size_wrepl_packet(&packet, ndr->flags))] uint32 size;
+               [value(ndr_size_wrepl_packet(&packet, ndr->iconv_convenience, ndr->flags))] uint32 size;
                wrepl_packet    packet;
        } wrepl_wrap;