/**********************************************************************/
/**                       Microsoft Windows/NT                       **/
/**                Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/

/*
	config.h
		Registry Values for WINS
		
    FILE HISTORY:
        
*/

#ifndef _CONFIG_H_
#define _CONFIG_H_

class CConfiguration
{
public:
    CConfiguration(CString strNetBIOSName = _T(""));
    ~CConfiguration();

// operator overriding
	CConfiguration& operator =(const CConfiguration& configuration);

public:
    const BOOL IsReady() const
    {
        return !m_strNetBIOSName.IsEmpty();
    }

    void SetOwner(CString strNetBIOSName)
    {
        m_strNetBIOSName = strNetBIOSName;   
    }

	LPCTSTR GetOwner()
	{
		return m_strNetBIOSName;
	}

    HRESULT Touch();
    HRESULT Load(handle_t hBinding);
    HRESULT Store();

    DWORD   GetSystemVersion();
	BOOL	IsNt5();
    BOOL    FSupportsOwnerId();
    BOOL    IsAdmin();

public:
	// entries under HKEY_LOCAL_MACHINE\system\currentcontrolset\services\wins
    DWORD		m_dwRefreshInterval;
    DWORD		m_dwTombstoneInterval;
    DWORD		m_dwTombstoneTimeout;
    DWORD		m_dwVerifyInterval;
    DWORD		m_dwVersCountStart_LowWord;
    DWORD		m_dwVersCountStart_HighWord;
    DWORD		m_dwNumberOfWorkerThreads;
	
	// PUSH partner stuff
    BOOL        m_fPushInitialReplication;
    BOOL        m_fPushReplOnAddrChange;
	DWORD		m_dwPushUpdateCount;
	DWORD		m_dwPushPersistence;

    // PULL partner suff
	BOOL        m_fPullInitialReplication;
    DWORD		m_dwPullTimeInterval;
	DWORD		m_dwPullSpTime;
	DWORD		m_dwPullPersistence;
    DWORD		m_dwPullRetryCount;

    BOOL        m_fLoggingOn;
    BOOL        m_fRplOnlyWithPartners;
    BOOL        m_fLogDetailedEvents;
    BOOL        m_fBackupOnTermination;
    BOOL        m_fMigrateOn;
	BOOL		m_fUseSelfFndPnrs;
	DWORD		m_dwMulticastInt;
	DWORD		m_dwMcastTtl;
    CString     m_strBackupPath;

    BOOL        m_fBurstHandling;
    DWORD       m_dwBurstQueSize;

    // consistency checking
    BOOL        m_fPeriodicConsistencyCheck;
    BOOL        m_fCCUseRplPnrs;
    DWORD       m_dwMaxRecsAtATime;
    DWORD       m_dwCCTimeInterval;
    CIntlTime   m_itmCCStartTime;

    // system version stuff
    DWORD       m_dwMajorVersion;
    DWORD       m_dwMinorVersion;
    DWORD       m_dwBuildNumber;
    DWORD       m_dwServicePack;

    // admin status
    BOOL        m_fIsAdmin;

    // database name
    CString     m_strDbName;
	CString		m_strDbPath;

protected:
    void        GetAdminStatus();

private:
    typedef CString REGKEYNAME;

// Registry Names
    static const REGKEYNAME lpstrRoot;
    static const REGKEYNAME lpstrPullRoot;
    static const REGKEYNAME lpstrPushRoot;
    static const REGKEYNAME lpstrNetBIOSName;
	static const REGKEYNAME lpstrPersistence;

    // consistency checking
    static const REGKEYNAME lpstrCCRoot;
    static const REGKEYNAME lpstrCC;

    // default value stuff
    static const REGKEYNAME lpstrDefaultsRoot;
    static const REGKEYNAME lpstrPullDefaultsRoot;
    static const REGKEYNAME lpstrPushDefaultsRoot;

    // for determining system version
    static const REGKEYNAME lpstrCurrentVersion;
	static const REGKEYNAME lpstrWinVersion;
	static const REGKEYNAME lpstrSPVersion;
	static const REGKEYNAME lpstrBuildNumber;

private:
    CString m_strNetBIOSName;
};

#endif // _CONFIG_H