///============================================================================
// Copyright (C) Microsoft Corporation, 1997 - 1999 
//
// File:    rtrcfg.h
//
// Router configuration property pages
//
//============================================================================

#ifndef _RTRCFG_H
#define _RTRCFG_H

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifndef _INFO_H
#include "info.h"
#endif

#ifndef _RTRSHEET_H
#include "rtrsheet.h"
#endif

#ifndef __IPCTRL_H
#include "ipctrl.h"
#endif

#ifndef __ATLKENV_H
#include "atlkenv.h"
#endif

#ifndef __IPCTRL_H
#include "ipctrl.h"
#endif

#ifndef _DIALOG_H_
#include "dialog.h"
#endif

#ifndef _ADDRPOOL_H
#include "addrpool.h"
#endif

template <class T> class Ptr {
public:
    T* p;
    Ptr(T* p_=NULL) : p(p_) {}
    ~Ptr(void) { delete p;}
    operator T*(void) { return p; }
    T& operator*(void) { return *p; }
    T* operator->(void) { return p; }
   Ptr& operator=(T* p_)
      {
         delete p;
         p = p_;
         return *this;
      }
};

class RtrCfgSheet;




/*---------------------------------------------------------------------------
   Struct:  AdapterData

   This structure is used to hold information about NICs and their GUIDs
 ---------------------------------------------------------------------------*/
struct AdapterData
{
   CString  m_stFriendlyName;
   CString  m_stGuid;         // the identifying guid
};

typedef CList<AdapterData, AdapterData&> AdapterList;





/*---------------------------------------------------------------------------
	Class:	DATA_SRV_IP

	Data inteface class for IP data.
 ---------------------------------------------------------------------------*/

class DATA_SRV_IP
{
public:

    DWORD   m_dwAllowNetworkAccess;  
    DWORD   m_dwOldAllowNetworkAccess;  
    DWORD   m_dwUseDhcp;             
    AddressPoolList m_addressPoolList;
    CString m_stNetworkAdapterGUID;

    DWORD   m_dwEnableIn;            
	AdapterList m_adapterList;

	//
	// Member variable that control forwarding of NETBT
	// name request broadcasts
	//

	DWORD	m_dwEnableNetbtBcastFwd;
	DWORD	m_dwOldEnableNetbtBcastFwd;
	
    // The next two variables are used by the install wizard
    // specifically for NAT
    CString m_stPrivateAdapterGUID;
    CString m_stPublicAdapterGUID;
    
    DATA_SRV_IP();

    HRESULT	LoadFromReg(LPCTSTR pServerName,
                        const RouterVersionInfo& routerVersion);
    HRESULT SaveToReg(IRouterInfo *pRouter,
                     const RouterVersionInfo& routerVersion);
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
    void	GetDefault();

    BOOL    FNeedRestart();

	HRESULT  LoadAdapters(IRouterInfo *pRouter, AdapterList *pAdapterList);
private:
	BOOL m_fNT4;
    RegKey m_regkey;
    RegKey m_regkeyNT4;
    CString         m_stServerName;
    SPIRouterInfo   m_spRouterInfo;
    RouterVersionInfo   m_routerVersion;
};




/*---------------------------------------------------------------------------
	Class:	DATA_SRV_IPX
 ---------------------------------------------------------------------------*/

class DATA_SRV_IPX
{
public:

    DWORD   m_dwAllowNetworkAccess;
    DWORD   m_dwUseAutoAddr;
    DWORD   m_dwUseSameNetNum;
    DWORD   m_dwAllowClientNetNum;
    DWORD   m_dwIpxNetFirst;
    DWORD   m_dwIpxNetLast;
    DWORD   m_dwEnableIn;

    DWORD   m_fEnableType20Broadcasts;

	DATA_SRV_IPX();

    HRESULT LoadFromReg(LPCTSTR pServerName=NULL, BOOL fNT4 =FALSE);
    HRESULT SaveToReg(IRouterInfo *pRouter);
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
    void GetDefault();

