LINUX: afs_create infinite fetchStatus loop
[pkg-k5-afs_openafs.git] / src / WINNT / afsclass / c_cell.h
blobf9802e44fe465aacaafa5429bdb9169e00a597cf
1 /*
2 * Copyright 2000, International Business Machines Corporation and others.
3 * All Rights Reserved.
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 */
10 #ifndef AFSCLASS_CELL_H
11 #define AFSCLASS_CELL_H
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>
20 typedef enum
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;
29 * CELL CLASS _________________________________________________________________
33 class CELL
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;
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);
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);
63 // Cell properties
65 LPIDENT GetIdentifier (void);
66 void GetName (LPTSTR pszName);
67 static BOOL GetDefaultCell (LPTSTR pszName, ULONG *pStatus = NULL);
69 PVOID GetUserParam (void);
70 void SetUserParam (PVOID pUserParam);
72 BOOL fAnyServersUnmonitored (void);
74 PVOID GetCellObject (ULONG *pStatus = NULL);
75 PVOID GetKasObject (ULONG *pStatus = NULL);
77 PVOID GetCurrentCredentials (void);
78 void SetCurrentCredentials (PVOID hCreds);
80 // Servers within a cell
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);
89 // Users and Groups within a cell
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);
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);
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);
110 BOOL CloseCellObject (ULONG *pStatus = NULL);
111 BOOL CloseKasObject (ULONG *pStatus = NULL);
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);
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);
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);
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);
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);
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;
141 BOOL m_fStatusOutOfDate;
142 BOOL m_fVLDBOutOfDate;
143 LPIDENT m_lpiThis;
145 static LPHASHLIST x_lCells;
147 BOOL m_fServersOutOfDate;
148 size_t m_nServersUnmonitored;
149 LPHASHLIST m_lServers;
150 LPHASHLISTKEY m_lkServerName;
151 LPHASHLISTKEY m_lkServerAddr;
153 BOOL m_fUsersOutOfDate;
154 LPHASHLIST m_lUsers;
155 LPHASHLISTKEY m_lkUserName;
156 LPHASHLIST m_lGroups;
157 LPHASHLISTKEY m_lkGroupName;
161 #endif // AFSCLASS_CELL_H