Release alpha15.
[kai/samba-autobuild/.git] / librpc / idl / notify.idl
1 #include "idl_types.h"
2
3 import "file_id.idl", "server_id.idl";
4
5 /*
6    IDL structures for notify change code
7
8    this defines the structures used in the notify database code, and
9    the change notify buffers
10 */
11
12 [
13   pointer_default(unique)
14 ]
15 interface notify
16 {
17
18         /* structure used in the notify database */
19         typedef [public] struct {
20                 server_id server;
21                 uint32 filter; /* filter to apply in this directory */
22                 uint32 subdir_filter; /* filter to apply in child directories */
23                 uint32 dir_fd;   /* fd of open directory */
24                 file_id dir_id;  /* file_id of open directory */
25                 utf8string path;
26                 uint32 path_len; /* saves some computation on search */
27                 pointer private_data;
28         } notify_entry;
29
30         typedef [public] struct {
31                 uint32 num_entries;
32                 notify_entry entries[num_entries];
33         } notify_entry_array;
34
35         /*
36           to allow for efficient search for matching entries, we
37           divide them by the directory depth, with a separate array
38           per depth. The entries within each depth are sorted by path,
39           allowing for a bisection search.
40
41           The max_mask and max_mask_subdir at each depth is the
42           bitwise or of the filters and subdir filters for all entries
43           at that depth. This allows a depth to be quickly skipped if
44           no entries will match the target filter
45         */
46         typedef struct {
47                 uint32 max_mask;
48                 uint32 max_mask_subdir;
49                 uint32 num_entries;
50                 notify_entry entries[num_entries];
51         } notify_depth;
52
53         typedef [public] struct {
54                 uint32 num_depths;
55                 notify_depth depth[num_depths];
56         } notify_array;
57
58         /* structure sent between servers in notify messages */
59         typedef [public] struct {
60                 uint32 action;
61                 utf8string path;
62                 pointer private_data;
63         } notify_event;
64
65         typedef [v1_enum] enum {
66                 FILE_ACTION_ADDED               = 0x00000001,
67                 FILE_ACTION_REMOVED             = 0x00000002,
68                 FILE_ACTION_MODIFIED            = 0x00000003,
69                 FILE_ACTION_RENAMED_OLD_NAME    = 0x00000004,
70                 FILE_ACTION_RENAMED_NEW_NAME    = 0x00000005,
71                 FILE_ACTION_ADDED_STREAM        = 0x00000006,
72                 FILE_ACTION_REMOVED_STREAM      = 0x00000007,
73                 FILE_ACTION_MODIFIED_STREAM     = 0x00000008
74         } FILE_NOTIFY_ACTION;
75
76         /* structure sent at the CIFS layer */
77         /* Align on 4-byte boundary according to MS-CIFS 2.2.7.4.2 */
78         typedef [public,gensize,flag(NDR_ALIGN4)] struct {
79                 uint32 NextEntryOffset;
80                 FILE_NOTIFY_ACTION Action;
81                 [value(strlen_m(FileName1)*2)] uint32 FileNameLength;
82                 [charset(UTF16),flag(STR_NOTERM)] uint16 FileName1[FileNameLength];
83         } FILE_NOTIFY_INFORMATION;
84 }