death to trailing whitespace
[openafs.git] / src / WINNT / afsclass / c_svr.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_SERVER_H
11 #define AFSCLASS_SERVER_H
12
13 #include <WINNT/afsclass.h>
14
15
16 /*
17  * SERVER CLASS _______________________________________________________________
18  *
19  */
20
21 #define AFSCLASS_MAX_ADDRESSES_PER_SITE 16
22
23 typedef struct
24    {
25    size_t nAddresses;
26    SOCKADDR_IN aAddresses[ AFSCLASS_MAX_ADDRESSES_PER_SITE ];
27    } SERVERSTATUS, *LPSERVERSTATUS;
28
29 class SERVER
30    {
31    friend class CELL;
32    friend class SERVICE;
33    friend class AGGREGATE;
34    friend class IDENT;
35
36    public:
37       void Close (void);
38       void Invalidate (void);
39       void InvalidateStatus (void);
40       void InvalidateServices (void);
41       BOOL RefreshStatus (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
42       BOOL RefreshServices (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
43       BOOL RefreshAggregates (BOOL fNotify = TRUE, ULONG *pStatus = NULL);
44       BOOL RefreshAll (ULONG *pStatus = NULL, double dInit = 0.0, double dFactor = 1.0);
45
46       static void ShortenName (LPTSTR pszTarget, LPTSTR pszSource, BOOL fForce = FALSE);
47
48       // Server properties
49       //
50       BOOL fIsMonitored (void);
51       BOOL SetMonitor (BOOL fShouldMonitor, ULONG *pStatus = NULL);
52
53       LPIDENT GetIdentifier (void);
54       LPCELL OpenCell (ULONG *pStatus = NULL);
55       void GetName (LPTSTR pszName);
56       void GetLongName (LPTSTR pszName);
57
58       short GetGhostStatus (void);      // returns GHOST_*
59       BOOL GetStatus (LPSERVERSTATUS lpss, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
60
61       PVOID GetUserParam (void);
62       void SetUserParam (PVOID pUserParam);
63
64       PVOID OpenBosObject (PVOID *phCell = NULL, ULONG *pStatus = NULL);
65       BOOL CloseBosObject (ULONG *pStatus = NULL);
66
67       PVOID OpenVosObject (PVOID *phCell = NULL, ULONG *pStatus = NULL);
68       BOOL CloseVosObject (ULONG *pStatus = NULL);
69
70       // Aggregates within a server
71       //
72       LPAGGREGATE OpenAggregate (LPTSTR pszName, ULONG *pStatus = NULL);
73       LPAGGREGATE OpenAggregate (ULONG dwID, ULONG *pStatus = NULL);
74       LPAGGREGATE AggregateFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
75       LPAGGREGATE AggregateFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
76       LPAGGREGATE AggregateFindNext (HENUM *phEnum);
77       void AggregateFindClose (HENUM *phEnum);
78
79       // Services within a server
80       //
81       LPSERVICE OpenService (LPTSTR pszName, ULONG *pStatus = NULL);
82       LPSERVICE ServiceFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
83       LPSERVICE ServiceFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
84       LPSERVICE ServiceFindNext (HENUM *phEnum);
85       void ServiceFindClose (HENUM *phEnum);
86
87    private:
88       SERVER (LPCELL lpCellParent, LPTSTR pszName);
89       ~SERVER (void);
90       void FreeAll (void);
91       void FreeAggregates (void);
92       void FreeServices (void);
93       void SendDeleteNotifications (void);
94
95       BOOL CanTalkToServer (ULONG *pStatus = NULL);
96       static DWORD WINAPI CanTalkToServer_ThreadProc (PVOID lp);
97
98       static BOOL CALLBACK KeyAggregateName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
99       static HASHVALUE CALLBACK KeyAggregateName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
100       static HASHVALUE CALLBACK KeyAggregateName_HashData (LPHASHLISTKEY pKey, PVOID pData);
101
102       static BOOL CALLBACK KeyAggregateID_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
103       static HASHVALUE CALLBACK KeyAggregateID_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
104       static HASHVALUE CALLBACK KeyAggregateID_HashData (LPHASHLISTKEY pKey, PVOID pData);
105
106       static BOOL CALLBACK KeyServiceName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
107       static HASHVALUE CALLBACK KeyServiceName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
108       static HASHVALUE CALLBACK KeyServiceName_HashData (LPHASHLISTKEY pKey, PVOID pData);
109
110    private:
111       LPIDENT m_lpiCell;
112       TCHAR   m_szName[ cchNAME ];
113
114       LPCELL  m_lpCellBOS;
115       PVOID   m_hCellBOS;
116       PVOID   m_hBOS;
117       size_t  m_cReqBOS;
118
119       PVOID   m_hCellVOS;
120       PVOID   m_hVOS;
121       size_t  m_cReqVOS;
122
123       short   m_wGhost;
124       LPIDENT m_lpiThis;
125       BOOL    m_fMonitor;
126       ULONG   m_lastStatus;
127
128       BOOL m_fCanGetAggregates;
129       BOOL m_fAggregatesOutOfDate;
130       LPHASHLIST m_lAggregates;
131       LPHASHLISTKEY m_lkAggregateName;
132       LPHASHLISTKEY m_lkAggregateID;
133
134       BOOL m_fCanGetServices;
135       BOOL m_fServicesOutOfDate;
136       LPHASHLIST m_lServices;
137       LPHASHLISTKEY m_lkServiceName;
138
139       BOOL m_fVLDBOutOfDate;
140       BOOL m_fStatusOutOfDate;
141       SERVERSTATUS m_ss;
142
143       BOOL m_fDelete;
144    };
145
146
147 #endif  // AFSCLASS_SERVER_H
148