    static const int mc_nIpxNetNumRadix;

private:
	BOOL m_fNT4;
    RegKey m_regkeyNT4;
    RegKey m_regkey;
};




/*---------------------------------------------------------------------------
	Class:	DATA_SRV_NBF
 ---------------------------------------------------------------------------*/

class DATA_SRV_NBF
{
public:
    DWORD   m_dwAllowNetworkAccess;
    DWORD   m_dwOldAllowNetworkAccess;
    DWORD   m_dwEnableIn;            
	DWORD	m_dwOldEnableIn;

    DATA_SRV_NBF();

    HRESULT	LoadFromReg(LPCTSTR pServerName = NULL, BOOL fNT4 = FALSE);
    HRESULT SaveToReg();
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
    void GetDefault();

    BOOL    FNeedRestart();

private:
	BOOL	m_fNT4;
    RegKey	m_regkey;
    RegKey	m_regkeyNT4;
	CString	m_stServerName;
};




/*---------------------------------------------------------------------------
	Class:	DATA_SRV_ARAP
 ---------------------------------------------------------------------------*/

class DATA_SRV_ARAP
{
public:

    DWORD   m_dwEnableIn;             

    DATA_SRV_ARAP();

    HRESULT LoadFromReg(LPCTSTR pServerName = NULL, BOOL fNT4 = FALSE);
    HRESULT SaveToReg();
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
    void GetDefault();

private:
    RegKey m_regkey;
};




/*---------------------------------------------------------------------------
	Class:	DATA_SRV_GENERAL
 ---------------------------------------------------------------------------*/

class DATA_SRV_GENERAL
{
public:

    DWORD   m_dwRouterType;
	DWORD	m_dwOldRouterType;

    DATA_SRV_GENERAL();

    HRESULT	LoadFromReg(LPCTSTR pServerName = NULL);
    HRESULT SaveToReg();
    void	GetDefault();

    BOOL    FNeedRestart();

private:
    RegKey	m_regkey;
    CString m_stServerName;
};




//*****************************************************************
//  PPP configuration
//*****************************************************************

class DATA_SRV_PPP
{
public:

	BOOL  m_fUseMultilink;
	BOOL  m_fUseBACP;
	BOOL  m_fUseLCPExtensions;
	BOOL  m_fUseSwCompression;
	
	DATA_SRV_PPP();
	
    HRESULT LoadFromReg(LPCTSTR pServerName,
						const RouterVersionInfo& routerVersion);
    HRESULT SaveToReg();
    void GetDefault();

private:
    RegKey m_regkey;
	
};




/*---------------------------------------------------------------------------
   Struct:  AuthProviderData

   This structure is used to hold information for Authentication AND
   Accounting providers.
 ---------------------------------------------------------------------------*/
struct AuthProviderData
{
   // The following fields will hold data for ALL auth/acct/EAP providers
   CString  m_stTitle;
   CString  m_stConfigCLSID;  // CLSID for config object
   CString	m_stProviderTypeGUID;	// GUID for the provider type

   // These fields are used by auth/acct providers.
   CString  m_stGuid;         // the identifying guid
   
   // This flag is used for EAP providers
   CString	m_stKey;			// name of registry key (for this provider)
   BOOL  m_fSupportsEncryption;  // used by EAP provider data
   DWORD	m_dwFlags;

   BOOL		m_fConfiguredInThisSession;
};

typedef CList<AuthProviderData, AuthProviderData&> AuthProviderList;





/*---------------------------------------------------------------------------
	Class:	DATA_SRV_AUTH
 ---------------------------------------------------------------------------*/
#define DATA_SRV_AUTH_MAX_SHARED_KEY_LEN		255
class DATA_SRV_AUTH
{
public:

	// The authentication data (as read in from the Rasman flags parameter)
	DWORD m_dwFlags;
	
	// The original auth provider
	CString  m_stGuidOriginalAuthProv;
	
	// The original acct provider
	CString  m_stGuidOriginalAcctProv;
	
