rx: Remove RX_CALL_BUSY
[openafs.git] / src / WINNT / afssvrmgr / svr_prop.cpp
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 #include <winsock2.h>
11 #include <ws2tcpip.h>
12
13 extern "C" {
14 #include <afsconfig.h>
15 #include <afs/param.h>
16 #include <roken.h>
17 }
18
19 #include "svrmgr.h"
20 #include "svr_prop.h"
21 #include "svr_address.h"
22 #include "svr_general.h"
23 #include "problems.h"
24 #include "propcache.h"
25
26
27
28 /*
29  * PROTOTYPES _________________________________________________________________
30  *
31  */
32
33 BOOL CALLBACK Server_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
34 BOOL CALLBACK Server_Scout_DlgProc   (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
35
36 void Server_General_OnInitDialog (HWND hDlg, LPIDENT lpiServer);
37 void Server_General_OnEndTask_InitDialog (HWND hDlg, LPIDENT lpiServer, LPTASKPACKET ptp);
38 void Server_General_OnAuth (HWND hDlg, LPIDENT lpiServer, BOOL fEnableAuth);
39 void Server_General_OnChangeAddr (HWND hDlg, LPIDENT lpiServer);
40
41 void Server_Scout_OnInitDialog (HWND hDlg, LPIDENT lpiServer);
42 void Server_Scout_OnApply (HWND hDlg, LPIDENT lpiServer);
43 void Server_Scout_OnAggWarn (HWND hDlg, LPIDENT lpiServer);
44 void Server_Scout_OnSetWarn (HWND hDlg, LPIDENT lpiServer);
45 void Server_Scout_OnAutoRefresh (HWND hDlg, LPIDENT lpiServer);
46 void Server_Scout_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp);
47 void Server_Scout_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp);
48
49
50 /*
51  * ROUTINES ___________________________________________________________________
52  *
53  */
54
55 void Server_ShowProperties (LPIDENT lpiServer, size_t nAlerts)
56 {
57    HWND hCurrent;
58
59    if ((hCurrent = PropCache_Search (pcSVR_PROP, lpiServer)) != NULL)
60       {
61       SetFocus (hCurrent);
62       }
63    else
64       {
65       TCHAR szName[ cchNAME ];
66       lpiServer->GetServerName (szName);
67       LPTSTR pszTitle = FormatString (IDS_SVR_PROP_TITLE, TEXT("%s"), szName);
68
69       LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
70       psh->fMadeCaption = TRUE;
71
72       if ( (PropSheet_AddProblemsTab (psh, IDD_SVR_PROBLEMS, lpiServer, nAlerts)) &&
73            (PropSheet_AddTab (psh, IDS_SVR_GENERAL_TAB, IDD_SVR_GENERAL, (DLGPROC)Server_General_DlgProc, (LPARAM)lpiServer, TRUE)) &&
74            (PropSheet_AddTab (psh, IDS_SVR_SCOUT_TAB,   IDD_SVR_SCOUT,   (DLGPROC)Server_Scout_DlgProc,   (LPARAM)lpiServer, TRUE)) )
75          {
76          PropSheet_ShowModeless (psh);
77          }
78       }
79 }
80
81
82 BOOL CALLBACK Server_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
83 {
84    if (AfsAppLib_HandleHelp (IDD_SVR_GENERAL, hDlg, msg, wp, lp))
85       return TRUE;
86
87    if (msg == WM_INITDIALOG)
88       SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
89
90    LPIDENT lpiServer = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
91
92    switch (msg)
93       {
94       case WM_INITDIALOG_SHEET:
95          PropCache_Add (pcSVR_PROP, (LPIDENT)lp, hDlg);
96          break;
97
98       case WM_DESTROY_SHEET:
99          PropCache_Delete (hDlg);
100          break;
101
102       case WM_INITDIALOG:
103          Server_General_OnInitDialog (hDlg, lpiServer);
104          StartTask (taskSVR_PROP_INIT, hDlg, lpiServer);
105          break;
106
107       case WM_DESTROY:
108          SetWindowLongPtr (hDlg, DWLP_USER, 0);
109          break;
110
111       case WM_ENDTASK:
112          LPTASKPACKET ptp;
113          if ((ptp = (LPTASKPACKET)lp) != NULL)
114             {
115             if (ptp->idTask == taskSVR_PROP_INIT)
116                Server_General_OnEndTask_InitDialog (hDlg, lpiServer, ptp);
117             FreeTaskPacket (ptp);
118             }
119          break;
120
121       case WM_COMMAND:
122          switch (LOWORD(wp))
123             {
124             case IDOK:
125             case IDCANCEL:
126                break;
127
128             case IDC_SVR_AUTH_YES:
129                Server_General_OnAuth (hDlg, lpiServer, TRUE);
130                break;
131
132             case IDC_SVR_AUTH_NO:
133                Server_General_OnAuth (hDlg, lpiServer, FALSE);
134                break;
135
136             case IDC_SVR_CHANGEADDR:
137                Server_General_OnChangeAddr (hDlg, lpiServer);
138                break;
139             }
140          break;
141
142       case WM_CTLCOLORLISTBOX:
143          if ((HWND)lp == GetDlgItem (hDlg, IDC_SVR_ADDRESSES))
144             {
145             SetBkColor ((HDC)wp, GetSysColor (COLOR_BTNFACE));
146             return CreateSolidBrush (GetSysColor (COLOR_BTNFACE))?TRUE:FALSE;
147             }
148          break;
149       }
150
151    return FALSE;
152 }
153
154
155 void Server_General_OnInitDialog (HWND hDlg, LPIDENT lpiServer)
156 {
157    TCHAR szText[ cchRESOURCE ];
158    lpiServer->GetServerName (szText);
159    SetDlgItemText (hDlg, IDC_SVR_NAME, szText);
160
161    EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTH_YES), FALSE);
162    EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTH_NO), FALSE);
163    EnableWindow (GetDlgItem (hDlg, IDC_SVR_CHANGEADDR), FALSE);
164 }
165
166
167 void Server_General_OnEndTask_InitDialog (HWND hDlg, LPIDENT lpiServer, LPTASKPACKET ptp)
168 {
169    TCHAR szText[ cchRESOURCE ];
170    if (!ptp->rc)
171       {
172       GetString (szText, IDS_UNKNOWN);
173       SetDlgItemText (hDlg, IDC_SVR_NUMAGGREGATES, szText);
174       SetDlgItemText (hDlg, IDC_SVR_CAPACITY, szText);
175       SetDlgItemText (hDlg, IDC_SVR_ALLOCATION, szText);
176
177       LB_StartChange (GetDlgItem (hDlg, IDC_SVR_ADDRESSES), TRUE);
178       LB_AddItem (GetDlgItem (hDlg, IDC_SVR_ADDRESSES), szText, (LPARAM)-1);
179       LB_EndChange (GetDlgItem (hDlg, IDC_SVR_ADDRESSES), (LPARAM)-1);
180
181       lpiServer->GetServerName (szText);
182       ErrorDialog (ptp->status, IDS_ERROR_REFRESH_SERVER_STATUS, TEXT("%s"), szText);
183       }
184    else
185       {
186       EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTH_YES), TRUE);
187       EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTH_NO), TRUE);
188       EnableWindow (GetDlgItem (hDlg, IDC_SVR_CHANGEADDR), TRUE);
189
190       wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->nAggr);
191       SetDlgItemText (hDlg, IDC_SVR_NUMAGGREGATES, szText);
192
193       LPTSTR pszText = FormatString (IDS_SVR_CAPACITY, TEXT("%.1B"), (double)TASKDATA(ptp)->ckCapacity * 1024.0);
194       SetDlgItemText (hDlg, IDC_SVR_CAPACITY, pszText);
195       FreeString (pszText);
196
197       DWORD dwPercentUsed = 100;
198       if (TASKDATA(ptp)->ckCapacity)
199          dwPercentUsed = (DWORD)( (double)100 * TASKDATA(ptp)->ckAllocation / TASKDATA(ptp)->ckCapacity );
200       pszText = FormatString (IDS_SVR_ALLOCATION, TEXT("%.1B%lu"), (double)TASKDATA(ptp)->ckAllocation * 1024.0, dwPercentUsed);
201       SetDlgItemText (hDlg, IDC_SVR_ALLOCATION, pszText);
202       FreeString (pszText);
203
204       Server_FillAddrList (hDlg, &TASKDATA(ptp)->ss);
205       }
206 }
207
208
209
210 void Server_General_OnAuth (HWND hDlg, LPIDENT lpiServer, BOOL fEnable)
211 {
212    if (!fEnable)
213       {
214       if (Message (MB_YESNO | MB_ICONASTERISK, IDS_WARN_TITLE, IDS_WARN_DISABLE_AUTH) != IDYES)
215          return;
216       }
217
218    LPSVR_SETAUTH_PARAMS lpp = New (SVR_SETAUTH_PARAMS);
219    lpp->lpiServer = lpiServer;
220    lpp->fEnableAuth = fEnable;
221    StartTask (taskSVR_SETAUTH, NULL, lpp);
222 }
223
224
225 void Server_General_OnChangeAddr (HWND hDlg, LPIDENT lpiServer)
226 {
227    LPSVR_CHANGEADDR_PARAMS lpp = New (SVR_CHANGEADDR_PARAMS);
228    memset (lpp, 0x00, sizeof(SVR_CHANGEADDR_PARAMS));
229    lpp->lpiServer = lpiServer;
230
231    if (ModalDialogParam (IDD_SVR_ADDRESS, hDlg, (DLGPROC)ChangeAddr_DlgProc, (LPARAM)lpp) == IDOK)
232       {
233       StartTask (taskSVR_CHANGEADDR, NULL, lpp);
234       }
235    else
236       {
237       Delete (lpp);
238       }
239 }
240
241
242 BOOL CALLBACK Server_Scout_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
243 {
244    if (AfsAppLib_HandleHelp (IDD_SVR_SCOUT, hDlg, msg, wp, lp))
245       return TRUE;
246
247    if (msg == WM_INITDIALOG)
248       SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
249
250    LPIDENT lpiServer = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
251
252    switch (msg)
253       {
254       case WM_INITDIALOG:
255          Server_Scout_OnInitDialog (hDlg, lpiServer);
256          StartTask (taskSVR_SCOUT_INIT, hDlg, lpiServer);
257          break;
258
259       case WM_ENDTASK:
260          LPTASKPACKET ptp;
261          if ((ptp = (LPTASKPACKET)lp) != NULL)
262             {
263             if (ptp->idTask == taskSVR_SCOUT_INIT)
264                Server_Scout_OnEndTask_InitDialog (hDlg, ptp);
265             else if (ptp->idTask == taskSVR_SCOUT_APPLY)
266                Server_Scout_OnEndTask_Apply (hDlg, ptp);
267             FreeTaskPacket (ptp);
268             }
269          break;
270
271       case WM_COMMAND:
272          switch (LOWORD(wp))
273             {
274             case IDOK:
275             case IDCANCEL:
276                break;
277
278             case IDAPPLY:
279                Server_Scout_OnApply (hDlg, lpiServer);
280                break;
281
282             case IDC_SVR_WARN_AGGFULL:
283                Server_Scout_OnAggWarn (hDlg, lpiServer);
284                PropSheetChanged (hDlg);
285                break;
286
287             case IDC_SVR_WARN_SETFULL:
288                Server_Scout_OnSetWarn (hDlg, lpiServer);
289                PropSheetChanged (hDlg);
290                break;
291
292             case IDC_SVR_WARN_AGGALLOC:
293             case IDC_SVR_WARN_SVCSTOP:
294             case IDC_SVR_WARN_TIMEOUT:
295             case IDC_SVR_WARN_SETNOVLDB:
296             case IDC_SVR_WARN_SETNOSERV:
297             case IDC_SVR_WARN_AGGFULL_PERCENT:
298             case IDC_SVR_WARN_SETFULL_PERCENT:
299             case IDC_SVR_AUTOREFRESH_MINUTES:
300                PropSheetChanged (hDlg);
301                break;
302
303             case IDC_SVR_AUTOREFRESH:
304                Server_Scout_OnAutoRefresh (hDlg, lpiServer);
305                PropSheetChanged (hDlg);
306                break;
307             }
308          break;
309       }
310
311    return FALSE;
312 }
313
314
315 void Server_Scout_OnInitDialog (HWND hDlg, LPIDENT lpiServer)
316 {
317    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL), FALSE);
318    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL_PERCENT), FALSE);
319    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL), FALSE);
320    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL_PERCENT), FALSE);
321    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGALLOC), FALSE);
322    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SVCSTOP), FALSE);
323    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_TIMEOUT), FALSE);
324    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETNOVLDB), FALSE);
325    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETNOSERV), FALSE);
326    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGNOSERV), FALSE);
327    EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH), FALSE);
328    EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH_MINUTES), FALSE);
329 }
330
331
332 void Server_Scout_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
333 {
334    LPIDENT lpiServer = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
335
336    if (!ptp->rc)
337       {
338       TCHAR szText[ cchNAME ];
339       lpiServer->GetServerName (szText);
340       ErrorDialog (ptp->status, IDS_ERROR_REFRESH_SERVER_STATUS, TEXT("%s"), szText);
341       }
342    else
343       {
344       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL), TRUE);
345       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL_PERCENT), TRUE);
346       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL), TRUE);
347       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL_PERCENT), TRUE);
348       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGALLOC), TRUE);
349       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SVCSTOP), TRUE);
350       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_TIMEOUT), TRUE);
351       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETNOVLDB), TRUE);
352       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETNOSERV), TRUE);
353       EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGNOSERV), TRUE);
354       EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH), TRUE);
355       EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH_MINUTES), TRUE);
356
357       CheckDlgButton (hDlg, IDC_SVR_WARN_AGGFULL, (TASKDATA(ptp)->lpsp->perWarnAggFull != 0));
358       CheckDlgButton (hDlg, IDC_SVR_WARN_SETFULL, (TASKDATA(ptp)->lpsp->perWarnSetFull != 0));
359       CheckDlgButton (hDlg, IDC_SVR_WARN_AGGALLOC, TASKDATA(ptp)->lpsp->fWarnAggAlloc);
360       CheckDlgButton (hDlg, IDC_SVR_WARN_SVCSTOP, TASKDATA(ptp)->lpsp->fWarnSvcStop);
361       CheckDlgButton (hDlg, IDC_SVR_WARN_TIMEOUT, TASKDATA(ptp)->lpsp->fWarnSvrTimeout);
362       CheckDlgButton (hDlg, IDC_SVR_WARN_SETNOVLDB, TASKDATA(ptp)->lpsp->fWarnSetNoVLDB);
363       CheckDlgButton (hDlg, IDC_SVR_WARN_SETNOSERV, TASKDATA(ptp)->lpsp->fWarnSetNoServ);
364       CheckDlgButton (hDlg, IDC_SVR_WARN_AGGNOSERV, TASKDATA(ptp)->lpsp->fWarnAggNoServ);
365
366       CheckDlgButton (hDlg, IDC_SVR_AUTOREFRESH, (TASKDATA(ptp)->lpsp->oa.cTickRefresh != 0));
367
368       CreateSpinner (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH_MINUTES),
369                      10, FALSE,  // base, signed
370                      1,
371                      TASKDATA(ptp)->lpsp->oa.cTickRefresh / cmsec1MINUTE,
372                      60L * 24L);  // maximum refresh rate of one day
373
374       Server_Scout_OnAutoRefresh (hDlg, lpiServer);
375
376
377       CreateSpinner (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL_PERCENT),
378                      10, FALSE,  // base, signed
379                      1,
380                      (TASKDATA(ptp)->lpsp->perWarnAggFull == 0) ? perDEFAULT_AGGFULL_WARNING : TASKDATA(ptp)->lpsp->perWarnAggFull,
381                      100L);
382
383       Server_Scout_OnAggWarn (hDlg, lpiServer);
384
385       CreateSpinner (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL_PERCENT),
386                      10, FALSE,  // base, signed
387                      1,
388                      (TASKDATA(ptp)->lpsp->perWarnSetFull == 0) ? perDEFAULT_SETFULL_WARNING : TASKDATA(ptp)->lpsp->perWarnSetFull,
389                      100L);
390
391       Server_Scout_OnSetWarn (hDlg, lpiServer);
392       }
393 }
394
395
396 void Server_Scout_OnApply (HWND hDlg, LPIDENT lpiServer)
397 {
398    LPSVR_SCOUT_APPLY_PACKET lpp;
399
400    if ((lpp = New (SVR_SCOUT_APPLY_PACKET)) != NULL)
401       {
402       lpp->lpiServer = lpiServer;
403
404       lpp->fIDC_SVR_WARN_AGGFULL = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_AGGFULL);
405       lpp->wIDC_SVR_WARN_AGGFULL_PERCENT = (short)SP_GetPos (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL_PERCENT));
406
407       lpp->fIDC_SVR_WARN_SETFULL = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_SETFULL);
408       lpp->wIDC_SVR_WARN_SETFULL_PERCENT = (short)SP_GetPos (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL_PERCENT));
409
410       lpp->fIDC_SVR_WARN_AGGALLOC = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_AGGALLOC);
411       lpp->fIDC_SVR_WARN_SVCSTOP = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_SVCSTOP);
412       lpp->fIDC_SVR_WARN_TIMEOUT = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_TIMEOUT);
413       lpp->fIDC_SVR_WARN_SETNOVLDB = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_SETNOVLDB);
414       lpp->fIDC_SVR_WARN_SETNOSERV = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_SETNOSERV);
415       lpp->fIDC_SVR_WARN_AGGNOSERV = IsDlgButtonChecked (hDlg, IDC_SVR_WARN_AGGNOSERV);
416
417       lpp->fIDC_SVR_AUTOREFRESH = IsDlgButtonChecked (hDlg, IDC_SVR_AUTOREFRESH);
418       lpp->dwIDC_SVR_AUTOREFRESH_MINUTES = SP_GetPos (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH_MINUTES));
419
420       StartTask (taskSVR_SCOUT_APPLY, hDlg, lpp);
421       }
422 }
423
424
425 void Server_Scout_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
426 {
427    if (!ptp->rc)
428       {
429       LPIDENT lpiServer = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
430
431       TCHAR szText[ cchNAME ];
432       lpiServer->GetServerName (szText);
433       ErrorDialog (ptp->status, IDS_ERROR_CHANGE_SERVER_STATUS, TEXT("%s"), szText);
434       }
435 }
436
437
438 void Server_Scout_OnAggWarn (HWND hDlg, LPIDENT lpiServer)
439 {
440    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_AGGFULL_PERCENT),
441                  IsDlgButtonChecked (hDlg, IDC_SVR_WARN_AGGFULL));
442 }
443
444
445 void Server_Scout_OnSetWarn (HWND hDlg, LPIDENT lpiServer)
446 {
447    EnableWindow (GetDlgItem (hDlg, IDC_SVR_WARN_SETFULL_PERCENT),
448                  IsDlgButtonChecked (hDlg, IDC_SVR_WARN_SETFULL));
449 }
450
451
452 void Server_Scout_OnAutoRefresh (HWND hDlg, LPIDENT lpiServer)
453 {
454    EnableWindow (GetDlgItem (hDlg, IDC_SVR_AUTOREFRESH_MINUTES),
455                  IsDlgButtonChecked (hDlg, IDC_SVR_AUTOREFRESH));
456 }
457