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

/*
	ipxstrm.h
		IPX Root node configuration object.

		Use this to get/set configuration data.  This class will take
		care of versioning of config formats as well as serializing
		of the data.
		
    FILE HISTORY:
        
*/

#ifndef _IPXSTRM_H
#define _IPXSTRM_H

#ifndef _XSTREAM_H
#include "xstream.h"
#endif

#ifndef _IPXADMIN_H
#include "ipxadmin.h"
#endif

#ifndef _COLUMN_H
#include "column.h"
#endif

#ifndef _CONFIG_H
// #include "config.h"
#endif


enum
{
	IPXSTRM_STATS_IPX = 0,
	IPXSTRM_STATS_ROUTING,
	IPXSTRM_STATS_SERVICE,
	IPXSTRM_MAX_COUNT,
};

enum IPSTRM_TAG
{
	IPXSTRM_TAG_VERSION =				XFER_TAG(1, XFER_DWORD),
	IPXSTRM_TAG_VERSIONADMIN =			XFER_TAG(2, XFER_DWORD),

	IPXSTRM_TAG_STATS_IPX_COLUMNS =		XFER_TAG(3, XFER_COLUMNDATA_ARRAY),
	IPXSTRM_TAG_STATS_IPX_SORT =		XFER_TAG(4, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPX_ASCENDING =	XFER_TAG(5, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPX_POSITION =	XFER_TAG(6, XFER_RECT),

	
	IPXSTRM_TAG_STATS_IPXROUTING_COLUMNS =	XFER_TAG(7, XFER_COLUMNDATA_ARRAY),
	IPXSTRM_TAG_STATS_IPXROUTING_SORT =		XFER_TAG(8, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPXROUTING_ASCENDING =	XFER_TAG(9, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPXROUTING_POSITION =	XFER_TAG(10, XFER_RECT),
	
	IPXSTRM_TAG_STATS_IPXSERVICE_COLUMNS =	XFER_TAG(11, XFER_COLUMNDATA_ARRAY),
	IPXSTRM_TAG_STATS_IPXSERVICE_SORT =		XFER_TAG(12, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPXSERVICE_ASCENDING =	XFER_TAG(13, XFER_DWORD),
	IPXSTRM_TAG_STATS_IPXSERVICE_POSITION =	XFER_TAG(14, XFER_RECT),
};

/*---------------------------------------------------------------------------
	Class:	IPXAdminConfigStream

	This holds the configuration information for the IPX administration
	nodes.  This does NOT hold the configuration information for the columns.
	That is stored in the Component Configuration streams.
 ---------------------------------------------------------------------------*/
class IPXAdminConfigStream : public ConfigStream
{
public:
	IPXAdminConfigStream();

	virtual HRESULT	InitNew();				// set defaults
	virtual HRESULT	SaveTo(IStream *pstm);
	virtual HRESULT SaveAs(UINT nVersion, IStream *pstm);
	
	virtual HRESULT LoadFrom(IStream *pstm);

	virtual HRESULT GetSize(ULONG *pcbSize);


	// --------------------------------------------------------
	// Accessors
	// --------------------------------------------------------
	
	virtual HRESULT	GetVersionInfo(DWORD *pnVersion, DWORD *pnAdminVersion);

protected:
	HRESULT XferVersion0(IStream *pstm, XferStream::Mode mode, ULONG *pcbSize);

};


/*---------------------------------------------------------------------------
	These IDs are used by the component config stream.
 ---------------------------------------------------------------------------*/

enum
{
	COLUMNS_SUMMARY = 0,
	COLUMNS_NBBROADCASTS = 1,
	COLUMNS_STATICROUTES = 2,
	COLUMNS_STATICSERVICES = 3,
	COLUMNS_STATICNETBIOSNAMES = 4,
	COLUMNS_MAX_COUNT,
};

class IPXComponentConfigStream : public ConfigStream
{
public:
	virtual HRESULT XferVersion0(IStream *pstm, XferStream::Mode mode, ULONG *pcbSize);
protected:
};


#endif _IPXSTRM_H