	// The current authentication provider
	CString  m_stGuidActiveAuthProv;
	
	// The current accounting provider
	CString  m_stGuidActiveAcctProv;

	//Flag which tells us if the router service is running
	BOOL	m_fRouterRunning;
	// Flag indicating whether or not to use Custom IPSEC policy ( preshared key )
	BOOL	m_fUseCustomIPSecPolicy;

	// Current Preshared Key
	TCHAR	m_szPreSharedKey[DATA_SRV_AUTH_MAX_SHARED_KEY_LEN];

    DATA_SRV_AUTH();

	HRESULT LoadFromReg(LPCTSTR pServerName,
						const RouterVersionInfo& routerVersion);
	HRESULT SaveToReg(HWND hWnd);
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
	void GetDefault();
	
	AuthProviderList  m_authProvList;
	AuthProviderList  m_acctProvList;
	AuthProviderList  m_eapProvList;
		
	AuthProviderData *   FindProvData(AuthProviderList &provList,
									  const TCHAR *pszGuid);

private:
	RegKey   m_regkeyAuth;  // reg key of the Router\Auth
	RegKey   m_regkeyAcct;  // reg key of the Router\Acct
	RegKey   m_regkeyRasmanPPP;
	RegKey	 m_regkeyRemoteAccess;	// regkey for RemoteAccess\Parameters
	
	HRESULT  LoadEapProviders(HKEY hkeyBase, AuthProviderList *pProvList);
	HRESULT  LoadProviders(HKEY hkeyBase, AuthProviderList *pProvList);
	HRESULT	 LoadPSK();
	HRESULT  SetNewActiveAuthProvider(HWND hWnd);
	HRESULT  SetNewActiveAcctProvider(HWND hWnd);
	HRESULT  SetPSK();
	CString  m_stServer;
};



/*---------------------------------------------------------------------------
	Class:	DATA_SRV_RASERRLOG
 ---------------------------------------------------------------------------*/
class DATA_SRV_RASERRLOG
{
public:

	DWORD	m_dwLogLevel;
    DWORD   m_dwEnableFileTracing;
    DWORD   m_dwOldEnableFileTracing;
	
	DATA_SRV_RASERRLOG();
	
    HRESULT LoadFromReg(LPCTSTR pszServerName=NULL);
    HRESULT SaveToReg();
    HRESULT	UseDefaults(LPCTSTR pServerName, BOOL fNT4);
    void GetDefault();

    BOOL    FNeedRestart();


private:
    RegKey	m_regkey;
    RegKey  m_regkeyFileLogging;
	CString	m_stServer;
};




/*---------------------------------------------------------------------------
	Class:	RtrGenCfgPage

	General configuration UI
 ---------------------------------------------------------------------------*/

class RtrGenCfgPage : public RtrPropertyPage
{
public:
	RtrGenCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrGenCfgPage();

	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
    
    // Copy the control settings into the DATA_SRV_GENERAL
    void SaveSettings();

	
	//{{AFX_DATA(RtrGenCfgPage)
	//}}AFX_DATA
	
	DATA_SRV_GENERAL m_DataGeneral;
	
	//{{AFX_VIRTUAL(RtrIPCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

	void EnableRtrCtrls();

protected:

	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	
	//{{AFX_MSG(RtrGenCfgPage)
	afx_msg void OnButtonClick();
	afx_msg void OnCbSrvAsRtr();
	//}}AFX_MSG
	
	virtual BOOL OnInitDialog();
	
	DECLARE_MESSAGE_MAP()
			
};




/*---------------------------------------------------------------------------
	Class:	RtrAuthCfgPage

	Authentication configuration UI
 ---------------------------------------------------------------------------*/

class RtrAuthCfgPage : public RtrPropertyPage
{

// Construction
public:
	RtrAuthCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrAuthCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
	
	//{{AFX_DATA(RtrAuthCfgPage)
	CComboBox   m_authprov;
	CComboBox   m_acctprov;	
	//}}AFX_DATA
		   
