windows-build-updates-20030314
[openafs.git] / src / WINNT / afsclass / c_cell.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_CELL_H
11 #define AFSCLASS_CELL_H
12
13 #include <WINNT/afsclass.h>
14 #include <WINNT/c_svr.h>
15 #include <WINNT/c_agg.h>
16 #include <WINNT/c_usr.h>
17 #include <WINNT/c_grp.h>
18
19
20 typedef enum
21    {
22    CELL_REFRESH_ACCOUNT_CREATED_USER,
23    CELL_REFRESH_ACCOUNT_CREATED_GROUP,
24    CELL_REFRESH_ACCOUNT_CHANGED,
25    CELL_REFRESH_ACCOUNT_DELETED,
26    } OP_CELL_REFRESH_ACCOUNT;
27
28 /*
29  * CELL CLASS _________________________________________________________________
30  *
31  */
32
33 class CELL
34    {
35    friend class IDENT;
36    friend class SERVER;
37    friend class SERVICE;
38    friend class AGGREGATE;
39    friend class FILESET;
40    friend class USER;
41    friend class PTSGROUP;
42
43    public:
44       static LPIDENT OpenCell (LPTSTR pszCellName, PVOID hCreds, ULONG *pStatus = NULL);
45       static void CloseCell (LPIDENT lpiCell);
46       static LPCELL ReopenCell (LPTSTR szCell, ULONG *pStatus = NULL);
47
48    public:
49       void Close (void);
50       void Invalidate (void);
51       void InvalidateServers (void);
52       void InvalidateUsers (void);
53       BOOL RefreshServerList (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
54       BOOL RefreshServers (BOOL fNotify = TRUE, ULONG *pStatus = NULL); // does nothing if not invalidated
55       BOOL RefreshStatus (BOOL fNotify = TRUE, ULONG *pStatus = NULL);  // does nothing if not invalidated
56       BOOL RefreshVLDB (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
57       BOOL RefreshVLDB (LPIDENT lpiRefresh, BOOL fNotify = TRUE, ULONG *pStatus = NULL, BOOL fAnythingRelatedToThisRWFileset = FALSE);
58       BOOL RefreshUsers (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
59       BOOL RefreshAll (ULONG *pStatus = NULL);
60       BOOL RefreshAccount (LPTSTR pszAccount, LPTSTR pszInstance, OP_CELL_REFRESH_ACCOUNT Op, LPIDENT *plpi = NULL);
61       BOOL RefreshAccounts (LPTSTR mszAccounts, OP_CELL_REFRESH_ACCOUNT Op);
62
63       // Cell properties
64       //
65       LPIDENT GetIdentifier (void);
66       void GetName (LPTSTR pszName);
67       static BOOL GetDefaultCell (LPTSTR pszName, ULONG *pStatus = NULL);
68
69       PVOID GetUserParam (void);
70       void SetUserParam (PVOID pUserParam);
71
72       BOOL fAnyServersUnmonitored (void);
73
74       PVOID GetCellObject (ULONG *pStatus = NULL);
75       PVOID GetKasObject (ULONG *pStatus = NULL);
76
77       PVOID GetCurrentCredentials (void);
78       void SetCurrentCredentials (PVOID hCreds);
79
80       // Servers within a cell
81       //
82       LPSERVER OpenServer (LPTSTR pszName, ULONG *pStatus = NULL);
83       LPSERVER OpenServer (LPSOCKADDR_IN pAddr, ULONG *pStatus = NULL);
84       LPSERVER ServerFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
85       LPSERVER ServerFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
86       LPSERVER ServerFindNext (HENUM *phEnum);
87       void ServerFindClose (HENUM *phEnum);
88
89       // Users and Groups within a cell
90       //
91       LPUSER OpenUser (LPTSTR pszName, LPTSTR pszInstance = NULL, ULONG *pStatus = NULL);
92       LPUSER UserFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
93       LPUSER UserFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
94       LPUSER UserFindNext (HENUM *phEnum);
95       void UserFindClose (HENUM *phEnum);
96
97       LPPTSGROUP OpenGroup (LPTSTR pszName, ULONG *pStatus = NULL);
98       LPPTSGROUP GroupFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
99       LPPTSGROUP GroupFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
100       LPPTSGROUP GroupFindNext (HENUM *phEnum);
101       void GroupFindClose (HENUM *phEnum);
102
103    private:
104       static void InitClass (void);
105       CELL (LPTSTR pszCellName, PVOID hCreds);
106       ~CELL (void);
107       void FreeUsers (BOOL fNotify);
108       void FreeServers (BOOL fNotify);
109
110       BOOL CloseCellObject (ULONG *pStatus = NULL);
111       BOOL CloseKasObject (ULONG *pStatus = NULL);
112
113       void RefreshVLDB_RemoveReferences (LPIDENT lpiRefServer, LPIDENT lpiRefAggregate, LPIDENT lpiRefFileset, LPVOLUMEID pvidRefFileset);
114       void RefreshVLDB_OneEntry (PVOID pEntry, LPIDENT lpiRefServer, LPSERVERSTATUS pssRefServer, LPIDENT lpiRefAggregate, LPAGGREGATESTATUS pasRefAggregate, LPIDENT lpiRefFileset, LPVOLUMEID pvidRefFileset, BOOL fNotify);
115       void BuildGroups (LPTSTR mszGroups);
116
117       static BOOL CALLBACK CELL::KeyServerName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
118       static HASHVALUE CALLBACK CELL::KeyServerName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
119       static HASHVALUE CALLBACK CELL::KeyServerName_HashData (LPHASHLISTKEY pKey, PVOID pData);
120
121       static BOOL CALLBACK CELL::KeyServerAddr_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
122       static HASHVALUE CALLBACK CELL::KeyServerAddr_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
123       static HASHVALUE CALLBACK CELL::KeyServerAddr_HashData (LPHASHLISTKEY pKey, PVOID pData);
124
125       static BOOL CALLBACK CELL::KeyUserName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
126       static HASHVALUE CALLBACK CELL::KeyUserName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
127       static HASHVALUE CALLBACK CELL::KeyUserName_HashData (LPHASHLISTKEY pKey, PVOID pData);
128
129       static BOOL CALLBACK CELL::KeyGroupName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
130       static HASHVALUE CALLBACK CELL::KeyGroupName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
131       static HASHVALUE CALLBACK CELL::KeyGroupName_HashData (LPHASHLISTKEY pKey, PVOID pData);
132
133    private:
134       PVOID m_hCell;
135       PVOID m_hKas;
136       TCHAR m_szName[ cchNAME ];
137       size_t m_nReqs;
138       PVOID m_hCreds;
139       char **m_apszServers;
140
141       BOOL m_fStatusOutOfDate;
142       BOOL m_fVLDBOutOfDate;
143       LPIDENT m_lpiThis;
144
145       static LPHASHLIST x_lCells;
146
147       BOOL m_fServersOutOfDate;
148       size_t m_nServersUnmonitored;
149       LPHASHLIST m_lServers;
150       LPHASHLISTKEY m_lkServerName;
151       LPHASHLISTKEY m_lkServerAddr;
152
153       BOOL m_fUsersOutOfDate;
154       LPHASHLIST m_lUsers;
155       LPHASHLISTKEY m_lkUserName;
156       LPHASHLIST m_lGroups;
157       LPHASHLISTKEY m_lkGroupName;
158    };
159
160
161 #endif  // AFSCLASS_CELL_H
162