// Copyright (c) 2001 Microsoft Corporation
//
// File:      DNSInstallationUnit.h
//
// Synopsis:  Declares a DNSInstallationUnit
//            This object has the knowledge for installing the
//            DNS service
//
// History:   02/05/2001  JeffJon Created

#ifndef __CYS_DNSINSTALLATIONUNIT_H
#define __CYS_DNSINSTALLATIONUNIT_H

#include "NetworkInterface.h"
#include "ExpressPathInstallationUnitBase.h"

class DNSInstallationUnit : public ExpressPathInstallationUnitBase
{
   public:
      
      // Constructor

      DNSInstallationUnit();

      // Destructor
      virtual
      ~DNSInstallationUnit();

      
      // Installation Unit overrides

      virtual
      InstallationReturnType
      InstallService(HANDLE logfileHandle, HWND hwnd);

      virtual
      UnInstallReturnType
      UnInstallService(HANDLE logfileHandle, HWND hwnd);

      virtual
      InstallationReturnType 
      ExpressPathInstall(HANDLE logfileHandle, HWND hwnd);

      virtual
      bool
      GetMilestoneText(String& message);

      virtual
      bool
      GetUninstallMilestoneText(String& message);

      virtual
      String
      GetUninstallWarningText();

      virtual
      String
      GetFinishText();

      virtual
      String
      GetServiceDescription();

      virtual
      void
      ServerRoleLinkSelected(int linkIndex, HWND hwnd);

      virtual
      void
      FinishLinkSelected(int inkIndex, HWND hwnd);

      void
      SetStaticIPAddress(DWORD ipaddress);

      DWORD
      GetStaticIPAddress();

      String
      GetStaticIPAddressString();

      void
      SetSubnetMask(DWORD mask);

      DWORD
      GetSubnetMask();

      String
      GetSubnetMaskString();

      void
      SetForwarder(DWORD forwarderAddress);

      void
      GetForwarders(IPAddressList& forwarders) const;

      bool
      IsManualForwarder() const;

   private:

      enum DNSRoleResult
      {
         DNS_SUCCESS,
         DNS_INSTALL_FAILURE,
         DNS_CONFIG_FAILURE,
         DNS_SERVICE_START_FAILURE
      };

      bool
      ReadConfigWizardRegkeys(String& configWizardResults) const;

      void
      SetForwardersForExpressPath();

      DNSRoleResult dnsRoleResult;

      // Express path members

      DWORD staticIPAddress;
      DWORD subnetMask;
      DWORD forwarderIPAddress;
      bool  manualForwarder;

      unsigned int installedDescriptionID;
};

#endif // __CYS_DNSINSTALLATIONUNIT_H