	DATA_SRV_AUTH m_DataAuth;
	
	//{{AFX_VIRTUAL(RtrAuthCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
		
protected:
		
	DWORD				m_dwAuthFlags;    // Flags as enabled
	CString				m_stActiveAuthProv;
	CString				m_stActiveAcctProv;
	RouterVersionInfo	m_RouterInfo;
	void  FillProviderListBox(CComboBox &provCtrl,
							  AuthProviderList &provList,
							  const CString& stGuid);

	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	
	//{{AFX_MSG(RtrAuthCfgPage)
	afx_msg void OnChangeAuthProv();
	afx_msg void OnChangeAcctProv();
	afx_msg void OnConfigureAcctProv();
	afx_msg void OnConfigureAuthProv();
    afx_msg void OnAuthSettings();
	afx_msg void OnChangeCustomPolicySettings();
	afx_msg void OnChangePreSharedKey();
	//}}AFX_MSG
	
	virtual BOOL OnInitDialog();
	
	DECLARE_MESSAGE_MAP()
			
};




/*---------------------------------------------------------------------------
	Class:	RtrIPCfgPage

	IP configuration UI
 ---------------------------------------------------------------------------*/

class RtrIPCfgPage : public RtrPropertyPage
{

// Construction
public:
	RtrIPCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrIPCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
    HRESULT  SaveSettings(HWND hWnd);
	
	//{{AFX_DATA(RtrIPCfgPage)
	enum { IDD = IDD_RTR_IP };
	CComboBox   m_adapter;
	//}}AFX_DATA
	
	DATA_SRV_IP m_DataIP;
	
	//{{AFX_VIRTUAL(RtrIPCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
	
protected:
    CListCtrl   m_listCtrl;
	BOOL m_bReady;

	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	void EnableStaticPoolCtrls(BOOL fEnable) ;
	void  FillAdapterListBox(CComboBox &adapterCtrl,
							  AdapterList &adapterList,
							  const CString& stGuid);

	//{{AFX_MSG(RtrIPCfgPage)
	afx_msg void OnAllowRemoteTcpip();
	afx_msg void OnRtrEnableIPRouting();
	afx_msg void OnRtrIPRbDhcp();
	afx_msg void OnRtrIPRbPool();
	afx_msg void OnSelendOkAdapter();
	virtual BOOL OnInitDialog();
    afx_msg void OnBtnAdd();
    afx_msg void OnBtnEdit();
    afx_msg void OnBtnRemove();
	afx_msg void OnEnableNetbtBcastFwd();
    afx_msg void OnListDblClk(NMHDR *, LRESULT *);
    afx_msg void OnListChange(NMHDR *, LRESULT *);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};






/*---------------------------------------------------------------------------
	Class:	RtrIPXCfgPage

	IPX configuration UI
 ---------------------------------------------------------------------------*/

class RtrIPXCfgPage : public RtrPropertyPage
{
public:
	RtrIPXCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrIPXCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
	
	DATA_SRV_IPX m_DataIPX;

	//{{AFX_VIRTUAL(RtrIPXCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

protected:
	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	
	void EnableNetworkRangeCtrls(BOOL fEnable); 
	
	//{{AFX_MSG(RtrIPXCfgPage)
	afx_msg void OnRtrIPxRbAuto();
	afx_msg void OnRtrIPxRbPool();
	virtual BOOL OnInitDialog();
	afx_msg void OnChangeSomething();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
			
};


/*---------------------------------------------------------------------------
	Class:	RtrNBFCfgPage

	NetBEUI router configuration UI
 ---------------------------------------------------------------------------*/
class RtrNBFCfgPage : public RtrPropertyPage
{

public:
	RtrNBFCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrNBFCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
	
	DATA_SRV_NBF m_DataNBF;
	
	//{{AFX_VIRTUAL(RtrNBFCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

    // Copy the control settings into the DATA_SRV_GENERAL
    void SaveSettings();

protected:
	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	
	//{{AFX_MSG(RtrNBFCfgPage)
	afx_msg void OnButtonClick();
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};



