winnt-fixes-20001106
[openafs.git] / src / WINNT / afsclass / c_notify.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef AFSCLASS_NOTIFY_H
11 #define AFSCLASS_NOTIFY_H
12
13 #include <WINNT/afsclass.h>
14
15
16 /*
17  * NOTIFICATION CLASS _________________________________________________________
18  *
19  */
20
21 typedef enum
22    {
23    evtCreate,   // lpi1 = new object
24    evtDestroy,  // lpi1 = object to delete
25
26    evtInvalidate,       // lpi1 = object invalidated
27    evtRefreshStatusBegin,       // lpi1 = object to refresh
28    evtRefreshStatusEnd, // lpi1 = object refreshed
29    evtRefreshServersBegin,      // lpi1 = parent cell
30    evtRefreshServersEnd,        // lpi1 = parent cell
31    evtRefreshServicesBegin,     // lpi1 = parent server
32    evtRefreshServicesEnd,       // lpi1 = parent server
33    evtRefreshAggregatesBegin,   // lpi1 = parent server
34    evtRefreshAggregatesEnd,     // lpi1 = parent server
35    evtRefreshFilesetsBegin,     // lpi1 = parent aggregate
36    evtRefreshFilesetsEnd,       // lpi1 = parent aggregate
37    evtRefreshUsersBegin,        // lpi1 = parent cell
38    evtRefreshUsersEnd,  // lpi1 = parent cell
39
40    // For the evtRefreshAll* events, the dw1 parameter accompanying the event
41    // is an integer percentage complete.
42    //
43    evtRefreshAllBegin,  // lpi1 = object refreshing
44    evtRefreshAllUpdate, // lpi1 = object working now
45    evtRefreshAllSectionStart,   // dw2 = section identifier
46    evtRefreshAllSectionEnd,     // dw2 = section identifier
47    evtRefreshAllEnd,
48
49    // For the evtOpenCell* events, the sz1 parameter accompanying the event
50    // is a string reflecting the name of the cell being opened.
51    //
52    evtOpenCellBegin,    // sz1 = pszCellName
53    evtOpenCellEnd,      // sz1 = pszCellName
54
55    // For the evtSyncVldb* events, the lpi1 parameter accompanying the event
56    // describes the server or aggregate being sync'd.
57    //
58    evtSyncVLDBBegin,    // lpi1 = server or aggregate
59    evtSyncVLDBEnd,      // lpi1 = server or aggregate
60
61    // For the evtGetServerLogFile events, the sz1 parameter accompanying the
62    // event is a string describing the filename of the log file to be obtained.
63    // The lpi1 parameter accompanying the event indicates the server being
64    // queried.
65    //
66    evtGetServerLogFileBegin,    // lpi1 = server, sz1 = log name
67    evtGetServerLogFileEnd,      // lpi1 = server, sz1 = log name
68
69    // For the evtInstallFile*, evtUninstallFile*, and evtGetFileDates* events,
70    // the lpi1 parameter accompanying the event indicates the server where
71    // the operation is taking place, while the sz1 parameter indicates the
72    // name of the file being manipulated.
73    //
74    evtInstallFileBegin, // lpi1 = server, sz1 = filename
75    evtInstallFileEnd,   // lpi1 = server, sz1 = filename
76
77    evtUninstallFileBegin,       // lpi1 = server, sz1 = filename
78    evtUninstallFileEnd, // lpi1 = server, sz1 = filename
79
80    evtGetFileDatesBegin,        // lpi1 = server, sz1 = filename
81    evtGetFileDatesEnd,  // lpi1 = server, sz1 = filename
82
83    // For most other evt*Server* events, the lpi1 parameter accompanying
84    // the event indicates the server being changed.
85    //
86    evtPruneFilesBegin,  // lpi1 = server
87    evtPruneFilesEnd,    // lpi1 = server
88
89    evtSetServerAuthBegin,       // lpi1 = server
90    evtSetServerAuthEnd, // lpi1 = server
91
92    evtGetRestartTimesBegin,     // lpi1 = server
93    evtGetRestartTimesEnd,       // lpi1 = server
94
95    evtSetRestartTimesBegin,     // lpi1 = server
96    evtSetRestartTimesEnd,       // lpi1 = server
97
98    evtChangeAddressBegin,       // lpi1 = server
99    evtChangeAddressEnd, // lpi1 = server
100
101    // For the evtAdminListLoad* events, the lpi1 parameter accompanying the
102    // event indicates the server from which the admin list is being read.
103    //
104    evtAdminListLoadBegin,       // lpi1 = server
105    evtAdminListLoadEnd, // lpi1 = server
106
107    // For most other evtAdminList* events, the lpi1 parameter accompanying
108    // the event indicates the server being manipulated.
109    //
110    evtAdminListSaveBegin,       // lpi1 = server
111    evtAdminListSaveEnd, // lpi1 = server
112
113    // For the evtKeyListLoad* events, the lpi1 parameter accompanying the
114    // event indicates the server from which the list of keys is being read.
115    //
116    evtKeyListLoadBegin, // lpi1 = server
117    evtKeyListLoadEnd,   // lpi1 = server
118
119    // For the evtHostListLoad* events, the lpi1 parameter accompanying the
120    // event indicates the server from which the host list is being read.
121    //
122    evtHostListLoadBegin,        // lpi1 = server
123    evtHostListLoadEnd,  // lpi1 = server
124
125    // For most other evtHostList* events, the lpi1 parameter accompanying the
126    // event indicates the server being manipulated.
127    //
128    evtHostListSaveBegin,        // lpi1 = server
129    evtHostListSaveEnd,  // lpi1 = server
130
131    // For the evtCreateService events, the lpi1 parameter accompanying the
132    // event indicates the parent server, while the sz1 parameter indicates
133    // the name of the service being created.
134    //
135    evtCreateServiceBegin,       // lpi1 = server, sz1 = service
136    evtCreateServiceEnd, // lpi1 = server, sz1 = service
137
138    // For most other evt*Service* events, the lpi1 parameter accompanying
139    // the event describes the service being changed.
140    //
141    evtDeleteServiceBegin,       // lpi1 = service
142    evtDeleteServiceEnd, // lpi1 = service
143
144    evtStartServiceBegin,        // lpi1 = service
145    evtStartServiceEnd,  // lpi1 = service
146
147    evtStopServiceBegin, // lpi1 = service
148    evtStopServiceEnd,   // lpi1 = service
149
150    evtRestartServiceBegin,      // lpi1 = service
151    evtRestartServiceEnd,        // lpi1 = service
152
153    // For the evtCreateFileset events, the lpi1 parameter accompanying the
154    // event indicates the parent aggregate, while the sz1 parameter indicates
155    // the name of the fileset.
156    //
157    evtCreateFilesetBegin,       // lpi1 = aggregate, sz1 = fileset name
158    evtCreateFilesetEnd, // lpi1 = aggregate, sz1 = fileset name
159
160    // For the evtMoveFileset* events, the lpi1 parameter indicates the fileset
161    // being moved while the lpi2 parameter indicates the target aggregate.
162    //
163    evtMoveFilesetBegin, // lpi1 = fileset, lpi2 = aggregate
164    evtMoveFilesetEnd,   // lpi1 = fileset, lpi2 = aggregate
165
166    // For the evtCreateReplica* events, the lpi1 parameter indicates the
167    // fileset being replicated, while the lpi2 parameter indicates the
168    // aggregate on which the new replica will be created.
169    //
170    evtCreateReplicaBegin,       // lpi1 = fileset, lpi2 = aggregate
171    evtCreateReplicaEnd, // lpi1 = fileset, lpi2 = aggregate
172
173    // For the evtRenameFileset* events, the lpi1 parameter indicates the
174    // fileset being renamed, while the sz1 parameter indicates the new
175    // name for the fileset.
176    //
177    evtRenameFilesetBegin,       // lpi1 = fileset, sz1 = new name
178    evtRenameFilesetEnd, // lpi1 = fileset, sz1 = new name
179
180    // For the evtCloneMultiple* events, the lpi1 parameter accompanying the
181    // event indicates the scope of the operation.
182    //
183    evtCloneMultipleBegin,       // lpi1 = scope of clonesys
184    evtCloneMultipleEnd, // lpi1 = scope of clonesys
185
186    // For the evtDumpFileset* events, the lpi1 parameter accompanying the
187    // event indicates the fileset being dumped, while the sz1 parameter
188    // indicates the filename of the dump.
189    //
190    evtDumpFilesetBegin, // lpi1 = fileset, sz1 = dump filename
191    evtDumpFilesetEnd,   // lpi1 = fileset, sz1 = dump filename
192
193    // For the evtRestoreFileset* events, the sz1 parameter accompanying the
194    // event indicates the name of the fileset being restored, while the sz2
195    // parameter indicates the name of the dump file being used. The lpi1
196    // parameter indicates the aggregate or fileset on which the restore
197    // operation will be performed.
198    //
199    evtRestoreFilesetBegin,      // sz1 = fileset name, sz2 = filename
200    evtRestoreFilesetEnd,        // sz1 = fileset name, sz2 = filename
201
202    // For most other evt*Fileset* events, the lpi1 parameter accompanying the
203    // event describes the fileset being changed.
204    //
205    evtDeleteFilesetBegin,       // lpi1 = fileset
206    evtDeleteFilesetEnd, // lpi1 = fileset
207
208    evtSetFilesetQuotaBegin,     // lpi1 = fileset
209    evtSetFilesetQuotaEnd,       // lpi1 = fileset
210
211    evtLockFilesetBegin, // lpi1 = fileset
212    evtLockFilesetEnd,   // lpi1 = fileset
213
214    evtUnlockFilesetBegin,       // lpi1 = fileset
215    evtUnlockFilesetEnd, // lpi1 = fileset
216
217    evtUnlockAllFilesetsBegin,   // lpi1 = cell, server or agg
218    evtUnlockAllFilesetsEnd,     // lpi1 = cell, server or agg
219
220    evtSetFilesetRepParamsBegin, // lpi1 = fileset
221    evtSetFilesetRepParamsEnd,   // lpi1 = fileset
222
223    evtReleaseFilesetBegin,      // lpi1 = rw fileset
224    evtReleaseFilesetEnd,        // lpi1 = rw fileset
225
226    evtCloneBegin,       // lpi1 = rw fileset
227    evtCloneEnd, // lpi1 = rw fileset
228
229    evtSetFilesetOwnerGroupBegin,        // lpi1 = fileset
230    evtSetFilesetOwnerGroupEnd,  // lpi1 = fileset
231
232    evtSetFilesetPermissionsBegin,       // lpi1 = fileset
233    evtSetFilesetPermissionsEnd, // lpi1 = fileset
234
235    // For the evtExecuteCommand events, the lpi1 parameter accompanying the
236    // event indicates the server on which the command is being executed,
237    // while the sz1 parameter contains the command-line being executed.
238    //
239    evtExecuteCommandBegin,      // lpi1 = server, sz1 = command
240    evtExecuteCommandEnd,        // lpi1 = server, sz1 = command
241
242    // For the evtSalvage events, the lpi1 parameter accompanying the event
243    // indicates the scope of the salvage--it will point to either a server,
244    // an aggregate, or a volume.
245    //
246    evtSalvageBegin,     // lpi1 = salvage scope
247    evtSalvageEnd,       // lpi1 = salvage scope
248
249    // For the evtCreateUser events, the lpi1 parameter accompanying the event
250    // indicates the parent cell for the operation, while the sz1 parameter
251    // contains the name of the user being created.
252    //
253    evtCreateUserBegin,  // lpi1 = cell, sz1 = user name
254    evtCreateUserEnd,    // lpi1 = cell, sz1 = user name
255
256    // For most other evtUser* events, the lpi1 parameter accompanying the
257    // event identifies the user being manipulated.
258    //
259    evtChangeUserBegin,  // lpi1 = user being changed
260    evtChangeUserEnd,    // lpi1 = user being changed
261
262    evtChangeUserPasswordBegin,  // lpi1 = user being changed
263    evtChangeUserPasswordEnd,    // lpi1 = user being changed
264
265    evtDeleteUserBegin,  // lpi1 = user being deleted
266    evtDeleteUserEnd,    // lpi1 = user being deleted
267
268    evtUnlockUserBegin,  // lpi1 = user being unlocked
269    evtUnlockUserEnd,    // lpi1 = user being unlocked
270
271    // For the evtCreateGroup events, the lpi1 parameter accompanying the event
272    // indicates the parent cell for the operation, while the sz1 parameter
273    // contains the name of the group being created.
274    //
275    evtCreateGroupBegin, // lpi1 = cell, sz1 = group name
276    evtCreateGroupEnd,   // lpi1 = cell, sz1 = group name
277
278    // For most other evtGroup* events, the lpi1 parameter accompanying the
279    // event identifies the group being manipulated.
280    //
281    evtChangeGroupBegin, // lpi1 = group being changed
282    evtChangeGroupEnd,   // lpi1 = group being changed
283
284    evtRenameGroupBegin, // lpi1 = group being renamed
285    evtRenameGroupEnd,   // lpi1 = group being renamed
286
287    evtDeleteGroupBegin, // lpi1 = group being deleted
288    evtDeleteGroupEnd,   // lpi1 = group being deleted
289
290    // For the evtGroupMemberAdd/Remove* events, the lpi1 parameter
291    // accompanying the event identifies the group being manipulated,
292    // while the lpi2 parameter indicates the user being added or removed.
293    //
294    evtGroupMemberAddBegin,      // lpi1 = group, lpi2 = user
295    evtGroupMemberAddEnd,        // lpi1 = group, lpi2 = user
296
297    evtGroupMemberRemoveBegin,   // lpi1 = group, lpi2 = user
298    evtGroupMemberRemoveEnd,     // lpi1 = group, lpi2 = user
299
300    evtUser = 500        // add any new notifications here
301    } NOTIFYEVENT;
302
303 typedef struct
304    {
305    LPIDENT lpi1;
306    LPIDENT lpi2;
307    TCHAR sz1[MAX_PATH];
308    TCHAR sz2[MAX_PATH];
309    DWORD dw1;
310    ULONG status;
311    LPARAM lpUser;
312    } NOTIFYPARAMS, *PNOTIFYPARAMS;
313
314
315 typedef BOOL (CALLBACK *NOTIFYCALLBACKPROC)( NOTIFYEVENT evt, PNOTIFYPARAMS pParams );
316
317 class NOTIFYCALLBACK
318    {
319    public:
320       NOTIFYCALLBACK (NOTIFYCALLBACKPROC procUser, LPARAM lpUser);
321       ~NOTIFYCALLBACK (void);
322
323       BOOL SendNotification (NOTIFYEVENT evt, PNOTIFYPARAMS pParams);
324
325       static BOOL SendNotificationToAll (NOTIFYEVENT evt, ULONG status = 0);
326       static BOOL SendNotificationToAll (NOTIFYEVENT evt, LPIDENT lpi1, ULONG status = 0);
327       static BOOL SendNotificationToAll (NOTIFYEVENT evt, LPTSTR psz1, ULONG status = 0);
328       static BOOL SendNotificationToAll (NOTIFYEVENT evt, LPIDENT lpi1, LPTSTR psz1, ULONG status);
329       static BOOL SendNotificationToAll (NOTIFYEVENT evt, LPIDENT lpi1, LPIDENT lpi2, LPTSTR psz1, LPTSTR psz2, DWORD dw1, ULONG status);
330
331    // Private data
332    //
333    private:
334       NOTIFYCALLBACKPROC procSupplied;
335       LPARAM lpSupplied;
336
337       static size_t nNotifyList;
338       static LPNOTIFYCALLBACK *aNotifyList;
339    };
340
341
342 #endif // AFSCLASS_NOTIFY_H
343