windows-nt/Source/XPSP1/NT/multimedia/directx/dplay/dpnathlp/dpnhpast/pastmsgs.h
2020-09-26 16:20:57 +08:00

419 lines
8.8 KiB
C

/***************************************************************************
*
* Copyright (C) 1999 - 2001 Microsoft Corporation. All Rights Reserved.
*
* File: pastmsgs.h
*
* Content: Messages for PAST (Protocol for Address Space Traversal).
*
* History:
* Date By Reason
* ======== ======== =========
* 12/07/99 AaronO Original.
* 03/17/00 JohnKan Modified for DPlay8.
* 02/05/01 VanceO Moved to DPNATHLP.DLL.
* 04/16/01 VanceO Moved to DPNHPAST.DLL.
*
***************************************************************************/
//=============================================================================
// Constant definitions
//=============================================================================
#define PAST_VERSION 1
#define PAST_HOST_PORT 2234
#define PAST_ANY_ADDRESS 0
#define PAST_ANY_PORT 0
#define PAST_MS_VENDOR_ID 734
//=============================================================================
// Parameter types
//=============================================================================
//
// Tunnel types
//
enum
{
PAST_TUNNEL_RESERVED = 0,
PAST_TUNNEL_IP_IP = 1,
PAST_TUNNEL_GRE = 2, // PPTP
PAST_TUNNEL_L2TP = 3,
//PAST_TUNNEL_NONE = 4, // THIS IS NOT PART OF THE SPEC
};
//
// PAST methods
//
enum
{
PAST_METHOD_RESERVED = 0,
PAST_METHOD_RSA_IP = 1,
PAST_METHOD_RSAP_IP = 2,
PAST_METHOD_RSA_IP_IPSEC = 3,
PAST_METHOD_RSAP_IP_IPSEC = 4,
};
//
// Flow types
//
enum
{
PAST_FLOW_RESERVED = 0,
PAST_FLOW_MACRO = 1,
PAST_FLOW_MICRO = 2,
PAST_FLOW_NONE = 3,
};
//
// Address types
//
enum
{
PAST_ADDRESSTYPE_RESERVED = 0,
PAST_ADDRESSTYPE_IPV4 = 1, // 4 bytes
PAST_ADDRESSTYPE_IPV4_NETMASK = 2, // 4 bytes
PAST_ADDRESSTYPE_IPV6 = 3, // 16 bytes
PAST_ADDRESSTYPE_IPV6_NETMASK = 4, // 16 bytes
PAST_ADDRESSTYPE_FQDN = 5, // varies
};
//
// MS specific Vendor Codes
//
enum
{
PAST_VC_MS_NO_TUNNEL = 1,
PAST_VC_MS_TCP_PORT = 2,
PAST_VC_MS_UDP_PORT = 3,
PAST_VC_MS_SHARED_UDP_LISTENER = 4,
PAST_VC_MS_QUERY_MAPPING = 5,
};
//=============================================================================
// Message IDs
//=============================================================================
enum
{
PAST_MSGID_ERROR_RESPONSE = 1,
PAST_MSGID_REGISTER_REQUEST = 2,
PAST_MSGID_REGISTER_RESPONSE = 3,
PAST_MSGID_DEREGISTER_REQUEST = 4,
PAST_MSGID_DEREGISTER_RESPONSE = 5,
PAST_MSGID_ASSIGN_REQUEST_RSA_IP = 6,
PAST_MSGID_ASSIGN_RESPONSE_RSA_IP = 7,
PAST_MSGID_ASSIGN_REQUEST_RSAP_IP = 8,
PAST_MSGID_ASSIGN_RESPONSE_RSAP_IP = 9,
PAST_MSGID_EXTEND_REQUEST = 10,
PAST_MSGID_EXTEND_RESPONSE = 11,
PAST_MSGID_FREE_REQUEST = 12,
PAST_MSGID_FREE_RESPONSE = 13,
PAST_MSGID_QUERY_REQUEST = 14,
PAST_MSGID_QUERY_RESPONSE = 15,
PAST_MSGID_DEALLOCATE = 16,
PAST_MSGID_OK = 17,
PAST_MSGID_LISTEN_REQUEST = 18,
PAST_MSGID_LISTEN_RESPONSE = 19,
};
//=============================================================================
// Message parameters
//=============================================================================
enum
{
PAST_PARAMID_ADDRESS = 1,
PAST_PARAMID_PORTS = 2,
PAST_PARAMID_LEASE = 3,
PAST_PARAMID_CLIENTID = 4,
PAST_PARAMID_BINDID = 5,
PAST_PARAMID_MESSAGEID = 6,
PAST_PARAMID_TUNNELTYPE = 7,
PAST_PARAMID_PASTMETHOD = 8,
PAST_PARAMID_ERROR = 9,
PAST_PARAMID_FLOWPOLICY = 10,
PAST_PARAMID_VENDOR = 11,
};
//=============================================================================
// Structures
//=============================================================================
#pragma pack(push,1)
typedef struct _PAST_PARAM
{
CHAR code;
WORD len;
} PAST_PARAM, *PPAST_PARAM;
typedef struct _PAST_PARAM_MESSAGEID
{
CHAR code;
WORD len;
DWORD msgid;
} PAST_PARAM_MESSAGEID, *PPAST_PARAM_MESSAGEID;
typedef struct _PAST_PARAM_CLIENTID
{
CHAR code;
WORD len;
DWORD clientid;
} PAST_PARAM_CLIENTID, *PPAST_PARAM_CLIENTID;
typedef struct _PAST_PARAM_ADDRESS
{
CHAR code;
WORD len;
CHAR version; // ADDRESSTYPE_IPV4 == 1 == v4
DWORD addr;
} PAST_PARAM_ADDRESS, *PPAST_PARAM_ADDRESS;
typedef struct _PAST_PARAM_PORTS
{
CHAR code;
WORD len;
CHAR nports; // we only do 1 port at a time
WORD port; // NOTE: they appear to be transferred in x86 byte order, contrary to the spec, which says network byte order
} PAST_PARAM_PORTS, *PPAST_PARAM_PORTS;
typedef struct _PAST_PARAM_LEASE
{
CHAR code;
WORD len;
DWORD leasetime;
} PAST_PARAM_LEASE, *PPAST_PARAM_LEASE;
typedef struct _PAST_PARAM_BINDID
{
CHAR code;
WORD len;
DWORD bindid;
} PAST_PARAM_BINDID, *PPAST_PARAM_BINDID;
typedef struct _PAST_PARAM_TUNNELTYPE
{
CHAR code;
WORD len;
CHAR tunneltype;
} PAST_PARAM_TUNNELTYPE, *PPAST_PARAM_TUNNELTYPE;
typedef struct _PAST_PARAM_MSVENDOR_CODE {
CHAR code;
WORD len;
WORD vendorid;
WORD option;
} PAST_PARAM_MSVENDOR_CODE, *PPAST_MSVENDOR_CODE;
//
// PAST Message templates
//
typedef struct _PAST_MSG
{
CHAR version;
CHAR msgtype;
} PAST_MSG, *PPAST_MSG;
typedef struct _PAST_MSG_REGISTER_REQUEST
{
CHAR version;
CHAR command;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_REGISTER, *PPAST_MSG_REGISTER_REQUEST;
typedef struct _PAST_MSG_DEREGISTER_REQUEST
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_DEREGISTER_REQUEST, *PPAST_MSG_DEREGISTER_REQUEST;
typedef struct _PAST_MSG_ASSIGN_REQUEST_RSAP_IP
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_ADDRESS laddress; // local
PAST_PARAM_PORTS lport;
PAST_PARAM_ADDRESS raddress; // remote
PAST_PARAM_PORTS rport;
PAST_PARAM_LEASE lease;
PAST_PARAM_TUNNELTYPE tunneltype;
PAST_PARAM_MESSAGEID msgid;
PAST_PARAM_MSVENDOR_CODE porttype;
PAST_PARAM_MSVENDOR_CODE tunneloptions;
} PAST_MSG_ASSIGN_REQUEST_RSAP_IP, *PPAST_MSG_ASSIGN_REQUEST_RSAP_IP;
typedef struct _PAST_MSG_LISTEN_REQUEST
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_ADDRESS laddress; // local
PAST_PARAM_PORTS lport;
PAST_PARAM_ADDRESS raddress; // remote
PAST_PARAM_PORTS rport;
PAST_PARAM_LEASE lease;
PAST_PARAM_TUNNELTYPE tunneltype;
PAST_PARAM_MESSAGEID msgid;
PAST_PARAM_MSVENDOR_CODE porttype;
PAST_PARAM_MSVENDOR_CODE tunneloptions;
} PAST_MSG_LISTEN_REQUEST, *PPAST_MSG_LISTEN_REQUEST;
//
// This isn't a real message, it's the same thing as LISTEN, but with an
// extra vendor option.
//
typedef struct _PAST_MSG_LISTEN_REQUEST_SHARED
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_ADDRESS laddress; // local
PAST_PARAM_PORTS lport;
PAST_PARAM_ADDRESS raddress; // remote
PAST_PARAM_PORTS rport;
PAST_PARAM_LEASE lease;
PAST_PARAM_TUNNELTYPE tunneltype;
PAST_PARAM_MESSAGEID msgid;
PAST_PARAM_MSVENDOR_CODE porttype;
PAST_PARAM_MSVENDOR_CODE tunneloptions;
PAST_PARAM_MSVENDOR_CODE listentype;
} PAST_MSG_LISTEN_REQUEST_SHARED, *PPAST_MSG_LISTEN_REQUEST_SHARED;
//
// Take advantage of fact that ASSIGN, LISTEN, SHAREDLISTEN look almost
// identical.
//
typedef struct _PAST_MSG_ASSIGNORLISTEN_REQUEST
{
union
{
PAST_MSG_ASSIGN_REQUEST_RSAP_IP assign;
PAST_MSG_LISTEN_REQUEST listen;
PAST_MSG_LISTEN_REQUEST_SHARED sharedlisten;
};
} PAST_MSG_ASSIGNORLISTEN_REQUEST, *PPAST_MSG_ASSIGNORLISTEN_REQUEST;
typedef struct _PAST_MSG_EXTEND_REQUEST
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_BINDID bindid;
PAST_PARAM_LEASE lease;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_EXTEND_REQUEST, *PPAST_MSG_EXTEND_REQUEST;
typedef struct _PAST_MSG_FREE_REQUEST
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_BINDID bindid;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_FREE_REQUEST, *PPAST_MSG_FREE_REQUEST;
typedef struct _PAST_MSG_QUERY_REQUEST_PORTS
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_ADDRESS address;
PAST_PARAM_PORTS port;
PAST_PARAM_MSVENDOR_CODE porttype;
PAST_PARAM_MSVENDOR_CODE querytype;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_QUERY_REQUEST_PORTS, *PPAST_MSG_QUERY_REQUEST_PORTS;
typedef struct _PAST_MSG_QUERY_REQUEST_ADDRONLY
{
CHAR version;
CHAR command;
PAST_PARAM_CLIENTID clientid;
PAST_PARAM_ADDRESS address;
PAST_PARAM_MESSAGEID msgid;
} PAST_MSG_QUERY_REQUEST_ADDRONLY, *PPAST_MSG_QUERY_REQUEST_ADDRONLY;
#pragma pack(pop)
//=============================================================================
// Errors
//=============================================================================
enum
{
PASTERR_UNKNOWNERROR = 1,
PASTERR_BADBINDID = 2,
PASTERR_BADCLIENTID = 3,
PASTERR_MISSINGPARAM = 4,
PASTERR_DUPLICATEPARAM = 5,
PASTERR_ILLEGALPARAM = 6,
PASTERR_ILLEGALMESSAGE = 7,
PASTERR_REGISTERFIRST = 8,
PASTERR_BADMESSAGEID = 9,
PASTERR_ALREADYREGISTERED = 10,
PASTERR_ALREADYUNREGISTERED = 11,
PASTERR_BADTUNNELTYPE = 12,
PASTERR_ADDRUNAVAILABLE = 13,
PASTERR_PORTUNAVAILABLE = 14,
};