2 * Copyright 2000, International Business Machines Corporation and others.
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
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>
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 _________________________________________________________________
38 friend class AGGREGATE
;
41 friend class PTSGROUP
;
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
);
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
);
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
);
104 static void InitClass (void);
105 CELL (LPTSTR pszCellName
, PVOID hCreds
);
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
);
136 TCHAR m_szName
[ cchNAME
];
139 char **m_apszServers
;
141 BOOL m_fStatusOutOfDate
;
142 BOOL m_fVLDBOutOfDate
;
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
;
155 LPHASHLISTKEY m_lkUserName
;
156 LPHASHLIST m_lGroups
;
157 LPHASHLISTKEY m_lkGroupName
;
161 #endif // AFSCLASS_CELL_H