mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-05 07:33:45 +07:00
67 lines
2.1 KiB
C
67 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2017 Cesanta Software Limited
|
|
* All rights reserved
|
|
*/
|
|
|
|
#ifndef CS_MONGOOSE_SRC_SOCKS_H_
|
|
#define CS_MONGOOSE_SRC_SOCKS_H_
|
|
|
|
#if MG_ENABLE_SOCKS
|
|
|
|
#define MG_SOCKS_VERSION 5
|
|
|
|
#define MG_SOCKS_HANDSHAKE_DONE MG_F_USER_1
|
|
#define MG_SOCKS_CONNECT_DONE MG_F_USER_2
|
|
|
|
/* SOCKS5 handshake methods */
|
|
enum mg_socks_handshake_method {
|
|
MG_SOCKS_HANDSHAKE_NOAUTH = 0, /* Handshake method - no authentication */
|
|
MG_SOCKS_HANDSHAKE_GSSAPI = 1, /* Handshake method - GSSAPI auth */
|
|
MG_SOCKS_HANDSHAKE_USERPASS = 2, /* Handshake method - user/password auth */
|
|
MG_SOCKS_HANDSHAKE_FAILURE = 0xff, /* Handshake method - failure */
|
|
};
|
|
|
|
/* SOCKS5 commands */
|
|
enum mg_socks_command {
|
|
MG_SOCKS_CMD_CONNECT = 1, /* Command: CONNECT */
|
|
MG_SOCKS_CMD_BIND = 2, /* Command: BIND */
|
|
MG_SOCKS_CMD_UDP_ASSOCIATE = 3, /* Command: UDP ASSOCIATE */
|
|
};
|
|
|
|
/* SOCKS5 address types */
|
|
enum mg_socks_address_type {
|
|
MG_SOCKS_ADDR_IPV4 = 1, /* Address type: IPv4 */
|
|
MG_SOCKS_ADDR_DOMAIN = 3, /* Address type: Domain name */
|
|
MG_SOCKS_ADDR_IPV6 = 4, /* Address type: IPv6 */
|
|
};
|
|
|
|
/* SOCKS5 response codes */
|
|
enum mg_socks_response {
|
|
MG_SOCKS_SUCCESS = 0, /* Response: success */
|
|
MG_SOCKS_FAILURE = 1, /* Response: failure */
|
|
MG_SOCKS_NOT_ALLOWED = 2, /* Response: connection not allowed */
|
|
MG_SOCKS_NET_UNREACHABLE = 3, /* Response: network unreachable */
|
|
MG_SOCKS_HOST_UNREACHABLE = 4, /* Response: network unreachable */
|
|
MG_SOCKS_CONN_REFUSED = 5, /* Response: network unreachable */
|
|
MG_SOCKS_TTL_EXPIRED = 6, /* Response: network unreachable */
|
|
MG_SOCKS_CMD_NOT_SUPPORTED = 7, /* Response: network unreachable */
|
|
MG_SOCKS_ADDR_NOT_SUPPORTED = 8, /* Response: network unreachable */
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/* Turn the connection into the SOCKS server */
|
|
void mg_set_protocol_socks(struct mg_connection *c);
|
|
|
|
/* Create socks tunnel for the client connection */
|
|
struct mg_iface *mg_socks_mk_iface(struct mg_mgr *, const char *proxy_addr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif
|
|
#endif
|