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
11 #include <afs/param.h>
17 #include "svc_general.h"
18 #include "svc_startstop.h"
19 #include "svc_viewlog.h"
20 #include "propcache.h"
26 * PROTOTYPES _________________________________________________________________
30 BOOL CALLBACK Services_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
32 void Services_General_OnInitDialog (HWND hDlg, LPIDENT lpi);
33 void Services_General_OnApply (HWND hDlg, LPIDENT lpi);
34 void Services_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp);
35 void Services_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp);
37 BOOL CALLBACK Services_BOS_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
38 void Services_BOS_OnInitDialog (HWND hDlg, LPIDENT lpi);
39 void Services_BOS_OnEnable (HWND hDlg, LPIDENT lpi);
40 void Services_BOS_OnApply (HWND hDlg, LPIDENT lpi);
41 void Services_BOS_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi);
45 * ROUTINES ___________________________________________________________________
49 BOOL PropSheet_AddBOSTab (LPPROPSHEET psh, LPIDENT lpiService)
51 TCHAR szSvcName[ cchNAME ];
52 lpiService->GetServiceName (szSvcName);
54 if (lstrcmp (szSvcName, TEXT("BOS")))
57 return PropSheet_AddTab (psh, IDS_SVC_BOS_TAB, IDD_SVC_BOS, (DLGPROC)Services_BOS_DlgProc, (LPARAM)lpiService, TRUE);
61 void Services_ShowProperties (LPIDENT lpiService, size_t nAlerts)
65 if ((hCurrent = PropCache_Search (pcSVC_PROP, lpiService)) != NULL)
71 TCHAR szSvrName[ cchNAME ];
72 TCHAR szSvcName[ cchNAME ];
73 lpiService->GetServerName (szSvrName);
74 lpiService->GetServiceName (szSvcName);
75 LPTSTR pszTitle = FormatString (IDS_SVC_PROP_TITLE, TEXT("%s%s"), szSvrName, szSvcName);
77 LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
78 psh->fMadeCaption = TRUE;
80 if (PropSheet_AddProblemsTab (psh, IDD_SVC_PROBLEMS, lpiService, nAlerts) &&
81 PropSheet_AddTab (psh, IDS_SVC_GENERAL_TAB, IDD_SVC_GENERAL, (DLGPROC)Services_General_DlgProc, (LPARAM)lpiService, TRUE) &&
82 PropSheet_AddBOSTab (psh, lpiService))
84 PropSheet_ShowModeless (psh);
90 BOOL CALLBACK Services_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
92 if (AfsAppLib_HandleHelp (IDD_SVC_GENERAL, hDlg, msg, wp, lp))
95 if (msg == WM_INITDIALOG)
96 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
98 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
102 case WM_INITDIALOG_SHEET:
103 PropCache_Add (pcSVC_PROP, (LPIDENT)lp, hDlg);
106 case WM_DESTROY_SHEET:
107 PropCache_Delete (hDlg);
111 NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
112 Services_General_OnInitDialog (hDlg, lpi);
113 StartTask (taskSVC_PROP_INIT, hDlg, lpi);
117 DontNotifyMeEver (hDlg);
120 case WM_NOTIFY_FROM_DISPATCH:
121 if (((LPNOTIFYSTRUCT)lp)->evt == evtRefreshStatusEnd)
123 if (((LPNOTIFYSTRUCT)lp)->Params.lpi1 == lpi)
125 StartTask (taskSVC_PROP_INIT, hDlg, lpi);
128 Delete ((LPNOTIFYSTRUCT)lp);
133 if ((ptp = (LPTASKPACKET)lp) != NULL)
135 if (ptp->idTask == taskSVC_PROP_INIT)
136 Services_General_OnEndTask_InitDialog (hDlg, ptp);
137 else if (ptp->idTask == taskSVC_PROP_APPLY)
138 Services_General_OnEndTask_Apply (hDlg, ptp);
139 FreeTaskPacket (ptp);
151 Services_General_OnApply (hDlg, lpi);
154 case IDC_SVC_WARNSTOP:
155 PropSheetChanged (hDlg);
159 TCHAR szSvcName[ cchNAME ];
160 lpi->GetServiceName (szSvcName);
161 if (!lstrcmpi (szSvcName, TEXT("BOS")))
162 Services_Restart (lpi);
164 Services_Start (lpi);
171 case IDC_SVC_VIEWLOG:
172 Services_ShowServiceLog (lpi);
182 void Services_General_OnInitDialog (HWND hDlg, LPIDENT lpi)
184 TCHAR szText[ cchRESOURCE ];
187 TCHAR szSvrName[ cchNAME ];
188 TCHAR szSvcName[ cchNAME ];
189 lpi->GetServerName (szSvrName);
190 lpi->GetServiceName (szSvcName);
192 GetDlgItemText (hDlg, IDC_SVC_NAME, szText, cchRESOURCE);
193 pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szSvcName);
194 SetDlgItemText (hDlg, IDC_SVC_NAME, pszText);
195 FreeString (pszText);
197 EnableWindow (GetDlgItem (hDlg, IDC_SVC_WARNSTOP), FALSE);
198 EnableWindow (GetDlgItem (hDlg, IDC_SVC_VIEWLOG), FALSE);
199 EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), FALSE);
200 EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
202 if (!lstrcmpi (szSvcName, TEXT("BOS")))
206 GetRectInParent (GetDlgItem (hDlg, IDC_SVC_START), &rStart);
207 GetRectInParent (GetDlgItem (hDlg, IDC_SVC_STOP), &rStop);
208 DestroyWindow (GetDlgItem (hDlg, IDC_SVC_STOP));
209 SetWindowPos (GetDlgItem (hDlg, IDC_SVC_START), NULL,
210 0, 0, rStop.right-rStart.left, rStart.bottom-rStart.top,
211 SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
212 GetString (szText, IDS_SVC_RESTART_BUTTON);
213 SetDlgItemText (hDlg, IDC_SVC_START, szText);
218 void Services_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
220 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
222 TCHAR szUnknown[ cchRESOURCE ];
223 GetString (szUnknown, IDS_UNKNOWN);
227 SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szUnknown);
228 SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szUnknown);
229 SetDlgItemText (hDlg, IDC_SVC_LASTERROR, szUnknown);
230 GetString (szUnknown, IDS_SERVICESTATUS_UNKNOWN);
231 SetDlgItemText (hDlg, IDC_SVC_STATUS, szUnknown);
232 SetDlgItemText (hDlg, IDC_SVC_PARAMS, szUnknown);
233 SetDlgItemText (hDlg, IDC_SVC_NOTIFIER, szUnknown);
235 TCHAR szSvrName[ cchNAME ];
236 TCHAR szSvcName[ cchNAME ];
237 lpi->GetServerName (szSvrName);
238 lpi->GetServiceName (szSvcName);
239 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_SERVICE_STATUS, TEXT("%s%s"), szSvrName, szSvcName);
243 TCHAR szText[ cchRESOURCE ];
245 EnableWindow (GetDlgItem (hDlg, IDC_SVC_WARNSTOP), TRUE);
246 EnableWindow (GetDlgItem (hDlg, IDC_SVC_VIEWLOG), TRUE);
247 EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), TRUE);
248 EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), TRUE);
250 if (TASKDATA(ptp)->cs.type == SERVICETYPE_FS)
251 GetString (szText, IDS_SERVICETYPE_FS_LONG);
252 else if (TASKDATA(ptp)->cs.type == SERVICETYPE_CRON)
253 GetString (szText, IDS_SERVICETYPE_CRON_LONG);
254 else // (TASKDATA(ptp)->cs.type == SERVICETYPE_SIMPLE)
255 GetString (szText, IDS_SERVICETYPE_SIMPLE_LONG);
256 SetDlgItemText (hDlg, IDC_SVC_TYPE, szText);
258 LPTSTR pszParams = CloneString (TASKDATA(ptp)->cs.szParams);
259 for (LPTSTR pch = pszParams; pch && *pch; ++pch)
261 if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
264 SetDlgItemText (hDlg, IDC_SVC_PARAMS, pszParams ? pszParams : TEXT(""));
265 FreeString (pszParams);
267 LPTSTR pszNotifier = CloneString (TASKDATA(ptp)->cs.szNotifier);
268 for (pch = pszNotifier; pch && *pch; ++pch)
270 if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
273 GetString (szText, IDS_SVC_NONOTIFIER);
274 SetDlgItemText (hDlg, IDC_SVC_NOTIFIER, (pszNotifier && *pszNotifier) ? pszNotifier : szText);
275 FreeString (pszNotifier);
277 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastStart))
278 SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szUnknown);
280 SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szText);
282 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastStop))
283 SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szUnknown);
285 SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szText);
287 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastFail))
288 SetDlgItemText (hDlg, IDC_SVC_LASTERROR, szUnknown);
291 LPTSTR pszText = FormatString (IDS_SERVICE_LASTERRORDATE, TEXT("%s%ld"), szText, TASKDATA(ptp)->cs.dwErrLast);
292 SetDlgItemText (hDlg, IDC_SVC_LASTERROR, pszText);
293 FreeString (pszText);
296 if (TASKDATA(ptp)->cs.state == SERVICESTATE_RUNNING)
298 GetString (szText, IDS_SERVICESTATUS_RUNNING);
300 else if (TASKDATA(ptp)->cs.state == SERVICESTATE_STARTING)
302 EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), FALSE);
303 EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
304 GetString (szText, IDS_SERVICESTATUS_STARTING);
306 else if (TASKDATA(ptp)->cs.state == SERVICESTATE_STOPPING)
308 EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), FALSE);
309 EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
310 GetString (szText, IDS_SERVICESTATUS_STOPPING);
312 else // (TASKDATA(ptp)->cs.state == SERVICESTATE_STOPPED)
314 GetString (szText, IDS_SERVICESTATUS_STOPPED);
316 SetDlgItemText (hDlg, IDC_SVC_STATUS, szText);
318 CheckDlgButton (hDlg, IDC_SVC_WARNSTOP, (TASKDATA(ptp)->lpsp->fWarnSvcStop && TASKDATA(ptp)->lpcp->fWarnSvcStop));
323 void Services_General_OnApply (HWND hDlg, LPIDENT lpi)
325 LPSVC_PROP_APPLY_PACKET lpp;
326 if ((lpp = New (SVC_PROP_APPLY_PACKET)) != NULL)
329 lpp->fIDC_SVC_WARNSTOP = IsDlgButtonChecked (hDlg, IDC_SVC_WARNSTOP);
331 StartTask (taskSVC_PROP_APPLY, hDlg, lpp);
336 void Services_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
340 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
342 TCHAR szSvrName[ cchNAME ];
343 TCHAR szSvcName[ cchNAME ];
344 lpi->GetServerName (szSvrName);
345 lpi->GetServiceName (szSvcName);
346 ErrorDialog (ptp->status, IDS_ERROR_CHANGE_SERVICE_STATUS, TEXT("%s%s"), szSvrName, szSvcName);
351 BOOL CALLBACK Services_BOS_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
353 if (AfsAppLib_HandleHelp (IDD_SVC_BOS, hDlg, msg, wp, lp))
356 if (msg == WM_INITDIALOG)
357 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
359 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
364 Services_BOS_OnInitDialog (hDlg, lpi);
369 if ((ptp = (LPTASKPACKET)lp) != NULL)
371 if (ptp->idTask == taskSVC_GETRESTARTTIMES)
372 Services_BOS_OnEndTask_InitDialog (hDlg, ptp, lpi);
373 FreeTaskPacket (ptp);
385 Services_BOS_OnApply (hDlg, lpi);
390 Services_BOS_OnEnable (hDlg, lpi);
391 PropSheetChanged (hDlg);
394 case IDC_BOS_GENRES_DATE:
395 case IDC_BOS_GENRES_TIME:
396 case IDC_BOS_BINRES_DATE:
397 case IDC_BOS_BINRES_TIME:
398 PropSheetChanged (hDlg);
408 void Services_BOS_OnInitDialog (HWND hDlg, LPIDENT lpi)
410 TCHAR szText[ cchRESOURCE ];
413 TCHAR szSvrName[ cchNAME ];
414 TCHAR szSvcName[ cchNAME ];
415 lpi->GetServerName (szSvrName);
416 lpi->GetServiceName (szSvcName);
418 GetDlgItemText (hDlg, IDC_SVC_NAME, szText, cchRESOURCE);
419 pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szSvcName);
420 SetDlgItemText (hDlg, IDC_SVC_NAME, pszText);
421 FreeString (pszText);
423 HWND hDay = GetDlgItem (hDlg, IDC_BOS_GENRES_DATE);
424 CB_StartChange (hDay, TRUE);
425 CB_AddItem (hDay, IDS_RECUR_DAILY, (WORD)-1);
426 CB_AddItem (hDay, IDS_RECUR_SUNDAY, 0);
427 CB_AddItem (hDay, IDS_RECUR_MONDAY, 1);
428 CB_AddItem (hDay, IDS_RECUR_TUESDAY, 2);
429 CB_AddItem (hDay, IDS_RECUR_WEDNESDAY, 3);
430 CB_AddItem (hDay, IDS_RECUR_THURSDAY, 4);
431 CB_AddItem (hDay, IDS_RECUR_FRIDAY, 5);
432 CB_AddItem (hDay, IDS_RECUR_SATURDAY, 6);
433 CB_EndChange (hDay, (WORD)-1);
435 hDay = GetDlgItem (hDlg, IDC_BOS_BINRES_DATE);
436 CB_StartChange (hDay, TRUE);
437 CB_AddItem (hDay, IDS_RECUR_DAILY, (WORD)-1);
438 CB_AddItem (hDay, IDS_RECUR_SUNDAY, 0);
439 CB_AddItem (hDay, IDS_RECUR_MONDAY, 1);
440 CB_AddItem (hDay, IDS_RECUR_TUESDAY, 2);
441 CB_AddItem (hDay, IDS_RECUR_WEDNESDAY, 3);
442 CB_AddItem (hDay, IDS_RECUR_THURSDAY, 4);
443 CB_AddItem (hDay, IDS_RECUR_FRIDAY, 5);
444 CB_AddItem (hDay, IDS_RECUR_SATURDAY, 6);
445 CB_EndChange (hDay, (WORD)-1);
447 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES), FALSE);
448 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES), FALSE);
449 Services_BOS_OnEnable (hDlg, lpi);
451 LPSVC_RESTARTTIMES_PARAMS lpp = New (SVC_RESTARTTIMES_PARAMS);
452 memset (lpp, 0x00, sizeof(SVC_RESTARTTIMES_PARAMS));
454 StartTask (taskSVC_GETRESTARTTIMES, hDlg, lpp);
458 void Services_BOS_OnEnable (HWND hDlg, LPIDENT lpi)
463 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_BOS_GENRES)))
465 else if (!IsDlgButtonChecked (hDlg, IDC_BOS_GENRES))
468 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DESC1), fEnable);
469 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE), fEnable);
470 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DESC2), fEnable);
471 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME), fEnable);
474 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_BOS_BINRES)))
476 else if (!IsDlgButtonChecked (hDlg, IDC_BOS_BINRES))
479 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DESC1), fEnable);
480 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE), fEnable);
481 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DESC2), fEnable);
482 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME), fEnable);
486 void Services_BOS_OnApply (HWND hDlg, LPIDENT lpi)
488 LPSVC_RESTARTTIMES_PARAMS lpp = New (SVC_RESTARTTIMES_PARAMS);
491 lpp->fGeneral = IsDlgButtonChecked (hDlg, IDC_BOS_GENRES);
492 TI_GetTime (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME), &lpp->stGeneral);
493 lpp->stGeneral.wDayOfWeek = (WORD)CB_GetSelectedData (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE));
495 lpp->fNewBinary = IsDlgButtonChecked (hDlg, IDC_BOS_BINRES);
496 TI_GetTime (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME), &lpp->stNewBinary);
497 lpp->stNewBinary.wDayOfWeek = (WORD)CB_GetSelectedData (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE));
499 StartTask (taskSVC_SETRESTARTTIMES, NULL, lpp);
503 void Services_BOS_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi)
505 LPSVC_RESTARTTIMES_PARAMS lpp = (LPSVC_RESTARTTIMES_PARAMS)(ptp->lpUser);
509 EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES), TRUE);
510 EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES), TRUE);
512 CheckDlgButton (hDlg, IDC_BOS_GENRES, lpp->fGeneral);
515 lpp->stGeneral.wDay = 0;
516 lpp->stGeneral.wHour = 5;
517 lpp->stGeneral.wMinute = 0;
520 TI_SetTime (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME), &lpp->stGeneral);
521 CB_SetSelectedByData (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE), (LPARAM)lpp->stGeneral.wDayOfWeek);
523 CheckDlgButton (hDlg, IDC_BOS_BINRES, lpp->fNewBinary);
524 if (!lpp->fNewBinary)
526 lpp->stNewBinary.wDay = 0;
527 lpp->stNewBinary.wHour = 5;
528 lpp->stNewBinary.wMinute = 0;
531 TI_SetTime (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME), &lpp->stNewBinary);
532 CB_SetSelectedByData (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE), (LPARAM)lpp->stNewBinary.wDayOfWeek);
534 Services_BOS_OnEnable (hDlg, lpi);