summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/libuv/samples/socks5-proxy/s5.h
diff options
context:
space:
mode:
author ImJezze <jezze@gmx.net>2016-02-21 11:48:45 +0100
committer ImJezze <jezze@gmx.net>2016-02-21 11:48:45 +0100
commitcc24a339d8c0517259084b5c178d784626ba965c (patch)
tree9868e9687b5802ae0a3733712a3bbeb3bc75c953 /3rdparty/libuv/samples/socks5-proxy/s5.h
parentb5daabda5495dea5c50e17961ecfed2ea8619d76 (diff)
Merge remote-tracking branch 'refs/remotes/mamedev/master'
Second attempt
Diffstat (limited to '3rdparty/libuv/samples/socks5-proxy/s5.h')
-rw-r--r--3rdparty/libuv/samples/socks5-proxy/s5.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/3rdparty/libuv/samples/socks5-proxy/s5.h b/3rdparty/libuv/samples/socks5-proxy/s5.h
new file mode 100644
index 00000000000..715f322287d
--- /dev/null
+++ b/3rdparty/libuv/samples/socks5-proxy/s5.h
@@ -0,0 +1,94 @@
+/* Copyright StrongLoop, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef S5_H_
+#define S5_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#define S5_ERR_MAP(V) \
+ V(-1, bad_version, "Bad protocol version.") \
+ V(-2, bad_cmd, "Bad protocol command.") \
+ V(-3, bad_atyp, "Bad address type.") \
+ V(0, ok, "No error.") \
+ V(1, auth_select, "Select authentication method.") \
+ V(2, auth_verify, "Verify authentication.") \
+ V(3, exec_cmd, "Execute command.") \
+
+typedef enum {
+#define S5_ERR_GEN(code, name, _) s5_ ## name = code,
+ S5_ERR_MAP(S5_ERR_GEN)
+#undef S5_ERR_GEN
+ s5_max_errors
+} s5_err;
+
+typedef enum {
+ S5_AUTH_NONE = 1 << 0,
+ S5_AUTH_GSSAPI = 1 << 1,
+ S5_AUTH_PASSWD = 1 << 2
+} s5_auth_method;
+
+typedef enum {
+ s5_auth_allow,
+ s5_auth_deny
+} s5_auth_result;
+
+typedef enum {
+ s5_atyp_ipv4,
+ s5_atyp_ipv6,
+ s5_atyp_host
+} s5_atyp;
+
+typedef enum {
+ s5_cmd_tcp_connect,
+ s5_cmd_tcp_bind,
+ s5_cmd_udp_assoc
+} s5_cmd;
+
+typedef struct {
+ uint32_t arg0; /* Scratch space for the state machine. */
+ uint32_t arg1; /* Scratch space for the state machine. */
+ uint8_t state;
+ uint8_t methods;
+ uint8_t cmd;
+ uint8_t atyp;
+ uint8_t userlen;
+ uint8_t passlen;
+ uint16_t dport;
+ uint8_t username[257];
+ uint8_t password[257];
+ uint8_t daddr[257]; /* TODO(bnoordhuis) Merge with username/password. */
+} s5_ctx;
+
+void s5_init(s5_ctx *ctx);
+
+s5_err s5_parse(s5_ctx *cx, uint8_t **data, size_t *size);
+
+/* Only call after s5_parse() has returned s5_want_auth_method. */
+unsigned int s5_auth_methods(const s5_ctx *cx);
+
+/* Call after s5_parse() has returned s5_want_auth_method. */
+int s5_select_auth(s5_ctx *cx, s5_auth_method method);
+
+const char *s5_strerror(s5_err err);
+
+#endif /* S5_H_ */