Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * Copyright (c) 2018 Antmicro Ltd
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_SUBSYS_NET_LIB_SOCKS_SOCKS_INTERNAL_H_
#define ZEPHYR_SUBSYS_NET_LIB_SOCKS_SOCKS_INTERNAL_H_

#define SOCKS5_PKT_MAGIC			0x05
#define SOCKS5_PKT_RSV				0x00

#define SOCKS5_AUTH_METHOD_NOAUTH		0x00
#define SOCKS5_AUTH_METHOD_GSSAPI		0x01
#define SOCKS5_AUTH_METHOD_USERPASS		0x02
#define SOCKS5_AUTH_METHOD_NONEG		0xFF

#define SOCKS5_CMD_CONNECT			0x01
#define SOCKS5_CMD_BIND				0x02
#define SOCKS5_CMD_UDP_ASSOCIATE		0x03

#define SOCKS5_ATYP_IPV4			0x01
#define SOCKS5_ATYP_DOMAINNAME			0x03
#define SOCKS5_ATYP_IPV6			0x04

#define SOCKS5_CMD_RESP_SUCCESS			0x00
#define SOCKS5_CMD_RESP_FAILURE			0x01
#define SOCKS5_CMD_RESP_NOT_ALLOWED		0x02
#define SOCKS5_CMD_RESP_NET_UNREACHABLE		0x03
#define SOCKS5_CMD_RESP_HOST_UNREACHABLE	0x04
#define SOCKS5_CMD_RESP_REFUSED			0x05
#define SOCKS5_CMD_RESP_TTL_EXPIRED		0x06
#define SOCKS5_CMD_RESP_CMD_NOT_SUPPORTED	0x07
#define SOCKS5_CMD_RESP_ATYP_NOT_SUPPORTED	0x08

struct socks5_method_request_common {
	uint8_t ver;
	uint8_t nmethods;
} __packed;

struct socks5_method_request {
	struct socks5_method_request_common r;
	uint8_t methods[255];
} __packed;

struct socks5_method_response {
	uint8_t ver;
	uint8_t method;
} __packed;

struct socks5_ipv4_addr {
	uint8_t addr[4];
	uint16_t port;
} __packed;

struct socks5_ipv6_addr {
	uint8_t addr[16];
	uint16_t port;
} __packed;

struct socks5_command_request_common {
	uint8_t ver;
	uint8_t cmd;
	uint8_t rsv;
	uint8_t atyp;
} __packed;

struct socks5_command_request {
	struct socks5_command_request_common r;
	union {
		struct socks5_ipv4_addr ipv4_addr;
		struct socks5_ipv6_addr ipv6_addr;
	};
} __packed;

struct socks5_command_response_common {
	uint8_t ver;
	uint8_t rep;
	uint8_t rsv;
	uint8_t atyp;
} __packed;

struct socks5_command_response {
	struct socks5_command_response_common r;
	union {
		struct socks5_ipv4_addr ipv4_addr;
		struct socks5_ipv6_addr ipv6_addr;
	};
} __packed;

#endif /* ZEPHYR_SUBSYS_NET_LIB_SOCKS_SOCKS_INTERNAL_H_ */