mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-11-01 07:30:02 +00:00
Compile the event loop, UDP relay and programs as C++
Rename utils, ss_event, udprelay, winsock, local, server, tunnel, redir
and manager from .c to .cpp. Inside the moved files only the
\snippet{doc} file references and header comments change; snippet
references in doc/*.md, tests/test_cli_docs.py, the build files and
CONTRIBUTION.md follow the new names.
Also cast the Windows-only string literal returned by
get_default_conf(), found by the zig x86_64-windows-gnu build.
Every module of src/ except the unbuilt android.c and the vendored
blake3 is now compiled as C++20. The new .cpp files join the no-heap
ratchet baseline.
This commit is contained in:
@@ -102,12 +102,12 @@ A library `libshadowsocks-c` (legacy names `libshadowsocks-libev.*` are kept) is
|
||||
### Source Organization (`src/`)
|
||||
|
||||
**Shared by all binaries:**
|
||||
- `utils.c` - logging, system utilities, `ss_malloc`/`ss_free`
|
||||
- `utils.cpp` - logging, system utilities, `ss_malloc`/`ss_free`
|
||||
- `jconf.cpp` / `json.cpp` - JSON config file parsing
|
||||
- `netutils.cpp` - network address utilities
|
||||
- `cache.cpp` - uthash-based connection cache (UDP relay, AEAD-2022 tables)
|
||||
- `udprelay.c` - UDP relay implementation (shared, but uses `#ifdef MODULE_*` for per-binary behavior)
|
||||
- `ss_event.c` / `ss_event.h` - event loop API over libuv
|
||||
- `udprelay.cpp` - UDP relay implementation (shared, but uses `#ifdef MODULE_*` for per-binary behavior)
|
||||
- `ss_event.cpp` / `ss_event.h` - event loop API over libuv
|
||||
- `resolv.cpp` - asynchronous DNS via c-ares
|
||||
|
||||
**Crypto layer** (behind a common `crypto_t` function-pointer interface):
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ notices.
|
||||
Doxygen 1.9.4 or newer renders HTML and man pages directly from native source
|
||||
snippets. Each CLI parser has a `cli-options` snippet containing Doxygen
|
||||
`\snippet{doc}` references to its option descriptions. Shared descriptions live
|
||||
in `src/utils.c`; command-specific descriptions live beside the parser. The
|
||||
in `src/utils.cpp`; command-specific descriptions live beside the parser. The
|
||||
`ss-nat` script keeps its snippets in a quoted no-op heredoc so documentation
|
||||
cannot execute shell substitutions. Cipher tables are included directly with
|
||||
Doxygen code snippets.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
add_library(ss_ev STATIC ${PROJECT_SOURCE_DIR}/src/ss_event.c)
|
||||
add_library(ss_ev STATIC ${PROJECT_SOURCE_DIR}/src/ss_event.cpp)
|
||||
target_include_directories(ss_ev PUBLIC ${PROJECT_SOURCE_DIR}/src)
|
||||
target_link_libraries(ss_ev PUBLIC ss_uv Threads::Threads ${SS_MATH_LIBRARY} ${CMAKE_DL_LIBS})
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ For more information, check out shadowsocks-libev(8).
|
||||
|
||||
Options include all supported platform variants; restrictions are noted below.
|
||||
|
||||
\snippet{doc} local.c cli-options
|
||||
\snippet{doc} local.cpp cli-options
|
||||
|
||||
\section ss_local_example EXAMPLE
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ section.
|
||||
|
||||
Options include all supported platform variants; restrictions are noted below.
|
||||
|
||||
\snippet{doc} manager.c cli-options
|
||||
\snippet{doc} manager.cpp cli-options
|
||||
|
||||
\section ss_manager_protocol PROTOCOL
|
||||
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ For more information, check out shadowsocks-libev(8) and the following
|
||||
|
||||
Options include all supported platform variants; restrictions are noted below.
|
||||
|
||||
\snippet{doc} redir.c cli-options
|
||||
\snippet{doc} redir.cpp cli-options
|
||||
|
||||
\section ss_redir_example EXAMPLE
|
||||
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ For more information, check out shadowsocks-libev(8).
|
||||
|
||||
Options include all supported platform variants; restrictions are noted below.
|
||||
|
||||
\snippet{doc} server.c cli-options
|
||||
\snippet{doc} server.cpp cli-options
|
||||
|
||||
\section ss_server_example EXAMPLE
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ For more information, check out shadowsocks-libev(8).
|
||||
|
||||
Options include all supported platform variants; restrictions are noted below.
|
||||
|
||||
\snippet{doc} tunnel.c cli-options
|
||||
\snippet{doc} tunnel.cpp cli-options
|
||||
|
||||
\section ss_tunnel_example EXAMPLE
|
||||
|
||||
|
||||
@@ -10,9 +10,17 @@ src/crypto.cpp 4
|
||||
src/ipset.cpp 3
|
||||
src/jconf.cpp 16
|
||||
src/json.cpp 2
|
||||
src/local.cpp 16
|
||||
src/manager.cpp 14
|
||||
src/plugin.cpp 3
|
||||
src/process.cpp 26
|
||||
src/redir.cpp 15
|
||||
src/resolv.cpp 6
|
||||
src/rule.cpp 2
|
||||
src/server.cpp 17
|
||||
src/ss_event.cpp 5
|
||||
src/ssurl.cpp 3
|
||||
src/stream.cpp 3
|
||||
src/tunnel.cpp 14
|
||||
src/udprelay.cpp 7
|
||||
src/utils.cpp 10
|
||||
|
||||
+11
-11
@@ -50,20 +50,20 @@ endif()
|
||||
|
||||
set(SS_SHARED_SOURCES
|
||||
ppbloom.cpp
|
||||
utils.c
|
||||
utils.cpp
|
||||
jconf.cpp
|
||||
json.cpp
|
||||
netutils.cpp
|
||||
)
|
||||
if (MINGW)
|
||||
set(SS_SHARED_SOURCES ${SS_SHARED_SOURCES} winsock.c)
|
||||
set(SS_SHARED_SOURCES ${SS_SHARED_SOURCES} winsock.cpp)
|
||||
endif ()
|
||||
|
||||
set(LIBSHADOWSOCKS_LIBEV_SOURCE
|
||||
${SS_SHARED_SOURCES}
|
||||
udprelay.c
|
||||
udprelay.cpp
|
||||
cache.cpp
|
||||
local.c
|
||||
local.cpp
|
||||
resolv.cpp
|
||||
ssurl.cpp
|
||||
${SS_CRYPTO_SOURCE}
|
||||
@@ -78,19 +78,19 @@ set(SS_LOCAL_SOURCE
|
||||
|
||||
set(SS_TUNNEL_SOURCE
|
||||
${SS_SHARED_SOURCES}
|
||||
udprelay.c
|
||||
udprelay.cpp
|
||||
cache.cpp
|
||||
tunnel.c
|
||||
tunnel.cpp
|
||||
${SS_CRYPTO_SOURCE}
|
||||
${SS_PLUGIN_SOURCE}
|
||||
)
|
||||
|
||||
set(SS_SERVER_SOURCE
|
||||
${SS_SHARED_SOURCES}
|
||||
udprelay.c
|
||||
udprelay.cpp
|
||||
cache.cpp
|
||||
resolv.cpp
|
||||
server.c
|
||||
server.cpp
|
||||
${SS_CRYPTO_SOURCE}
|
||||
${SS_PLUGIN_SOURCE}
|
||||
${SS_ACL_SOURCE}
|
||||
@@ -98,14 +98,14 @@ set(SS_SERVER_SOURCE
|
||||
|
||||
set(SS_MANAGER_SOURCE
|
||||
${SS_SHARED_SOURCES}
|
||||
manager.c
|
||||
manager.cpp
|
||||
)
|
||||
|
||||
set(SS_REDIR_SOURCE
|
||||
${SS_SHARED_SOURCES}
|
||||
udprelay.c
|
||||
udprelay.cpp
|
||||
cache.cpp
|
||||
redir.c
|
||||
redir.cpp
|
||||
${SS_CRYPTO_SOURCE}
|
||||
${SS_PLUGIN_SOURCE}
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define SS_CORE_FIXED_MAP_HPP
|
||||
|
||||
// Fixed-capacity associative containers. Replace uthash (cache.cpp,
|
||||
// ss_event.c, manager.c) without any per-entry allocation.
|
||||
// ss_event.cpp, manager.cpp) without any per-entry allocation.
|
||||
//
|
||||
// FixedHashMap<K, V>
|
||||
// Open addressing with linear probing and backward-shift deletion (no
|
||||
|
||||
+58
-58
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* local.c - Setup a socks5 proxy through remote shadowsocks server
|
||||
* local.cpp - Setup a socks5 proxy through remote shadowsocks server
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -1600,63 +1600,63 @@ Same behavior as `-S`; see that option for details. Short alias: `-S`.
|
||||
[cli_long_stat_path] */
|
||||
|
||||
/* [cli-options]
|
||||
\snippet{doc} utils.c cli_short_f
|
||||
\snippet{doc} utils.c cli_short_s
|
||||
\snippet{doc} utils.c cli_short_p
|
||||
\snippet{doc} utils.c cli_short_l
|
||||
\snippet{doc} utils.c cli_short_k
|
||||
\snippet{doc} utils.c cli_short_t
|
||||
\snippet{doc} utils.c cli_short_m
|
||||
\snippet{doc} utils.c cli_short_i
|
||||
\snippet{doc} utils.c cli_short_c
|
||||
\snippet{doc} utils.c cli_short_b
|
||||
\snippet{doc} utils.c cli_short_a
|
||||
\snippet{doc} utils.c cli_short_n
|
||||
\snippet{doc} utils.c cli_short_S
|
||||
\snippet{doc} utils.c cli_short_h
|
||||
\snippet{doc} utils.c cli_short_u
|
||||
\snippet{doc} utils.c cli_short_U
|
||||
\snippet{doc} utils.c cli_short_v
|
||||
\snippet{doc} utils.c cli_short_V
|
||||
\snippet{doc} utils.c cli_short_6
|
||||
\snippet{doc} utils.c cli_short_A
|
||||
\snippet{doc} local.c cli_long_config
|
||||
\snippet{doc} local.c cli_long_cipher
|
||||
\snippet{doc} local.c cli_long_timeout
|
||||
\snippet{doc} local.c cli_long_user
|
||||
\snippet{doc} local.c cli_long_pid_file
|
||||
\snippet{doc} local.c cli_long_nofile
|
||||
\snippet{doc} local.c cli_long_udp
|
||||
\snippet{doc} local.c cli_long_udp_only
|
||||
\snippet{doc} local.c cli_long_ipv6_first
|
||||
\snippet{doc} local.c cli_long_verbose
|
||||
\snippet{doc} local.c cli_long_server
|
||||
\snippet{doc} local.c cli_long_server_port
|
||||
\snippet{doc} local.c cli_long_listen_address
|
||||
\snippet{doc} local.c cli_long_listen_port
|
||||
\snippet{doc} local.c cli_long_interface
|
||||
\snippet{doc} utils.c cli_long_version
|
||||
\snippet{doc} utils.c cli_long_tcp_only
|
||||
\snippet{doc} utils.c cli_long_ipv4_first
|
||||
\snippet{doc} local.c cli_long_vpn
|
||||
\snippet{doc} local.c cli_long_stat_path
|
||||
\snippet{doc} utils.c cli_long_reuse_port
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_fast_open
|
||||
\snippet{doc} utils.c cli_long_no_delay
|
||||
\snippet{doc} utils.c cli_long_acl
|
||||
\snippet{doc} utils.c cli_long_mtu
|
||||
\snippet{doc} utils.c cli_long_mptcp
|
||||
\snippet{doc} utils.c cli_long_plugin
|
||||
\snippet{doc} utils.c cli_long_plugin_opts
|
||||
\snippet{doc} utils.c cli_long_password
|
||||
\snippet{doc} utils.c cli_long_key
|
||||
\snippet{doc} utils.c cli_long_server_url
|
||||
\snippet{doc} utils.c cli_long_printable_salt
|
||||
\snippet{doc} utils.c cli_long_help
|
||||
\snippet{doc} utils.cpp cli_short_f
|
||||
\snippet{doc} utils.cpp cli_short_s
|
||||
\snippet{doc} utils.cpp cli_short_p
|
||||
\snippet{doc} utils.cpp cli_short_l
|
||||
\snippet{doc} utils.cpp cli_short_k
|
||||
\snippet{doc} utils.cpp cli_short_t
|
||||
\snippet{doc} utils.cpp cli_short_m
|
||||
\snippet{doc} utils.cpp cli_short_i
|
||||
\snippet{doc} utils.cpp cli_short_c
|
||||
\snippet{doc} utils.cpp cli_short_b
|
||||
\snippet{doc} utils.cpp cli_short_a
|
||||
\snippet{doc} utils.cpp cli_short_n
|
||||
\snippet{doc} utils.cpp cli_short_S
|
||||
\snippet{doc} utils.cpp cli_short_h
|
||||
\snippet{doc} utils.cpp cli_short_u
|
||||
\snippet{doc} utils.cpp cli_short_U
|
||||
\snippet{doc} utils.cpp cli_short_v
|
||||
\snippet{doc} utils.cpp cli_short_V
|
||||
\snippet{doc} utils.cpp cli_short_6
|
||||
\snippet{doc} utils.cpp cli_short_A
|
||||
\snippet{doc} local.cpp cli_long_config
|
||||
\snippet{doc} local.cpp cli_long_cipher
|
||||
\snippet{doc} local.cpp cli_long_timeout
|
||||
\snippet{doc} local.cpp cli_long_user
|
||||
\snippet{doc} local.cpp cli_long_pid_file
|
||||
\snippet{doc} local.cpp cli_long_nofile
|
||||
\snippet{doc} local.cpp cli_long_udp
|
||||
\snippet{doc} local.cpp cli_long_udp_only
|
||||
\snippet{doc} local.cpp cli_long_ipv6_first
|
||||
\snippet{doc} local.cpp cli_long_verbose
|
||||
\snippet{doc} local.cpp cli_long_server
|
||||
\snippet{doc} local.cpp cli_long_server_port
|
||||
\snippet{doc} local.cpp cli_long_listen_address
|
||||
\snippet{doc} local.cpp cli_long_listen_port
|
||||
\snippet{doc} local.cpp cli_long_interface
|
||||
\snippet{doc} utils.cpp cli_long_version
|
||||
\snippet{doc} utils.cpp cli_long_tcp_only
|
||||
\snippet{doc} utils.cpp cli_long_ipv4_first
|
||||
\snippet{doc} local.cpp cli_long_vpn
|
||||
\snippet{doc} local.cpp cli_long_stat_path
|
||||
\snippet{doc} utils.cpp cli_long_reuse_port
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_fast_open
|
||||
\snippet{doc} utils.cpp cli_long_no_delay
|
||||
\snippet{doc} utils.cpp cli_long_acl
|
||||
\snippet{doc} utils.cpp cli_long_mtu
|
||||
\snippet{doc} utils.cpp cli_long_mptcp
|
||||
\snippet{doc} utils.cpp cli_long_plugin
|
||||
\snippet{doc} utils.cpp cli_long_plugin_opts
|
||||
\snippet{doc} utils.cpp cli_long_password
|
||||
\snippet{doc} utils.cpp cli_long_key
|
||||
\snippet{doc} utils.cpp cli_long_server_url
|
||||
\snippet{doc} utils.cpp cli_long_printable_salt
|
||||
\snippet{doc} utils.cpp cli_long_help
|
||||
[cli-options] */
|
||||
static struct option long_options[] = {
|
||||
{ "config", required_argument, NULL, 'c' },
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* server.c - Provide shadowsocks service
|
||||
* server.cpp - Provide shadowsocks service
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -1348,51 +1348,51 @@ Same behavior as `-d`; see that option for details. Short alias: `-d`.
|
||||
[cli_long_nameserver] */
|
||||
|
||||
/* [cli-options]
|
||||
\snippet{doc} utils.c cli_short_f
|
||||
\snippet{doc} manager.c cli_short_s
|
||||
\snippet{doc} utils.c cli_short_k
|
||||
\snippet{doc} utils.c cli_short_t
|
||||
\snippet{doc} utils.c cli_short_m
|
||||
\snippet{doc} manager.c cli_short_c
|
||||
\snippet{doc} utils.c cli_short_i
|
||||
\snippet{doc} utils.c cli_short_d
|
||||
\snippet{doc} utils.c cli_short_a
|
||||
\snippet{doc} utils.c cli_short_n
|
||||
\snippet{doc} utils.c cli_short_D
|
||||
\snippet{doc} utils.c cli_short_6
|
||||
\snippet{doc} utils.c cli_short_h
|
||||
\snippet{doc} utils.c cli_short_u
|
||||
\snippet{doc} utils.c cli_short_U
|
||||
\snippet{doc} utils.c cli_short_v
|
||||
\snippet{doc} utils.c cli_short_A
|
||||
\snippet{doc} manager.c cli_long_config
|
||||
\snippet{doc} manager.c cli_long_cipher
|
||||
\snippet{doc} manager.c cli_long_timeout
|
||||
\snippet{doc} manager.c cli_long_user
|
||||
\snippet{doc} manager.c cli_long_pid_file
|
||||
\snippet{doc} manager.c cli_long_nofile
|
||||
\snippet{doc} manager.c cli_long_udp
|
||||
\snippet{doc} manager.c cli_long_udp_only
|
||||
\snippet{doc} manager.c cli_long_ipv6_first
|
||||
\snippet{doc} manager.c cli_long_verbose
|
||||
\snippet{doc} manager.c cli_long_listen_address
|
||||
\snippet{doc} manager.c cli_long_interface
|
||||
\snippet{doc} manager.c cli_long_nameserver
|
||||
\snippet{doc} utils.c cli_long_version
|
||||
\snippet{doc} utils.c cli_long_tcp_only
|
||||
\snippet{doc} utils.c cli_long_ipv4_first
|
||||
\snippet{doc} utils.c cli_long_fast_open
|
||||
\snippet{doc} utils.c cli_long_no_delay
|
||||
\snippet{doc} utils.c cli_long_reuse_port
|
||||
\snippet{doc} utils.c cli_long_acl
|
||||
\snippet{doc} utils.c cli_long_manager_address
|
||||
\snippet{doc} utils.c cli_long_executable
|
||||
\snippet{doc} utils.c cli_long_mtu
|
||||
\snippet{doc} utils.c cli_long_plugin
|
||||
\snippet{doc} utils.c cli_long_plugin_opts
|
||||
\snippet{doc} utils.c cli_long_password
|
||||
\snippet{doc} utils.c cli_long_workdir
|
||||
\snippet{doc} utils.c cli_long_help
|
||||
\snippet{doc} utils.cpp cli_short_f
|
||||
\snippet{doc} manager.cpp cli_short_s
|
||||
\snippet{doc} utils.cpp cli_short_k
|
||||
\snippet{doc} utils.cpp cli_short_t
|
||||
\snippet{doc} utils.cpp cli_short_m
|
||||
\snippet{doc} manager.cpp cli_short_c
|
||||
\snippet{doc} utils.cpp cli_short_i
|
||||
\snippet{doc} utils.cpp cli_short_d
|
||||
\snippet{doc} utils.cpp cli_short_a
|
||||
\snippet{doc} utils.cpp cli_short_n
|
||||
\snippet{doc} utils.cpp cli_short_D
|
||||
\snippet{doc} utils.cpp cli_short_6
|
||||
\snippet{doc} utils.cpp cli_short_h
|
||||
\snippet{doc} utils.cpp cli_short_u
|
||||
\snippet{doc} utils.cpp cli_short_U
|
||||
\snippet{doc} utils.cpp cli_short_v
|
||||
\snippet{doc} utils.cpp cli_short_A
|
||||
\snippet{doc} manager.cpp cli_long_config
|
||||
\snippet{doc} manager.cpp cli_long_cipher
|
||||
\snippet{doc} manager.cpp cli_long_timeout
|
||||
\snippet{doc} manager.cpp cli_long_user
|
||||
\snippet{doc} manager.cpp cli_long_pid_file
|
||||
\snippet{doc} manager.cpp cli_long_nofile
|
||||
\snippet{doc} manager.cpp cli_long_udp
|
||||
\snippet{doc} manager.cpp cli_long_udp_only
|
||||
\snippet{doc} manager.cpp cli_long_ipv6_first
|
||||
\snippet{doc} manager.cpp cli_long_verbose
|
||||
\snippet{doc} manager.cpp cli_long_listen_address
|
||||
\snippet{doc} manager.cpp cli_long_interface
|
||||
\snippet{doc} manager.cpp cli_long_nameserver
|
||||
\snippet{doc} utils.cpp cli_long_version
|
||||
\snippet{doc} utils.cpp cli_long_tcp_only
|
||||
\snippet{doc} utils.cpp cli_long_ipv4_first
|
||||
\snippet{doc} utils.cpp cli_long_fast_open
|
||||
\snippet{doc} utils.cpp cli_long_no_delay
|
||||
\snippet{doc} utils.cpp cli_long_reuse_port
|
||||
\snippet{doc} utils.cpp cli_long_acl
|
||||
\snippet{doc} utils.cpp cli_long_manager_address
|
||||
\snippet{doc} utils.cpp cli_long_executable
|
||||
\snippet{doc} utils.cpp cli_long_mtu
|
||||
\snippet{doc} utils.cpp cli_long_plugin
|
||||
\snippet{doc} utils.cpp cli_long_plugin_opts
|
||||
\snippet{doc} utils.cpp cli_long_password
|
||||
\snippet{doc} utils.cpp cli_long_workdir
|
||||
\snippet{doc} utils.cpp cli_long_help
|
||||
[cli-options] */
|
||||
static struct option long_options[] = {
|
||||
{ "config", required_argument, NULL, 'c' },
|
||||
+51
-51
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* redir.c - Provide a transparent TCP proxy through remote shadowsocks
|
||||
* redir.cpp - Provide a transparent TCP proxy through remote shadowsocks
|
||||
* server
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
@@ -1003,56 +1003,56 @@ Same behavior as `-T`; see that option for details. Short alias: `-T`.
|
||||
[cli_long_tproxy] */
|
||||
|
||||
/* [cli-options]
|
||||
\snippet{doc} utils.c cli_short_f
|
||||
\snippet{doc} utils.c cli_short_s
|
||||
\snippet{doc} utils.c cli_short_p
|
||||
\snippet{doc} utils.c cli_short_l
|
||||
\snippet{doc} utils.c cli_short_k
|
||||
\snippet{doc} utils.c cli_short_t
|
||||
\snippet{doc} utils.c cli_short_m
|
||||
\snippet{doc} utils.c cli_short_c
|
||||
\snippet{doc} utils.c cli_short_b
|
||||
\snippet{doc} utils.c cli_short_a
|
||||
\snippet{doc} utils.c cli_short_n
|
||||
\snippet{doc} utils.c cli_short_h
|
||||
\snippet{doc} redir.c cli_short_u
|
||||
\snippet{doc} utils.c cli_short_U
|
||||
\snippet{doc} utils.c cli_short_T
|
||||
\snippet{doc} utils.c cli_short_v
|
||||
\snippet{doc} utils.c cli_short_6
|
||||
\snippet{doc} utils.c cli_short_A
|
||||
\snippet{doc} redir.c cli_long_config
|
||||
\snippet{doc} redir.c cli_long_cipher
|
||||
\snippet{doc} redir.c cli_long_timeout
|
||||
\snippet{doc} redir.c cli_long_user
|
||||
\snippet{doc} redir.c cli_long_pid_file
|
||||
\snippet{doc} redir.c cli_long_nofile
|
||||
\snippet{doc} redir.c cli_long_udp
|
||||
\snippet{doc} redir.c cli_long_udp_only
|
||||
\snippet{doc} redir.c cli_long_ipv6_first
|
||||
\snippet{doc} redir.c cli_long_verbose
|
||||
\snippet{doc} redir.c cli_long_server
|
||||
\snippet{doc} redir.c cli_long_server_port
|
||||
\snippet{doc} redir.c cli_long_listen_address
|
||||
\snippet{doc} redir.c cli_long_listen_port
|
||||
\snippet{doc} redir.c cli_long_tproxy
|
||||
\snippet{doc} utils.c cli_long_version
|
||||
\snippet{doc} utils.c cli_long_tcp_only
|
||||
\snippet{doc} utils.c cli_long_ipv4_first
|
||||
\snippet{doc} utils.c cli_long_fast_open
|
||||
\snippet{doc} utils.c cli_long_mtu
|
||||
\snippet{doc} utils.c cli_long_mptcp
|
||||
\snippet{doc} utils.c cli_long_plugin
|
||||
\snippet{doc} utils.c cli_long_plugin_opts
|
||||
\snippet{doc} utils.c cli_long_reuse_port
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_no_delay
|
||||
\snippet{doc} utils.c cli_long_password
|
||||
\snippet{doc} utils.c cli_long_key
|
||||
\snippet{doc} utils.c cli_long_help
|
||||
\snippet{doc} utils.cpp cli_short_f
|
||||
\snippet{doc} utils.cpp cli_short_s
|
||||
\snippet{doc} utils.cpp cli_short_p
|
||||
\snippet{doc} utils.cpp cli_short_l
|
||||
\snippet{doc} utils.cpp cli_short_k
|
||||
\snippet{doc} utils.cpp cli_short_t
|
||||
\snippet{doc} utils.cpp cli_short_m
|
||||
\snippet{doc} utils.cpp cli_short_c
|
||||
\snippet{doc} utils.cpp cli_short_b
|
||||
\snippet{doc} utils.cpp cli_short_a
|
||||
\snippet{doc} utils.cpp cli_short_n
|
||||
\snippet{doc} utils.cpp cli_short_h
|
||||
\snippet{doc} redir.cpp cli_short_u
|
||||
\snippet{doc} utils.cpp cli_short_U
|
||||
\snippet{doc} utils.cpp cli_short_T
|
||||
\snippet{doc} utils.cpp cli_short_v
|
||||
\snippet{doc} utils.cpp cli_short_6
|
||||
\snippet{doc} utils.cpp cli_short_A
|
||||
\snippet{doc} redir.cpp cli_long_config
|
||||
\snippet{doc} redir.cpp cli_long_cipher
|
||||
\snippet{doc} redir.cpp cli_long_timeout
|
||||
\snippet{doc} redir.cpp cli_long_user
|
||||
\snippet{doc} redir.cpp cli_long_pid_file
|
||||
\snippet{doc} redir.cpp cli_long_nofile
|
||||
\snippet{doc} redir.cpp cli_long_udp
|
||||
\snippet{doc} redir.cpp cli_long_udp_only
|
||||
\snippet{doc} redir.cpp cli_long_ipv6_first
|
||||
\snippet{doc} redir.cpp cli_long_verbose
|
||||
\snippet{doc} redir.cpp cli_long_server
|
||||
\snippet{doc} redir.cpp cli_long_server_port
|
||||
\snippet{doc} redir.cpp cli_long_listen_address
|
||||
\snippet{doc} redir.cpp cli_long_listen_port
|
||||
\snippet{doc} redir.cpp cli_long_tproxy
|
||||
\snippet{doc} utils.cpp cli_long_version
|
||||
\snippet{doc} utils.cpp cli_long_tcp_only
|
||||
\snippet{doc} utils.cpp cli_long_ipv4_first
|
||||
\snippet{doc} utils.cpp cli_long_fast_open
|
||||
\snippet{doc} utils.cpp cli_long_mtu
|
||||
\snippet{doc} utils.cpp cli_long_mptcp
|
||||
\snippet{doc} utils.cpp cli_long_plugin
|
||||
\snippet{doc} utils.cpp cli_long_plugin_opts
|
||||
\snippet{doc} utils.cpp cli_long_reuse_port
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_no_delay
|
||||
\snippet{doc} utils.cpp cli_long_password
|
||||
\snippet{doc} utils.cpp cli_long_key
|
||||
\snippet{doc} utils.cpp cli_long_help
|
||||
[cli-options] */
|
||||
static struct option long_options[] = {
|
||||
{ "config", required_argument, NULL, 'c' },
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* server.c - Provide shadowsocks service
|
||||
* server.cpp - Provide shadowsocks service
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -1929,59 +1929,59 @@ Same behavior as `-d`; see that option for details. Short alias: `-d`.
|
||||
[cli_long_nameserver] */
|
||||
|
||||
/* [cli-options]
|
||||
\snippet{doc} utils.c cli_short_f
|
||||
\snippet{doc} server.c cli_short_s
|
||||
\snippet{doc} server.c cli_short_p
|
||||
\snippet{doc} utils.c cli_short_k
|
||||
\snippet{doc} utils.c cli_short_t
|
||||
\snippet{doc} utils.c cli_short_m
|
||||
\snippet{doc} server.c cli_short_b
|
||||
\snippet{doc} utils.c cli_short_c
|
||||
\snippet{doc} utils.c cli_short_i
|
||||
\snippet{doc} utils.c cli_short_d
|
||||
\snippet{doc} utils.c cli_short_a
|
||||
\snippet{doc} utils.c cli_short_n
|
||||
\snippet{doc} utils.c cli_short_h
|
||||
\snippet{doc} utils.c cli_short_u
|
||||
\snippet{doc} utils.c cli_short_U
|
||||
\snippet{doc} utils.c cli_short_v
|
||||
\snippet{doc} utils.c cli_short_6
|
||||
\snippet{doc} utils.c cli_short_A
|
||||
\snippet{doc} server.c cli_long_config
|
||||
\snippet{doc} server.c cli_long_cipher
|
||||
\snippet{doc} server.c cli_long_timeout
|
||||
\snippet{doc} server.c cli_long_user
|
||||
\snippet{doc} server.c cli_long_pid_file
|
||||
\snippet{doc} server.c cli_long_nofile
|
||||
\snippet{doc} server.c cli_long_udp
|
||||
\snippet{doc} server.c cli_long_udp_only
|
||||
\snippet{doc} server.c cli_long_ipv6_first
|
||||
\snippet{doc} server.c cli_long_verbose
|
||||
\snippet{doc} server.c cli_long_listen_address
|
||||
\snippet{doc} server.c cli_long_listen_port
|
||||
\snippet{doc} server.c cli_long_outbound_address
|
||||
\snippet{doc} server.c cli_long_interface
|
||||
\snippet{doc} server.c cli_long_nameserver
|
||||
\snippet{doc} utils.c cli_long_version
|
||||
\snippet{doc} utils.c cli_long_tcp_only
|
||||
\snippet{doc} utils.c cli_long_ipv4_first
|
||||
\snippet{doc} utils.c cli_long_fast_open
|
||||
\snippet{doc} utils.c cli_long_reuse_port
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_no_delay
|
||||
\snippet{doc} utils.c cli_long_acl
|
||||
\snippet{doc} utils.c cli_long_manager_address
|
||||
\snippet{doc} utils.c cli_long_mtu
|
||||
\snippet{doc} utils.c cli_long_help
|
||||
\snippet{doc} utils.c cli_long_plugin
|
||||
\snippet{doc} utils.c cli_long_plugin_opts
|
||||
\snippet{doc} utils.c cli_long_password
|
||||
\snippet{doc} utils.c cli_long_key
|
||||
\snippet{doc} utils.c cli_long_mptcp
|
||||
\snippet{doc} utils.c cli_long_nftables_sets
|
||||
\snippet{doc} utils.cpp cli_short_f
|
||||
\snippet{doc} server.cpp cli_short_s
|
||||
\snippet{doc} server.cpp cli_short_p
|
||||
\snippet{doc} utils.cpp cli_short_k
|
||||
\snippet{doc} utils.cpp cli_short_t
|
||||
\snippet{doc} utils.cpp cli_short_m
|
||||
\snippet{doc} server.cpp cli_short_b
|
||||
\snippet{doc} utils.cpp cli_short_c
|
||||
\snippet{doc} utils.cpp cli_short_i
|
||||
\snippet{doc} utils.cpp cli_short_d
|
||||
\snippet{doc} utils.cpp cli_short_a
|
||||
\snippet{doc} utils.cpp cli_short_n
|
||||
\snippet{doc} utils.cpp cli_short_h
|
||||
\snippet{doc} utils.cpp cli_short_u
|
||||
\snippet{doc} utils.cpp cli_short_U
|
||||
\snippet{doc} utils.cpp cli_short_v
|
||||
\snippet{doc} utils.cpp cli_short_6
|
||||
\snippet{doc} utils.cpp cli_short_A
|
||||
\snippet{doc} server.cpp cli_long_config
|
||||
\snippet{doc} server.cpp cli_long_cipher
|
||||
\snippet{doc} server.cpp cli_long_timeout
|
||||
\snippet{doc} server.cpp cli_long_user
|
||||
\snippet{doc} server.cpp cli_long_pid_file
|
||||
\snippet{doc} server.cpp cli_long_nofile
|
||||
\snippet{doc} server.cpp cli_long_udp
|
||||
\snippet{doc} server.cpp cli_long_udp_only
|
||||
\snippet{doc} server.cpp cli_long_ipv6_first
|
||||
\snippet{doc} server.cpp cli_long_verbose
|
||||
\snippet{doc} server.cpp cli_long_listen_address
|
||||
\snippet{doc} server.cpp cli_long_listen_port
|
||||
\snippet{doc} server.cpp cli_long_outbound_address
|
||||
\snippet{doc} server.cpp cli_long_interface
|
||||
\snippet{doc} server.cpp cli_long_nameserver
|
||||
\snippet{doc} utils.cpp cli_long_version
|
||||
\snippet{doc} utils.cpp cli_long_tcp_only
|
||||
\snippet{doc} utils.cpp cli_long_ipv4_first
|
||||
\snippet{doc} utils.cpp cli_long_fast_open
|
||||
\snippet{doc} utils.cpp cli_long_reuse_port
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_no_delay
|
||||
\snippet{doc} utils.cpp cli_long_acl
|
||||
\snippet{doc} utils.cpp cli_long_manager_address
|
||||
\snippet{doc} utils.cpp cli_long_mtu
|
||||
\snippet{doc} utils.cpp cli_long_help
|
||||
\snippet{doc} utils.cpp cli_long_plugin
|
||||
\snippet{doc} utils.cpp cli_long_plugin_opts
|
||||
\snippet{doc} utils.cpp cli_long_password
|
||||
\snippet{doc} utils.cpp cli_long_key
|
||||
\snippet{doc} utils.cpp cli_long_mptcp
|
||||
\snippet{doc} utils.cpp cli_long_nftables_sets
|
||||
[cli-options] */
|
||||
static struct option long_options[] = {
|
||||
{ "config", required_argument, NULL, 'c' },
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* tunnel.c - Setup a local port forwarding through remote shadowsocks server
|
||||
* tunnel.cpp - Setup a local port forwarding through remote shadowsocks server
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -1043,60 +1043,60 @@ Same behavior as `-V`; see that option for details. Short alias: `-V`.
|
||||
[cli_long_vpn] */
|
||||
|
||||
/* [cli-options]
|
||||
\snippet{doc} utils.c cli_short_f
|
||||
\snippet{doc} utils.c cli_short_s
|
||||
\snippet{doc} utils.c cli_short_p
|
||||
\snippet{doc} utils.c cli_short_l
|
||||
\snippet{doc} utils.c cli_short_k
|
||||
\snippet{doc} utils.c cli_short_t
|
||||
\snippet{doc} utils.c cli_short_m
|
||||
\snippet{doc} utils.c cli_short_i
|
||||
\snippet{doc} utils.c cli_short_c
|
||||
\snippet{doc} utils.c cli_short_b
|
||||
\snippet{doc} utils.c cli_short_L
|
||||
\snippet{doc} utils.c cli_short_a
|
||||
\snippet{doc} utils.c cli_short_n
|
||||
\snippet{doc} utils.c cli_short_h
|
||||
\snippet{doc} utils.c cli_short_u
|
||||
\snippet{doc} utils.c cli_short_U
|
||||
\snippet{doc} utils.c cli_short_v
|
||||
\snippet{doc} utils.c cli_short_V
|
||||
\snippet{doc} utils.c cli_short_6
|
||||
\snippet{doc} utils.c cli_short_A
|
||||
\snippet{doc} tunnel.c cli_long_config
|
||||
\snippet{doc} tunnel.c cli_long_cipher
|
||||
\snippet{doc} tunnel.c cli_long_timeout
|
||||
\snippet{doc} tunnel.c cli_long_user
|
||||
\snippet{doc} tunnel.c cli_long_pid_file
|
||||
\snippet{doc} tunnel.c cli_long_nofile
|
||||
\snippet{doc} tunnel.c cli_long_udp
|
||||
\snippet{doc} tunnel.c cli_long_udp_only
|
||||
\snippet{doc} tunnel.c cli_long_ipv6_first
|
||||
\snippet{doc} tunnel.c cli_long_verbose
|
||||
\snippet{doc} tunnel.c cli_long_server
|
||||
\snippet{doc} tunnel.c cli_long_server_port
|
||||
\snippet{doc} tunnel.c cli_long_listen_address
|
||||
\snippet{doc} tunnel.c cli_long_listen_port
|
||||
\snippet{doc} tunnel.c cli_long_interface
|
||||
\snippet{doc} tunnel.c cli_long_destination
|
||||
\snippet{doc} utils.c cli_long_version
|
||||
\snippet{doc} utils.c cli_long_tcp_only
|
||||
\snippet{doc} utils.c cli_long_ipv4_first
|
||||
\snippet{doc} tunnel.c cli_long_vpn
|
||||
\snippet{doc} utils.c cli_long_fast_open
|
||||
\snippet{doc} utils.c cli_long_mtu
|
||||
\snippet{doc} utils.c cli_long_no_delay
|
||||
\snippet{doc} utils.c cli_long_mptcp
|
||||
\snippet{doc} utils.c cli_long_plugin
|
||||
\snippet{doc} utils.c cli_long_plugin_opts
|
||||
\snippet{doc} utils.c cli_long_reuse_port
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.c cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.c cli_long_password
|
||||
\snippet{doc} utils.c cli_long_key
|
||||
\snippet{doc} utils.c cli_long_help
|
||||
\snippet{doc} utils.cpp cli_short_f
|
||||
\snippet{doc} utils.cpp cli_short_s
|
||||
\snippet{doc} utils.cpp cli_short_p
|
||||
\snippet{doc} utils.cpp cli_short_l
|
||||
\snippet{doc} utils.cpp cli_short_k
|
||||
\snippet{doc} utils.cpp cli_short_t
|
||||
\snippet{doc} utils.cpp cli_short_m
|
||||
\snippet{doc} utils.cpp cli_short_i
|
||||
\snippet{doc} utils.cpp cli_short_c
|
||||
\snippet{doc} utils.cpp cli_short_b
|
||||
\snippet{doc} utils.cpp cli_short_L
|
||||
\snippet{doc} utils.cpp cli_short_a
|
||||
\snippet{doc} utils.cpp cli_short_n
|
||||
\snippet{doc} utils.cpp cli_short_h
|
||||
\snippet{doc} utils.cpp cli_short_u
|
||||
\snippet{doc} utils.cpp cli_short_U
|
||||
\snippet{doc} utils.cpp cli_short_v
|
||||
\snippet{doc} utils.cpp cli_short_V
|
||||
\snippet{doc} utils.cpp cli_short_6
|
||||
\snippet{doc} utils.cpp cli_short_A
|
||||
\snippet{doc} tunnel.cpp cli_long_config
|
||||
\snippet{doc} tunnel.cpp cli_long_cipher
|
||||
\snippet{doc} tunnel.cpp cli_long_timeout
|
||||
\snippet{doc} tunnel.cpp cli_long_user
|
||||
\snippet{doc} tunnel.cpp cli_long_pid_file
|
||||
\snippet{doc} tunnel.cpp cli_long_nofile
|
||||
\snippet{doc} tunnel.cpp cli_long_udp
|
||||
\snippet{doc} tunnel.cpp cli_long_udp_only
|
||||
\snippet{doc} tunnel.cpp cli_long_ipv6_first
|
||||
\snippet{doc} tunnel.cpp cli_long_verbose
|
||||
\snippet{doc} tunnel.cpp cli_long_server
|
||||
\snippet{doc} tunnel.cpp cli_long_server_port
|
||||
\snippet{doc} tunnel.cpp cli_long_listen_address
|
||||
\snippet{doc} tunnel.cpp cli_long_listen_port
|
||||
\snippet{doc} tunnel.cpp cli_long_interface
|
||||
\snippet{doc} tunnel.cpp cli_long_destination
|
||||
\snippet{doc} utils.cpp cli_long_version
|
||||
\snippet{doc} utils.cpp cli_long_tcp_only
|
||||
\snippet{doc} utils.cpp cli_long_ipv4_first
|
||||
\snippet{doc} tunnel.cpp cli_long_vpn
|
||||
\snippet{doc} utils.cpp cli_long_fast_open
|
||||
\snippet{doc} utils.cpp cli_long_mtu
|
||||
\snippet{doc} utils.cpp cli_long_no_delay
|
||||
\snippet{doc} utils.cpp cli_long_mptcp
|
||||
\snippet{doc} utils.cpp cli_long_plugin
|
||||
\snippet{doc} utils.cpp cli_long_plugin_opts
|
||||
\snippet{doc} utils.cpp cli_long_reuse_port
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_incoming_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_sndbuf
|
||||
\snippet{doc} utils.cpp cli_long_tcp_outgoing_rcvbuf
|
||||
\snippet{doc} utils.cpp cli_long_password
|
||||
\snippet{doc} utils.cpp cli_long_key
|
||||
\snippet{doc} utils.cpp cli_long_help
|
||||
[cli-options] */
|
||||
static struct option long_options[] = {
|
||||
{ "config", required_argument, NULL, 'c' },
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* udprelay.c - Setup UDP relay for both client and server
|
||||
* udprelay.cpp - Setup UDP relay for both client and server
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* utils.c - Misc utilities
|
||||
* utils.cpp - Misc utilities
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
@@ -860,7 +860,7 @@ get_default_conf(void)
|
||||
// If not, fall back to the system-wide config.
|
||||
return sysconf;
|
||||
#else
|
||||
return "config.json";
|
||||
return (char *)"config.json";
|
||||
#endif
|
||||
}
|
||||
|
||||
+1
-1
@@ -207,7 +207,7 @@ extern int use_syslog;
|
||||
#endif
|
||||
#define ERROR(s) ss_error(s)
|
||||
|
||||
// Implemented in winsock.c
|
||||
// Implemented in winsock.cpp
|
||||
void ss_error(const char *s);
|
||||
void ss_color_info(void);
|
||||
void ss_color_error(void);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* winsock.c - Windows socket compatibility layer
|
||||
* winsock.cpp - Windows socket compatibility layer
|
||||
*
|
||||
* Copyright (C) 2013 - 2019, Max Lv <max.c.lv@gmail.com>
|
||||
*
|
||||
+17
-17
@@ -20,8 +20,8 @@ endif()
|
||||
|
||||
# Helper function to add a unit test
|
||||
function(ss_add_test name sources libs)
|
||||
if(WIN32 AND "${sources}" MATCHES "utils.c")
|
||||
list(APPEND sources ${PROJECT_SOURCE_DIR}/src/winsock.c)
|
||||
if(WIN32 AND "${sources}" MATCHES "utils.cpp")
|
||||
list(APPEND sources ${PROJECT_SOURCE_DIR}/src/winsock.cpp)
|
||||
endif()
|
||||
add_executable(${name} ${sources})
|
||||
target_compile_definitions(${name} PRIVATE -DHAVE_CONFIG_H)
|
||||
@@ -95,9 +95,9 @@ ss_add_test(test_base64
|
||||
"test_base64.c;${PROJECT_SOURCE_DIR}/src/base64.cpp"
|
||||
"")
|
||||
|
||||
# test_utils - needs sodium (for ss_malloc -> uses sodium in utils.c)
|
||||
# test_utils - needs sodium (for ss_malloc -> uses sodium in utils.cpp)
|
||||
ss_add_test(test_utils
|
||||
"test_utils.c;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_utils.c;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_sodium")
|
||||
|
||||
# test_json - standalone json parser
|
||||
@@ -107,7 +107,7 @@ ss_add_test(test_json
|
||||
|
||||
# test_ssurl - ss:// URI parsing (SIP002 and legacy)
|
||||
ss_add_test(test_ssurl
|
||||
"test_ssurl.c;${PROJECT_SOURCE_DIR}/src/ssurl.cpp;${PROJECT_SOURCE_DIR}/src/base64.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_ssurl.c;${PROJECT_SOURCE_DIR}/src/ssurl.cpp;${PROJECT_SOURCE_DIR}/src/base64.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_sodium")
|
||||
|
||||
# test_netutils - address parsing and resolver integration
|
||||
@@ -117,19 +117,19 @@ set(TEST_NETUTILS_LIBS
|
||||
ss_cares
|
||||
)
|
||||
ss_add_test(test_netutils
|
||||
"test_netutils.c;${PROJECT_SOURCE_DIR}/src/netutils.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_netutils.c;${PROJECT_SOURCE_DIR}/src/netutils.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${TEST_NETUTILS_LIBS}")
|
||||
|
||||
# test_cache - expiration uses a platform monotonic clock
|
||||
ss_add_test(test_cache
|
||||
"test_cache.c;${PROJECT_SOURCE_DIR}/src/cache.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_cache.c;${PROJECT_SOURCE_DIR}/src/cache.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_sodium")
|
||||
|
||||
# test_ppbloom - needs bloom
|
||||
set(TEST_PPBLOOM_LIBS "")
|
||||
list(APPEND TEST_PPBLOOM_LIBS bloom)
|
||||
ss_add_test(test_ppbloom
|
||||
"test_ppbloom.c;${PROJECT_SOURCE_DIR}/src/ppbloom.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_ppbloom.c;${PROJECT_SOURCE_DIR}/src/ppbloom.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${TEST_PPBLOOM_LIBS};ss_sodium;${SS_MATH_LIBRARY}")
|
||||
|
||||
if(SS_ENABLE_REGEX)
|
||||
@@ -139,13 +139,13 @@ set(TEST_RULE_LIBS
|
||||
ss_sodium
|
||||
)
|
||||
ss_add_test(test_rule
|
||||
"test_rule.c;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_rule.c;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${TEST_RULE_LIBS}")
|
||||
|
||||
# test_acl - ACL precedence and prefix matching
|
||||
set(TEST_ACL_LIBS ${TEST_RULE_LIBS})
|
||||
ss_add_test(test_acl
|
||||
"test_acl.c;${PROJECT_SOURCE_DIR}/src/acl.cpp;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_acl.c;${PROJECT_SOURCE_DIR}/src/acl.cpp;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${TEST_ACL_LIBS}")
|
||||
|
||||
endif()
|
||||
@@ -157,7 +157,7 @@ set(TEST_JCONF_LIBS
|
||||
ss_cares
|
||||
)
|
||||
ss_add_test(test_jconf
|
||||
"test_jconf.c;${PROJECT_SOURCE_DIR}/src/jconf.cpp;${PROJECT_SOURCE_DIR}/src/json.cpp;${PROJECT_SOURCE_DIR}/src/utils.c;${PROJECT_SOURCE_DIR}/src/netutils.cpp"
|
||||
"test_jconf.c;${PROJECT_SOURCE_DIR}/src/jconf.cpp;${PROJECT_SOURCE_DIR}/src/json.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp;${PROJECT_SOURCE_DIR}/src/netutils.cpp"
|
||||
"${TEST_JCONF_LIBS};${SS_MATH_LIBRARY}")
|
||||
|
||||
# Crypto sources shared by the tests that link the crypto layer. The AEAD-2022
|
||||
@@ -171,7 +171,7 @@ set(SS_CRYPTO_TEST_SOURCES
|
||||
${PROJECT_SOURCE_DIR}/src/ppbloom.cpp
|
||||
${PROJECT_SOURCE_DIR}/src/cache.cpp
|
||||
${PROJECT_SOURCE_DIR}/src/base64.cpp
|
||||
${PROJECT_SOURCE_DIR}/src/utils.c
|
||||
${PROJECT_SOURCE_DIR}/src/utils.cpp
|
||||
)
|
||||
|
||||
if(SS_ENABLE_LEGACY)
|
||||
@@ -220,16 +220,16 @@ add_test(NAME test_ss_setup
|
||||
set_tests_properties(test_ss_setup PROPERTIES LABELS "integration")
|
||||
|
||||
ss_add_test(test_ipset
|
||||
"test_ipset.c;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_ipset.c;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_sodium")
|
||||
|
||||
ss_add_test(test_process
|
||||
"test_process.c;${PROJECT_SOURCE_DIR}/src/process.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_process.c;${PROJECT_SOURCE_DIR}/src/process.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_sodium")
|
||||
set_tests_properties(test_process PROPERTIES TIMEOUT 20)
|
||||
|
||||
ss_add_test(test_resolv
|
||||
"test_resolv.c;${PROJECT_SOURCE_DIR}/src/resolv.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_resolv.c;${PROJECT_SOURCE_DIR}/src/resolv.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_ev;ss_cares;ss_sodium")
|
||||
set_tests_properties(test_resolv PROPERTIES TIMEOUT 20)
|
||||
|
||||
@@ -238,13 +238,13 @@ if(SS_ENABLE_REGEX)
|
||||
list(APPEND TEST_LITERAL_LIBS ss_pcre2)
|
||||
endif()
|
||||
ss_add_test(test_acl_literal
|
||||
"test_acl_literal.c;${PROJECT_SOURCE_DIR}/src/acl.cpp;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_acl_literal.c;${PROJECT_SOURCE_DIR}/src/acl.cpp;${PROJECT_SOURCE_DIR}/src/ipset.cpp;${PROJECT_SOURCE_DIR}/src/rule.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"${TEST_LITERAL_LIBS}")
|
||||
|
||||
ss_add_test(test_event "test_event.c" "ss_ev")
|
||||
set_tests_properties(test_event PROPERTIES TIMEOUT 30)
|
||||
ss_add_test(test_resolv_async
|
||||
"test_resolv_async.c;${PROJECT_SOURCE_DIR}/src/resolv.cpp;${PROJECT_SOURCE_DIR}/src/utils.c"
|
||||
"test_resolv_async.c;${PROJECT_SOURCE_DIR}/src/resolv.cpp;${PROJECT_SOURCE_DIR}/src/utils.cpp"
|
||||
"ss_ev;ss_cares;ss_sodium")
|
||||
set_tests_properties(test_resolv_async PROPERTIES TIMEOUT 30)
|
||||
|
||||
|
||||
+11
-11
@@ -19,7 +19,7 @@ class CliDocsTests(unittest.TestCase):
|
||||
self.root = Path(self.temp.name)
|
||||
(self.root / 'src').mkdir()
|
||||
(self.root / 'doc').mkdir()
|
||||
for name in ('local.c', 'server.c', 'tunnel.c', 'redir.c', 'manager.c', 'utils.c', 'ss-nat'):
|
||||
for name in ('local.cpp', 'server.cpp', 'tunnel.cpp', 'redir.cpp', 'manager.cpp', 'utils.cpp', 'ss-nat'):
|
||||
shutil.copyfile(ROOT / 'src' / name, self.root / 'src' / name)
|
||||
for path in (ROOT / 'doc').glob('*.md'):
|
||||
shutil.copyfile(path, self.root / 'doc' / path.name)
|
||||
@@ -33,32 +33,32 @@ class CliDocsTests(unittest.TestCase):
|
||||
def test_current_documentation_matches_all_variants(self):
|
||||
DOCS.check(self.root)
|
||||
sources = {p.name: p.read_text(encoding='utf-8') for p in (self.root / 'src').iterdir()}
|
||||
local = DOCS.documented_options('local.c', sources)
|
||||
local = DOCS.documented_options('local.cpp', sources)
|
||||
self.assertIn('-S', local)
|
||||
self.assertIn('-V', local)
|
||||
self.assertIn('--nftables-sets', DOCS.documented_options('server.c', sources))
|
||||
self.assertIn('--nftables-sets', DOCS.documented_options('server.cpp', sources))
|
||||
self.assertIn('-I', DOCS.documented_options('ss-nat', sources))
|
||||
self.assertNotIn('-p', DOCS.documented_options('manager.c', sources))
|
||||
self.assertNotIn('-p', DOCS.documented_options('manager.cpp', sources))
|
||||
|
||||
def test_new_option_requires_documentation(self):
|
||||
self.change('src/local.c', '"reuse-port",', '"new-option",')
|
||||
self.change('src/local.cpp', '"reuse-port",', '"new-option",')
|
||||
with self.assertRaisesRegex(ValueError, 'missing documentation.*new-option'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_argument_arity_is_checked(self):
|
||||
self.change('src/local.c', '"reuse-port", no_argument',
|
||||
self.change('src/local.cpp', '"reuse-port", no_argument',
|
||||
'"reuse-port", required_argument')
|
||||
with self.assertRaisesRegex(ValueError, 'argument mismatch.*reuse-port'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_unknown_parser_syntax_fails_closed(self):
|
||||
self.change('src/local.c', '"reuse-port", no_argument',
|
||||
self.change('src/local.cpp', '"reuse-port", no_argument',
|
||||
'"reuse-port", optional_argument')
|
||||
with self.assertRaisesRegex(ValueError, 'Unsupported long_options'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_nonliteral_short_options_fail_closed(self):
|
||||
self.change('src/local.c', '":f:s:p:l:k:t:m:i:c:b:a:n:huUv6A"', 'SHORT_OPTIONS')
|
||||
self.change('src/local.cpp', '":f:s:p:l:k:t:m:i:c:b:a:n:huUv6A"', 'SHORT_OPTIONS')
|
||||
with self.assertRaisesRegex(ValueError, 'literal getopt_long'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
@@ -68,17 +68,17 @@ class CliDocsTests(unittest.TestCase):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_missing_snippet_is_rejected(self):
|
||||
self.change('src/local.c', 'utils.c cli_long_reuse_port', 'utils.c missing_snippet')
|
||||
self.change('src/local.cpp', 'utils.cpp cli_long_reuse_port', 'utils.cpp missing_snippet')
|
||||
with self.assertRaisesRegex(ValueError, 'Missing snippet'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_duplicate_option_is_rejected(self):
|
||||
self.change('src/local.c', 'utils.c cli_long_reuse_port', 'utils.c cli_short_f')
|
||||
self.change('src/local.cpp', 'utils.cpp cli_long_reuse_port', 'utils.cpp cli_short_f')
|
||||
with self.assertRaisesRegex(ValueError, 'Duplicate documented option'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
def test_manual_must_include_parser_options(self):
|
||||
self.change('doc/ss-local.md', 'local.c cli-options', 'local.c missing-options')
|
||||
self.change('doc/ss-local.md', 'local.cpp cli-options', 'local.cpp missing-options')
|
||||
with self.assertRaisesRegex(ValueError, 'manual must include'):
|
||||
DOCS.check(self.root)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user