/*---------------------------------------------------------------------------
	Class:	RtrARAPCfgPage

	Appletalk routing configuration UI
 ---------------------------------------------------------------------------*/

class RtrARAPCfgPage : public RtrPropertyPage
{
public:
	RtrARAPCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrARAPCfgPage();

	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);

	void EnableSettings(BOOL bEnable);

	//{{AFX_DATA(RtrARAPCfgPage)
	enum { IDD = IDD_RTR_ARAP };
	//}}AFX_DATA

	DATA_SRV_ARAP	m_DataARAP;

	// if the page is changed and applied
	BOOL			m_bApplied;	

	// need to access from the property sheet
    CATLKEnv m_AdapterInfo;

	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(RtrARAPCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

protected:

	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;

	//{{AFX_MSG(RtrARAPCfgPage)
	virtual BOOL OnInitDialog();
	afx_msg void OnRtrArapCbRemotearap();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};




/*---------------------------------------------------------------------------
	Class:	RtrPPPCfgPage

	PPP options configuration UI
 ---------------------------------------------------------------------------*/

class RtrPPPCfgPage : public RtrPropertyPage
{

// Construction
public:
	RtrPPPCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrPPPCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
	
	//{{AFX_DATA(RtrPPPCfgPage)
	//}}AFX_DATA
	
	DATA_SRV_PPP m_DataPPP;
	
	//{{AFX_VIRTUAL(RtrPPPCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

protected:

	virtual BOOL OnApply();
	RtrCfgSheet* m_pRtrCfgSheet;
	
	//{{AFX_MSG(RtrPPPCfgPage)
	afx_msg void OnButtonClickMultilink();
	afx_msg void OnButtonClick();
	//}}AFX_MSG
	
	virtual BOOL OnInitDialog();
	
	DECLARE_MESSAGE_MAP()

};


/*---------------------------------------------------------------------------
	Class:	RtrLogLevelCfgPage
 ---------------------------------------------------------------------------*/
class RtrLogLevelCfgPage : public RtrPropertyPage
{

// Construction
public:
	RtrLogLevelCfgPage(UINT nIDTemplate, UINT nIDCaption = 0);
	~RtrLogLevelCfgPage();
	
	HRESULT  Init(RtrCfgSheet * pRtrCfgSheet,
				  const RouterVersionInfo& routerVersion);
	
	//{{AFX_DATA(RtrLogLevelCfgPage)
	//}}AFX_DATA
	
	DATA_SRV_RASERRLOG m_DataRASErrLog;
	
	//{{AFX_VIRTUAL(RtrLogLevelCfgPage)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

protected:

	virtual BOOL OnApply();
	
	RtrCfgSheet* m_pRtrCfgSheet;
	
	//{{AFX_MSG(RtrLogLevelCfgPage)
	afx_msg void OnButtonClick();
	//}}AFX_MSG
	
	virtual BOOL OnInitDialog();
	
    // Copy the control settings into the DATA_SRV_GENERAL
    void SaveSettings();

	DECLARE_MESSAGE_MAP()

};



/*---------------------------------------------------------------------------
	Class:	RtrCfgSheet

	Router configuration property sheet
 ---------------------------------------------------------------------------*/
