348 lines
7.8 KiB
C
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
|