Windows: conditionally set tray icon state
[openafs.git] / src / WINNT / client_config / tab_general.cpp
index 3676005..4994c2b 100644 (file)
@@ -7,9 +7,17 @@
  * directory or online at http://www.openafs.org/dl/license10.html
  */
 
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
 extern "C" {
+#include <afsconfig.h>
 #include <afs/param.h>
+#include <roken.h>
 #include <afs/stds.h>
+#include <afs/cm.h>
+#include <rx/rxkad.h>
+#include <afs/cm_config.h>
 }
 
 #include "afs_config.h"
@@ -17,6 +25,8 @@ extern "C" {
 #include "tab_hosts.h"
 #include "tab_advanced.h"
 
+#include "drivemap.h"
+#include <adssts.h>
 
 /*
  * VARIABLES __________________________________________________________________
@@ -70,7 +80,6 @@ BOOL fIsCellInCellServDB (LPCTSTR pszCell);
 BOOL CALLBACK Status_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
 void Status_OnRefresh (HWND hDlg);
 
-
 /*
  * ROUTINES ___________________________________________________________________
  *
@@ -98,9 +107,9 @@ BOOL CALLBACK GeneralTab_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
             {
             case IDAPPLY:
                if (!GeneralTab_OnApply (hDlg, FALSE, TRUE))
-                  SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
+                  SetWindowLongPtr (hDlg, DWLP_MSGRESULT, TRUE);
                else if (g.fIsWinNT && !GeneralTab_AskIfStopped (hDlg))
-                  SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
+                  SetWindowLongPtr (hDlg, DWLP_MSGRESULT, TRUE);
                break;
 
             case IDC_REFRESH:
@@ -220,13 +229,12 @@ BOOL GeneralTab_VerifyOK (HWND hDlg, BOOL fComplainIfInvalid)
    return TRUE;
 }
 
-
 BOOL GeneralTab_OnApply (HWND hDlg, BOOL fForce, BOOL fComplainIfInvalid)
 {
    if (!fForce)
       {
       // Don't try to do anything if we've already failed the apply
-      if (GetWindowLong (hDlg, DWL_MSGRESULT))
+      if (GetWindowLongPtr (hDlg, DWLP_MSGRESULT))
          return FALSE;
       }
 
@@ -260,12 +268,12 @@ BOOL GeneralTab_OnApply (HWND hDlg, BOOL fForce, BOOL fComplainIfInvalid)
    BOOL fLogonAuthent = IsDlgButtonChecked (hDlg, IDC_LOGON);
    if (fLogonAuthent != g.Configuration.fLogonAuthent)
       {
-      if (!Config_SetAuthentFlag (fLogonAuthent))
-         return FALSE;
+      SetBitLogonOption(fLogonAuthent,LOGON_OPTION_INTEGRATED);
       g.Configuration.fLogonAuthent = fLogonAuthent;
       }
 
-   Config_SetTrayIconFlag (IsDlgButtonChecked (hDlg, IDC_TRAYICON));
+  if (GetDlgItem(hDlg, IDC_TRAYICON) != NULL)
+      Config_SetTrayIconFlag (IsDlgButtonChecked(hDlg, IDC_TRAYICON));
 
    if (g.fIsWinNT)
       {
@@ -325,7 +333,7 @@ void GeneralTab_OnRefresh (HWND hDlg, BOOL fRequery)
          Config_GetGatewayName (g.Configuration.szGateway);
 
       Config_GetCellName (g.Configuration.szCell);
-      Config_GetAuthentFlag (&g.Configuration.fLogonAuthent);
+      g.Configuration.fLogonAuthent=RWLogonOption(TRUE,LOGON_OPTION_INTEGRATED);
       Config_GetTrayIconFlag (&g.Configuration.fShowTrayIcon);
 
       if (!g.fIsWinNT)
@@ -406,6 +414,7 @@ void GeneralTab_OnTimer (HWND hDlg)
 {
    DWORD CurrentState = Config_GetServiceState();
    DWORD DisplayState = GeneralTab_GetDisplayState(hDlg);
+   TestAndDoMapShare(CurrentState);            //Re map mounted drives if necessary
 
    BOOL fInEndState = ((CurrentState == SERVICE_RUNNING) || (CurrentState == SERVICE_STOPPED));
    if (fInEndState && l.hStatus)
@@ -656,14 +665,30 @@ BOOL GeneralTab_AskIfStopped (HWND hDlg)
 BOOL fIsCellInCellServDB (LPCTSTR pszCell)
 {
    BOOL fFound = FALSE;
-
    CELLSERVDB CellServDB;
-   if (CSDB_ReadFile (&CellServDB, NULL))
-      {
-      if (CSDB_FindCell (&CellServDB, pszCell))
-         fFound = TRUE;
-      CSDB_FreeFile (&CellServDB);
-      }
+   char cellname[256], i;
+
+   /* we pray for all ascii cellnames */
+   for ( i=0 ; pszCell[i] && i < (sizeof(cellname)-1) ; i++ )
+       cellname[i] = pszCell[i];
+   cellname[i] = '\0';
+
+   ULONG code = cm_SearchCellRegistry(1, cellname, NULL, NULL, NULL, NULL);
+   if (code == 0)
+      fFound = TRUE;
+   if (!fFound && 
+       (code != CM_ERROR_FORCE_DNS_LOOKUP) && 
+       CSDB_ReadFile (&CellServDB, NULL))
+   {
+       if (CSDB_FindCell (&CellServDB, pszCell))
+           fFound = TRUE;
+       CSDB_FreeFile (&CellServDB);
+   }
+   if ( fFound == FALSE ) {
+       int ttl;
+       fFound = !cm_SearchCellByDNS(cellname, NULL, &ttl, NULL, NULL);
+   }
+   done:
 
    return fFound;
 }
@@ -684,6 +709,7 @@ void GeneralTab_DoStartStop (HWND hDlg, BOOL fStart, BOOL fRestart)
             {
             g.fNeedRestart = FALSE;
             if (StartService (hService, 0, 0))
+                               TestAndDoMapShare(SERVICE_START_PENDING);
                fSuccess = TRUE;
             }
          else // (!fStart)
@@ -691,6 +717,8 @@ void GeneralTab_DoStartStop (HWND hDlg, BOOL fStart, BOOL fRestart)
             SERVICE_STATUS Status;
             if (ControlService (hService, SERVICE_CONTROL_STOP, &Status))
                fSuccess = TRUE;
+                          if (g.Configuration.fLogonAuthent)
+                                  DoUnMapShare(FALSE);
             }
 
          CloseServiceHandle (hService);