windows-file-versioning-20030619
[openafs.git] / src / WINNT / afsclass / c_ident.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_IDENT_H
11 #define AFSCLASS_IDENT_H
12
13 #include <WINNT/afsclass.h>
14
15
16 /*
17  * IDENTIFIER CLASS ___________________________________________________________
18  *
19  */
20
21 typedef enum
22    {
23    itUNUSED,
24    itCELL,
25    itSERVER,
26    itSERVICE,
27    itAGGREGATE,
28    itFILESET,
29    itUSER,
30    itGROUP
31    } IDENTTYPE;
32
33 class IDENT
34    {
35    friend class CELL;
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       IDENTTYPE GetType (void);
45       BOOL fIsCell (void);
46       BOOL fIsServer (void);
47       BOOL fIsService (void);
48       BOOL fIsAggregate (void);
49       BOOL fIsFileset (void);
50       BOOL fIsUser (void);
51       BOOL fIsGroup (void);
52       size_t GetRefCount (void);
53
54       LPCELL OpenCell (ULONG *pStatus = NULL);
55       LPSERVER OpenServer (ULONG *pStatus = NULL);
56       LPSERVICE OpenService (ULONG *pStatus = NULL);
57       LPAGGREGATE OpenAggregate (ULONG *pStatus = NULL);
58       LPFILESET OpenFileset (ULONG *pStatus = NULL);
59       LPUSER OpenUser (ULONG *pStatus = NULL);
60       LPPTSGROUP OpenGroup (ULONG *pStatus = NULL);
61
62       LPIDENT GetCell (void);
63       LPIDENT GetServer (void);
64       LPIDENT GetService (void);
65       LPIDENT GetAggregate (void);
66       LPIDENT GetFileset (void);
67       LPIDENT GetUser (void);
68       LPIDENT GetGroup (void);
69
70       void GetCellName (LPTSTR pszName);
71       void GetLongServerName (LPTSTR pszName);
72       void GetShortServerName (LPTSTR pszName);
73       void GetServerName (LPTSTR pszName);
74       void GetServiceName (LPTSTR pszName);
75       void GetAggregateName (LPTSTR pszName);
76       void GetFilesetName (LPTSTR pszName);
77       void GetFilesetID (VOLUMEID *pvid);
78       void GetUserName (LPTSTR pszName, LPTSTR pszInstance = NULL);
79       void GetGroupName (LPTSTR pszPrincipal);
80       void GetFullUserName (LPTSTR pszFullName);
81
82       PVOID GetUserParam (void);
83       void SetUserParam (PVOID pUserParam);
84
85       static LPIDENT FindFirst (HENUM *phEnum);
86       static LPIDENT FindFirst (HENUM *phEnum, VOLUMEID *pvidFileset);
87       static LPIDENT FindNext (HENUM *phEnum);
88       static void FindClose (HENUM *phEnum);
89
90       static LPIDENT FindServer (LPIDENT lpiCell, LPTSTR pszServer);
91       static LPIDENT FindAggregate (LPIDENT lpiServer, LPTSTR pszAggregate);
92       static LPIDENT FindFileset (LPIDENT lpiParent, LPTSTR pszFileset);
93       static LPIDENT FindFileset (LPIDENT lpiParent, VOLUMEID *pvidFileset);
94       static LPIDENT FindUser (LPIDENT lpiCell, LPTSTR pszPrincipal, LPTSTR pszInstance = NULL);
95       static LPIDENT FindGroup (LPIDENT lpiCell, LPTSTR pszGroup);
96
97       // Private functions
98       //
99    private:
100       void InitIdent (void);
101       IDENT (LPCELL lpCell);
102       IDENT (LPSERVER lpServer);
103       IDENT (LPSERVICE lpSvc);
104       IDENT (LPAGGREGATE lpAgg);
105       IDENT (LPFILESET lpSet);
106       IDENT (LPUSER lpUser);
107       IDENT (LPPTSGROUP lpGroup);
108       ~IDENT (void);
109       void Update (void);
110
111       static void InitClass (void);
112       static void RemoveIdentsInCell (LPIDENT lpiCell);
113       static LPIDENT FindIdent (LPCELL lpCell);
114       static LPIDENT FindIdent (LPSERVER lpServer);
115       static LPIDENT FindIdent (LPSERVICE lpService);
116       static LPIDENT FindIdent (LPAGGREGATE lpAggregate);
117       static LPIDENT FindIdent (LPFILESET lpFileset);
118       static LPIDENT FindIdent (LPFILESET lpFileset, VOLUMEID *pvid);
119       static LPIDENT FindIdent (LPUSER lpUser);
120       static LPIDENT FindIdent (LPPTSGROUP lpGroup);
121       static LPIDENT FindIdent (IDENTTYPE iType, LPTSTR pszCell, LPTSTR pszServer, LPTSTR pszService, LPTSTR pszAggregate, LPTSTR pszFileset, VOLUMEID *pvidFileset);
122       static LPIDENT FindIdent (IDENTTYPE iType, LPTSTR pszCell, LPTSTR pszAccount, LPTSTR pszInstance);
123
124       // Private data
125       //
126    private:
127       IDENTTYPE m_iType;
128
129       TCHAR m_szCell[ cchNAME ];
130       TCHAR m_szServer[ cchNAME ];
131       TCHAR m_szService[ cchNAME ];
132       TCHAR m_szAggregate[ cchNAME ];
133       TCHAR m_szFileset[ cchNAME ];
134       TCHAR m_szAccount[ cchNAME ];
135       TCHAR m_szInstance[ cchNAME ];
136       VOLUMEID m_vidFileset;
137       PVOID m_pUser;
138       size_t m_cRef;
139
140       static LPHASHLIST x_lIdents;
141       static LPHASHLISTKEY x_lkTypeServer;
142       static LPHASHLISTKEY x_lkFilesetID;
143       static LPHASHLISTKEY x_lkFilesetName;
144       static LPHASHLISTKEY x_lkAccountName;
145
146       static BOOL CALLBACK IDENT::KeyTypeServer_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
147       static HASHVALUE CALLBACK IDENT::KeyTypeServer_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
148       static HASHVALUE CALLBACK IDENT::KeyTypeServer_HashData (LPHASHLISTKEY pKey, PVOID pData);
149
150       static BOOL CALLBACK IDENT::KeyFilesetID_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
151       static HASHVALUE CALLBACK IDENT::KeyFilesetID_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
152       static HASHVALUE CALLBACK IDENT::KeyFilesetID_HashData (LPHASHLISTKEY pKey, PVOID pData);
153
154       static BOOL CALLBACK IDENT::KeyFilesetName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
155       static HASHVALUE CALLBACK IDENT::KeyFilesetName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
156       static HASHVALUE CALLBACK IDENT::KeyFilesetName_HashData (LPHASHLISTKEY pKey, PVOID pData);
157
158       static BOOL CALLBACK IDENT::KeyAccountName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
159       static HASHVALUE CALLBACK IDENT::KeyAccountName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
160       static HASHVALUE CALLBACK IDENT::KeyAccountName_HashData (LPHASHLISTKEY pKey, PVOID pData);
161    };
162
163
164 #endif  // AFSCLASS_IDENT_H
165