windows-nt/Source/XPSP1/NT/termsrv/remdsk/server/ics/icshelper/rsipdefs.h
2020-09-26 16:20:57 +08:00

348 lines
7.8 KiB
C

#ifndef __RSIPDEFS_H_FILE
#define __RSIPDEFS_H_FILE
//**********************************************************************
// Constant definitions
//**********************************************************************
/*
* Whats implemented:
* as_req_rsap(localaddr=0,localports=4-a:b:c:d,
* remaddr=0,remports=0)
* as_res_rsap(localaddr=24.128.34.21,localports=4-A:B:C:D,
* remaddr=0,remports=0)
* where a,b,c,d are listening ports on the client (192.168.0.2)
* and A,B,C,D are the associated ports visible
* on the external IP address 24.128.34.21.
*
* Operation: When packet from the outside is destined for
* 24.128.34.21:A is recieved, the ip->dst and udp->dst
* (or tcp->dst) fields are changed to 192.168.0.2:a
* and then sent along - unencapsulated.
* When a packet is sent out from the client, the
* app (e.g. dplay) uses 192.168.0.2:a as in the
* IP+UDP/TCP header but uses 24.128.34.21:A for
* any information encoded in the data portion of
* the packet.
*/
#define RSIP_VERSION 1
#define RSIP_HOST_PORT 2234
// How often we scan the list for liscence renewals
#define RSIP_RENEW_TEST_INTERVAL 60000
/* start RSIP retry timer at 12.5 ms */
#define RSIP_tuRETRY_START 12500
/* max starting retry is 100 ms */
#define RSIP_tuRETRY_MAX 100000
#define RESP_BUF_SIZE 100
enum { /* TUNNELS */
TUNNEL_RESERVED = 0,
TUNNEL_IP_IP = 1,
TUNNEL_GRE = 2, /* PPTP */
TUNNEL_L2TP = 3,
/*TUNNEL_NONE = 4, /* THIS IS NOT PART OR THE SPEC */
};
enum { /* METHODS */
METHOD_RESERVED = 0,
RSA_IP = 1,
RSAP_IP = 2,
RSA_IP_IPSEC = 3,
RSAP_IP_IPSEC = 4,
};
enum { /* FLOWS */
FLOW_RESERVED = 0,
FLOW_MACRO = 1,
FLOW_MICRO = 2,
FLOW_NONE = 3,
};
enum { /* ERROR CODES */
UNKNOWNERROR = 1,
BADBINDID = 2,
BADCLIENTID = 3,
MISSINGPARAM = 4,
DUPLICATEPARAM = 5,
ILLEGALPARAM = 6,
ILLEGALMESSAGE = 7,
REGISTERFIRST = 8,
BADMESSAGEID = 9,
ALREADYREGISTERED = 10,
ALREADYUNREGISTERED = 11,
BADTUNNELTYPE = 12,
ADDRUNAVAILABLE = 13,
PORTUNAVAILABLE = 14,
};
enum { /* MESSAGES */
RSIP_ERROR_RESPONSE = 1,
RSIP_REGISTER_REQUEST = 2,
RSIP_REGISTER_RESPONSE = 3,
RSIP_DEREGISTER_REQUEST = 4,
RSIP_DEREGISTER_RESPONSE = 5,
RSIP_ASSIGN_REQUEST_RSA_IP = 6,
RSIP_ASSIGN_RESPONSE_RSA_IP = 7,
RSIP_ASSIGN_REQUEST_RSAP_IP = 8,
RSIP_ASSIGN_RESPONSE_RSAP_IP = 9,
RSIP_EXTEND_REQUEST = 10,
RSIP_EXTEND_RESPONSE = 11,
RSIP_FREE_REQUEST = 12,
RSIP_FREE_RESPONSE = 13,
RSIP_QUERY_REQUEST = 14,
RSIP_QUERY_RESPONSE = 15,
RSIP_DEALLOCATE = 16,
RSIP_OK = 17,
RSIP_LISTEN_REQUEST = 18,
RSIP_LISTEN_RESPONSE = 19,
};
enum { /* PARAMETERS */
RSIP_ADDRESS_CODE = 1,
RSIP_PORTS_CODE = 2,
RSIP_LEASE_CODE = 3,
RSIP_CLIENTID_CODE = 4,
RSIP_BINDID_CODE = 5,
RSIP_MESSAGEID_CODE = 6,
RSIP_TUNNELTYPE_CODE = 7,
RSIP_RSIPMETHOD_CODE = 8,
RSIP_ERROR_CODE = 9,
RSIP_FLOWPOLICY_CODE = 10,
RSIP_VENDOR_CODE = 11,
};
/*
* MS specific Vendor Codes
*/
#define RSIP_MS_VENDOR_ID 734
enum {
RSIP_NO_TUNNEL = 1,
RSIP_TCP_PORT = 2,
RSIP_UDP_PORT = 3,
RSIP_SHARED_UDP_LISTENER = 4,
RSIP_QUERY_MAPPING = 5,
};
#define ANY_PORT 0
//**********************************************************************
// Macro definitions
//**********************************************************************
//**********************************************************************
// Structure definitions
//**********************************************************************
#pragma pack(push,1)
typedef struct _RSIP_MSG_HDR {
CHAR version;
CHAR msgtype;
} RSIP_MSG_HDR, *PRSIP_MSG_HDR;
typedef struct _RSIP_PARAM {
CHAR code;
WORD len;
} RSIP_PARAM, *PRSIP_PARAM;
typedef struct _RSIP_MESSAGEID{
CHAR code;
WORD len;
DWORD msgid;
} RSIP_MESSAGEID, *PRSIP_MESSAGEID;
typedef struct _RSIP_CLIENTID {
CHAR code;
WORD len;
DWORD clientid;
} RSIP_CLIENTID, *PRSIP_CLIENTID;
typedef struct _RSIP_ADDRESS {
CHAR code;
WORD len;
CHAR version; // 1==v4
DWORD addr;
} RSIP_ADDRESS, *PRSIP_ADDRESS;
typedef struct _RSIP_PORT {
CHAR code;
WORD len;
CHAR nports; // we only do 1 port at a time
WORD port;
} RSIP_PORT, *PRSIP_PORT;
typedef struct _RSIP_LEASE {
CHAR code;
WORD len;
DWORD leasetime;
} RSIP_LEASE, *PRSIP_LEASE;
typedef struct _RSIP_BINDID {
CHAR code;
WORD len;
DWORD bindid;
} RSIP_BINDID, *PRSIP_BINDID;
typedef struct _RSIP_TUNNEL {
CHAR code;
WORD len;
CHAR tunneltype;
} RSIP_TUNNEL, *PRSIP_TUNNEL;
// Vendor Specific structures
typedef struct _RSIP_MSVENDOR_CODE {
CHAR code;
WORD len;
WORD vendorid;
WORD option;
}RSIP_MSVENDOR_CODE, *PRSIP_MSVENDOR_CODE;
//
// RSIP Message templates
//
typedef struct _MSG_RSIP_REGISTER {
CHAR version;
CHAR command;
RSIP_MESSAGEID msgid;
} MSG_RSIP_REGISTER, *PMSG_RSIP_REGISTER;
typedef struct _MSG_RSIP_DEREGISTER {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_MESSAGEID msgid;
} MSG_RSIP_DEREGISTER, *PMSG_RSIP_DEREGISTER;
typedef struct _MSG_RSIP_ASSIGN_PORT {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_ADDRESS laddress; // local
RSIP_PORT lport;
RSIP_ADDRESS raddress; // remote
RSIP_PORT rport;
RSIP_LEASE lease;
RSIP_TUNNEL tunnel;
RSIP_MESSAGEID msgid;
RSIP_MSVENDOR_CODE porttype;
RSIP_MSVENDOR_CODE tunneloptions;
} MSG_RSIP_ASSIGN_PORT, *PMSG_RSIP_ASSIGN_PORT;
typedef struct _MSG_RSIP_LISTEN_PORT {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_ADDRESS laddress; // local
RSIP_PORT lport;
RSIP_ADDRESS raddress; // remote
RSIP_PORT rport;
RSIP_LEASE lease;
RSIP_TUNNEL tunnel;
RSIP_MESSAGEID msgid;
RSIP_MSVENDOR_CODE porttype;
RSIP_MSVENDOR_CODE tunneloptions;
RSIP_MSVENDOR_CODE listentype;
} MSG_RSIP_LISTEN_PORT, *PMSG_RSIP_LISTEN_PORT;
typedef struct _MSG_RSIP_EXTEND_PORT {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_BINDID bindid;
RSIP_LEASE lease;
RSIP_MESSAGEID msgid;
} MSG_RSIP_EXTEND_PORT, *PMSG_RSIP_EXTEND_PORT;
typedef struct _MSG_RSIP_FREE_PORT {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_BINDID bindid;
RSIP_MESSAGEID msgid;
} MSG_RSIP_FREE_PORT, *PMSG_RSIP_FREE_PORT;
typedef struct _MSG_RSIP_QUERY {
CHAR version;
CHAR command;
RSIP_CLIENTID clientid;
RSIP_ADDRESS address;
RSIP_PORT port;
RSIP_MSVENDOR_CODE porttype;
RSIP_MSVENDOR_CODE querytype;
RSIP_MESSAGEID msgid;
} MSG_RSIP_QUERY, *PMSG_RSIP_QUERY;
typedef struct _RSIP_RESPONSE_INFO {
DWORD clientid;
DWORD messageid;
DWORD bindid;
DWORD leasetime;
CHAR version;
CHAR msgtype;
CHAR tunneltype;
CHAR rsipmethod;
DWORD lAddressV4;
WORD lPort;
DWORD rAddressV4;
WORD rPort;
WORD error;
} RSIP_RESPONSE_INFO, *PRSIP_RESPONSE_INFO;
#pragma pack(pop)
typedef struct _RSIP_LEASE_RECORD {
struct _RSIP_LEASE_RECORD * pNext;
DWORD dwRefCount;
BOOL ftcp_udp;
DWORD tExpiry;
DWORD bindid;
DWORD addrV4; // remote IP address
SHORT rport; // remote port
SHORT port; // local port
} RSIP_LEASE_RECORD, *PRSIP_LEASE_RECORD;
// Cache of queried address mappings so we don't
// need to requery the mappings over and over
typedef struct _ADDR_ENTRY {
struct _ADDR_ENTRY *pNext;
BOOL ftcp_udp;
DWORD tExpiry;
DWORD addr;
DWORD raddr;
WORD port;
WORD rport;
} ADDR_ENTRY, *PADDR_ENTRY;
//**********************************************************************
// Variable definitions
//**********************************************************************
#if 0
static const char *rsip_error_strs[]={
"RESERVED",
"UNKNOWNERROR",
"BADBINDID",
"BADCLIENTID",
"MISSINGPARAM",
"DUPLICATEPARAM",
"ILLEGALPARAM",
"ILLEGALMESSAGE",
"REGISTERFIRST",
"BADMESSAGEID",
"ALREADYREGISTERED",
"ALREADYUNREGISTERED",
"BADTUNNELTYPE",
"ADDRUNAVAILABLE",
"PORTUNAVAILABLE",
(char *)0
};
#endif
#endif // __RSIPDEFS_H_FILE