/*
 * Constants used in the SOCKS protocols.
 */

/* Command codes common to both versions */
#define SOCKS_CMD_CONNECT 1
#define SOCKS_CMD_BIND 2

/* SOCKS 4 definitions */

#define SOCKS4_REQUEST_VERSION 4
#define SOCKS4_REPLY_VERSION 0

#define SOCKS4_RESP_SUCCESS         90
#define SOCKS4_RESP_FAILURE         91
#define SOCKS4_RESP_WANT_IDENTD     92
#define SOCKS4_RESP_IDENTD_MISMATCH 93

/*
 * Special nonsense IP address range, used as a signal to indicate
 * that an ASCIZ hostname follows the user id field.
 *
 * Strictly speaking, the use of this extension indicates that we're
 * speaking SOCKS 4A rather than vanilla SOCKS 4, although we don't
 * bother to draw the distinction.
 */
#define SOCKS4A_NAME_FOLLOWS_BASE  0x00000001 /* inclusive */
#define SOCKS4A_NAME_FOLLOWS_LIMIT 0x00000100 /* exclusive */

/* SOCKS 5 definitions */

#define SOCKS5_REQUEST_VERSION 5
#define SOCKS5_REPLY_VERSION 5

/* Extra command codes extending the SOCKS_CMD_* list above */
#define SOCKS5_CMD_UDP_ASSOCIATE 3

#define SOCKS5_AUTH_NONE 0
#define SOCKS5_AUTH_GSSAPI 1
#define SOCKS5_AUTH_PASSWORD 2
#define SOCKS5_AUTH_CHAP 3
#define SOCKS5_AUTH_REJECTED 0xFF /* used in reply to indicate 'no
                                   * acceptable method offered' */

#define SOCKS5_AUTH_PASSWORD_VERSION 1

#define SOCKS5_AUTH_CHAP_VERSION 1

#define SOCKS5_AUTH_CHAP_ATTR_STATUS     0x00
#define SOCKS5_AUTH_CHAP_ATTR_INFO       0x01
#define SOCKS5_AUTH_CHAP_ATTR_USERNAME   0x02
#define SOCKS5_AUTH_CHAP_ATTR_CHALLENGE  0x03
#define SOCKS5_AUTH_CHAP_ATTR_RESPONSE   0x04
#define SOCKS5_AUTH_CHAP_ATTR_CHARSET    0x05
#define SOCKS5_AUTH_CHAP_ATTR_IDENTIFIER 0x10
#define SOCKS5_AUTH_CHAP_ATTR_ALGLIST    0x11

#define SOCKS5_AUTH_CHAP_ALG_HMACMD5   0x85

#define SOCKS5_ADDR_IPV4 1
#define SOCKS5_ADDR_IPV6 4
#define SOCKS5_ADDR_HOSTNAME 3

#define SOCKS5_RESP_SUCCESS 0
#define SOCKS5_RESP_FAILURE 1
#define SOCKS5_RESP_CONNECTION_NOT_ALLOWED_BY_RULESET 2
#define SOCKS5_RESP_NETWORK_UNREACHABLE 3
#define SOCKS5_RESP_HOST_UNREACHABLE 4
#define SOCKS5_RESP_CONNECTION_REFUSED 5
#define SOCKS5_RESP_TTL_EXPIRED 6
#define SOCKS5_RESP_COMMAND_NOT_SUPPORTED 7
#define SOCKS5_RESP_ADDRTYPE_NOT_SUPPORTED 8