/*--------------------------------------------------------

  servdefs.h
      Contains the global type definitions and constant 
      definitions used for the service & server attributes 
      used on the server-side of the datacenter.

  Copyright (C) 1993 Microsoft Corporation
  All rights reserved.

  Authors:
      rsraghav    R.S. Raghavan

  History:
      01-14-94    rsraghav    Created. 
	  06-05-94	  rsraghav 	  Changed the service state values
	  04-19-95	  rsraghav	  Added IP address definitions

  -------------------------------------------------------*/

#ifndef _SERVDEFS_H_
#define _SERVDEFS_H_

#if defined(DEBUG) && defined(INLINE)
#undef THIS_FILE
static char BASED_CODE SERVDEFS_H[] = "servdefs.h";
#define THIS_FILE SERVDEFS_H
#endif

// Type definitions of server related attributes.
typedef unsigned short MOS_SERVER_ID;	// MSID
typedef unsigned long CPU_INDEX;		// CI
typedef WORD MOS_LOCATE_TYPE;	// MLT
#if !defined(_MHANDLE_DEFINED)
typedef WORD MHANDLE;
typedef WORD HMCONNECT;
typedef WORD HMSESSION;
typedef WORD HMPIPE;
#define _MHANDLE_DEFINED
#endif

// Constants for server values
#define INVALID_MOS_SERVER_ID_VALUE (0xFFF0)
#define msidInvalid (INVALID_MOS_SERVER_ID_VALUE)
#define msidReservedForTest1 (0XFFEF)
#define msidReservedForTest2 (0XFFEE)
#define msidReservedForTest3 (0XFFED)
#define msidReservedForTest4 (0XFFEC)
#define msidReservedForTest5 (0XFFEB)
#define msidReservedForTest6 (0XFFEA)

// Locate redir values.
#define USE_LOCAL_SERVER        				0xffff
#define USE_NO_SERVER           				0xfffe
#define USE_LOAD_BALANCED_LOCATE				0xfffd
#define USE_LOAD_BALANCED_LOCATE_INCLUDE_SELF	0xfffc

// Type definitions of service attributes.
typedef unsigned long SERVICE_STATE; // SS
typedef unsigned long SERVICE_VERSION; // SV

// Type definitions of attachment state.
typedef unsigned long ATTACHMENT_STATE;	// AS

// Constants for service states	(values are kept so that ORing of two states will always give the highest of the two).
// NOTE: This strange number pattern is to reserve 2 bits between each value so that we can add new values without
//       changing the existing values and still be able to OR one or more states and get the highest state.
#define SSINVALID 			(0x00000000)
#define SSSTOPPED 			(0x00000001)
#define SSLAUNCHING 		(0x00000009)
#define SSLAUNCHED 			(0x00000049)
#define SSSYNCHRONIZING		(0x00000249)
#define SSSTOPPING	 		(0x00001249)
#define SSACTIVE	 		(0x00009249)
#define SSACTIVEACCEPTING 	(0x00049249)

// Constants for attachment states.
#define ASATTACHPENDING (0)
#define ASATTACHED		(1)
#define ASDETACHPENDING	(2)

// Constants for service version.  SVANY is used for searching in the Service Map.
#define INVALID_SERVICE_VERSION_VALUE (0xFFFFFFFF)
#define SVDEFAULT	(0)
#define SVANY		(0xFFFFFFFE)

// IP Address related definitions
typedef DWORD 			IPADDRESS; 			// IPA 

#define IPADDRESS_INVALID (0xFFFFFFFF)
#define MAX_IPADDRESS_STRING_LENGTH 16	// xxx.xxx.xxx.xxx format (max of 15 chars + \0)



//////////////////////////////////////////////////////////////////////
// CContext related definitions

// Disconnect cause.
enum CONTEXTCLOSESTATUS
{
    CCS_DATALINKDROP,
    CCS_CLIENTREQ,
    CCS_SRVREQ,
    CCS_SYSOP,
    CCS_COLDREDIR,
    CCS_HOTREDIR,
    CCS_NOP
};
#define PIPE_CLOSED_STATUS CONTEXTCLOSESTATUS


//////////////////////////////////////////////////////////////////////
// CRouter related definitions

#define ROUTER_NC               0
#define ROUTER_CONNECTED        1
#define ROUTER_CLOSING          2
#define ROUTER_IDLE             3
#define ROUTER_WAIT_OPEN        4
#define ROUTER_WAIT_CLOSE       5
#define ROUTER_GHOST            6   // no more available

#define MCP_VERSION_V1          0
#define MCP_VERSION_V2          1   // transmit intl info @ connect
#define MCP_VERSION_V3          2   // transmit intl info @ connect + failed addr
#define MCP_VERSION_V4          3   // transmit MCP config to client
#define MCP_VERSION_V5          4   // nothing new
#define MCP_VERSION_V6          5   // NAK
#define MCP_VERSION_V7          6   // transmit CLVER (client version)
#define MCP_VERSION_CURRENT     MCP_VERSION_V7
#define MCP_VERSION_NA          0x0 // not available

// Disconnect cause.
enum ROUTERUNCONNECTSTATUS
{ 
    RUS_DATALINKDROP,       // data link dropped
    RUS_CLIENTREQ,          // client requested data link drop
    RUS_SRVREQ,             // server requested data link drop
    RUS_SYSOP,              // sysop requested data link drop
    RUS_NOP,
    RUS_DATALINKTIMEOUT,    // inactivity time-out
    RUS_TOOMANYRETRANS,     // too many retransmission
    RUS_PUBLICTIMEOUT,      // public account access timeout
    RUS_TOOMANYPIPES,        // attempt to open too many pipes on a public account
	RUS_TOOMANY_BAD_PACKETS,  // too many back packets from client
	RUS_TRANSPORT_ERROR			  // transport error
};
#define CONNECTION_CLOSED_STATUS ROUTERUNCONNECTSTATUS


#endif // _SERVDEFS_H_