--- a/src/jconf.c +++ b/src/jconf.c @@ -259,6 +259,19 @@ read_jconf(const char *file) conf.server_legacy.obfs = to_string(value); } else if (strcmp(name, "obfs_param") == 0) { // SSR conf.server_legacy.obfs_param = to_string(value); + } else if (strcmp(name, "mode") == 0) { + char *mode_str = to_string(value); + + if (strcmp(mode_str, "tcp_only") == 0) + conf.mode = TCP_ONLY; + else if (strcmp(mode_str, "tcp_and_udp") == 0) + conf.mode = TCP_AND_UDP; + else if (strcmp(mode_str, "udp_only") == 0) + conf.mode = UDP_ONLY; + else + LOGI("ignore unknown mode: %s, use tcp_only as fallback", + mode_str); + ss_free(mode_str); } else { match = 0; } --- a/src/redir.c +++ b/src/redir.c @@ -1252,6 +1252,9 @@ main(int argc, char **argv) if (user == NULL) { user = conf->user; } + if (mode == TCP_ONLY) { + mode = conf->mode; + } if (mtu == 0) { mtu = conf->mtu; }