added hardcoded probe for QUICK50

This commit is contained in:
yrutschle 2021-08-01 21:35:24 +02:00
parent e40d43bea5
commit 75e426c80f
5 changed files with 45 additions and 2 deletions

@ -38,6 +38,7 @@ static int is_http_protocol(const char *p, ssize_t len, struct sslhcfg_protocols
static int is_tls_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*);
static int is_adb_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*);
static int is_socks5_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*);
static int is_quick_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*);
static int is_true(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto) { return 1; }
/* Table of protocols that have a built-in probe
@ -52,6 +53,7 @@ static struct protocol_probe_desc builtins[] = {
{ "tls", is_tls_protocol },
{ "adb", is_adb_protocol },
{ "socks5", is_socks5_protocol },
{ "quick50", is_quick_protocol },
{ "anyprot", is_true }
};
@ -297,6 +299,11 @@ static int is_socks5_protocol(const char *p_in, ssize_t len, struct sslhcfg_prot
return PROBE_MATCH;
}
static int is_quick_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto)
{
return memmem(p, len, "Q050", 4) ? 1 : 0;
}
static int regex_probe(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto)
{
#ifdef ENABLE_REGEX

@ -1,5 +1,5 @@
/* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README)
* on Fri Jul 23 22:34:01 2021.
* on Sat Jul 31 23:32:53 2021.
# conf2struct: generate libconf parsers that read to structs
# Copyright (C) 2018-2019 Yves Rutschle
@ -464,6 +464,7 @@ struct arg_file* sslhcfg_conffile;
struct arg_str* sslhcfg_http;
struct arg_str* sslhcfg_adb;
struct arg_str* sslhcfg_socks5;
struct arg_str* sslhcfg_quick50;
struct arg_str* sslhcfg_anyprot;
struct arg_end* sslhcfg_end;
@ -1018,6 +1019,15 @@ static struct compound_cl_target sslhcfg_anyprot_targets [] = {
{ 0 }
};
static struct compound_cl_target sslhcfg_quick50_targets [] = {
{ & table_sslhcfg_protocols[0], 0, .value.def_string = "quick50" },
{ & table_sslhcfg_protocols[1], 1, .value.def_string = "0" },
{ & table_sslhcfg_protocols[2], 2, .value.def_string = "0" },
{ & table_sslhcfg_protocols[4], 0, .value.def_bool = 1 },
{ & table_sslhcfg_protocols[9], 0, .value.def_int = 1 },
{ 0 }
};
static struct compound_cl_target sslhcfg_socks5_targets [] = {
{ & table_sslhcfg_protocols[0], 0, .value.def_string = "socks5" },
{ & table_sslhcfg_protocols[1], 1, .value.def_string = "0" },
@ -1202,6 +1212,18 @@ static struct compound_cl_arg compound_cl_args[] = {
.override_const = "socks5",
},
{ /* arg: quick50 */
.regex = "(.+):(\\w+)",
.arg_cl = & sslhcfg_quick50,
.base_entry = & table_sslhcfg [13],
.targets = sslhcfg_quick50_targets,
.override_desc = & table_sslhcfg_protocols [0],
.override_matchindex = 0,
.override_const = "quick50",
},
{ /* arg: anyprot */
.regex = "(.+):(\\w+)",
.arg_cl = & sslhcfg_anyprot,
@ -1891,6 +1913,7 @@ int sslhcfg_cl_parse(int argc, char* argv[], struct sslhcfg_item* cfg)
sslhcfg_http = arg_strn(NULL, "http", "<host:port>", 0, 10, "Set up HTTP (plain) target"),
sslhcfg_adb = arg_strn(NULL, "adb", "<host:port>", 0, 10, "Set up ADB (Android Debug) target"),
sslhcfg_socks5 = arg_strn(NULL, "socks5", "<host:port>", 0, 10, "Set up socks5 target"),
sslhcfg_quick50 = arg_strn(NULL, "quick50", "<host:port>", 0, 10, "Set up QUICK-50 target"),
sslhcfg_anyprot = arg_strn(NULL, "anyprot", "<host:port>", 0, 10, "Set up default target"),
sslhcfg_end = arg_end(10)

@ -1,5 +1,5 @@
/* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README)
* on Fri Jul 23 22:34:01 2021.
* on Sat Jul 31 23:32:53 2021.
# conf2struct: generate libconf parsers that read to structs
# Copyright (C) 2018-2019 Yves Rutschle

@ -220,6 +220,18 @@ cl_groups: (
{ path: "log_level"; value: 1 }
);
},
{ name: "quick50"; pattern: "(.+):(\w+)"; description: "Set up QUICK-50 target";
list: "protocols";
override: "name";
argdesc: "<host:port>";
targets: (
{ path: "name"; value: "quick50" },
{ path: "host"; value: "$1" },
{ path: "port"; value: "$2" },
{ path: "is_udp"; value: "1" },
{ path: "log_level"; value: 1 }
);
},
{ name: "anyprot"; pattern: "(.+):(\w+)"; description: "Set up default target";
list: "protocols";
override: "name";

@ -31,6 +31,7 @@ protocols:
{ name: "openvpn"; host: "localhost"; port: "9004"; },
{ name: "xmpp"; host: "localhost"; port: "9009"; },
{ name: "adb"; host: "localhost"; port: "9010"; },
{ name: "quick50"; host: "localhost"; is_udp: true; port: "9011"; },
{ name: "regex"; host: "ip4-localhost"; is_udp: true; port: "9020";
udp_timeout: 30;
regex_patterns: [ "^foo" ];