class RtrCfgSheet :
   public RtrPropertySheet
{
public:
	RtrCfgSheet(ITFSNode *pNode,
				IRouterInfo *pRouter,
				IComponentData *pComponentData,
				ITFSComponentData *pTFSCompData,
				LPCTSTR pszSheetName,
				CWnd *pParent = NULL,
				UINT iPage=0,
				BOOL fScopePane = TRUE);
	
	~RtrCfgSheet();
	
	HRESULT  Init(LPCTSTR pServerName);
	
	virtual BOOL SaveSheetData();
	
	CString m_stServerName;
	BOOL    m_fNT4;
    RouterVersionInfo   m_routerVersion;
	
	SPIRouterInfo	m_spRouter;

    // Helper function - this will prompt the user, stop the service,
    // save changes, and then restart.  This is for those changes
    // that require a restart.  It is placed in a separate function
    // so that the various pages may call this.  The restart will occur
    // only once though.
    // ----------------------------------------------------------------
    HRESULT SaveRequiredRestartChanges(HWND hWnd);
    
	
protected:

	friend class	RtrGenCfgPage;
	friend class	RtrAuthCfgPage;
	friend class	RtrIPCfgPage;
	friend class	RtrIPXCfgPage;
	friend class	RtrNBFCfgPage;
	friend class	RtrARAPCfgPage;

	BOOL m_fIpxLoaded;
	BOOL m_fIpLoaded;
	BOOL m_fNbfLoaded;
	BOOL m_fARAPLoaded;
	
	Ptr<RtrIPCfgPage>       m_pRtrIPCfgPage;
	Ptr<RtrIPXCfgPage>      m_pRtrIPXCfgPage;
	Ptr<RtrNBFCfgPage>      m_pRtrNBFCfgPage;
	Ptr<RtrARAPCfgPage>     m_pRtrARAPCfgPage;
	Ptr<RtrGenCfgPage>      m_pRtrGenCfgPage;
	Ptr<RtrAuthCfgPage>     m_pRtrAuthCfgPage;
	Ptr<RtrPPPCfgPage>      m_pRtrPPPCfgPage;
	Ptr<RtrLogLevelCfgPage>	m_pRtrLogLevelCfgPage;
	
   SPITFSNode           m_spNode;
};



/*---------------------------------------------------------------------------
   class:   EAPConfigurationDlg

   Brings up the list of EAP providers (along with a configure button).
 ---------------------------------------------------------------------------*/

class EAPConfigurationDialog : public CBaseDialog
{
public:
	EAPConfigurationDialog(LPCTSTR pszMachine,
						   AuthProviderList *pProvList) :
			CBaseDialog(IDD_RTR_EAP_CFG),
			m_pProvList(pProvList),
			m_stMachine(pszMachine)
   {};
	~EAPConfigurationDialog();

protected:
	AuthProviderList *m_pProvList;   
	CString        m_stMachine;   // name of the server
	
	CListBox    m_listBox;
	
	//{{AFX_VIRTUAL(EAPConfigurationDialog)
protected:
	virtual VOID   DoDataExchange(CDataExchange *pDX);
	virtual BOOL OnInitDialog();  
	//}}AFX_VIRTUAL
	
	afx_msg  void  OnListChange();

	// config buttion is moved to NAP/Profile/Authentication page
	//	afx_msg  void  OnConfigure();
	
	DECLARE_MESSAGE_MAP()

};

/*---------------------------------------------------------------------------
	Class: AuthenticationSettingsDialog
 ---------------------------------------------------------------------------*/
class AuthenticationSettingsDialog : public CBaseDialog
{
public:
	AuthenticationSettingsDialog(LPCTSTR pszServerName,
                                 AuthProviderList *pProvList) :
			CBaseDialog(IDD_AUTHENTICATION_SETTINGS),
            m_dwFlags(0),
            m_stMachine(pszServerName),
            m_pProvList(pProvList)
   {};

    void    SetAuthFlags(DWORD dwFlags);
    DWORD   GetAuthFlags();

protected:

	void  CheckAuthenticationControls(DWORD dwFlags);
    
    // Read the state of the flags from the checkboxes in the UI
    void    ReadFlagState();

    DWORD   m_dwFlags;

    // Used by the EAP dialog
	AuthProviderList *m_pProvList;   
	CString        m_stMachine;   // name of the server
    
	//{{AFX_VIRTUAL(AuthenticationSettingsDialog)
protected:
	afx_msg void    OnRtrAuthCfgEAP();
	virtual VOID    DoDataExchange(CDataExchange *pDX);
	virtual BOOL    OnInitDialog();
    virtual void    OnOK();
	//}}AFX_VIRTUAL
	

	DECLARE_MESSAGE_MAP()

};




#endif _RTRCFG_H