diff --git a/CLAUDE.md b/CLAUDE.md index 17225d41..6d8b4fd9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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): diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index 4f39d86d..082ed9e4 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -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. diff --git a/cmake/EventLoop.cmake b/cmake/EventLoop.cmake index f60dd303..9055c296 100644 --- a/cmake/EventLoop.cmake +++ b/cmake/EventLoop.cmake @@ -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") diff --git a/doc/ss-local.md b/doc/ss-local.md index 2e6a0692..98c7bc20 100644 --- a/doc/ss-local.md +++ b/doc/ss-local.md @@ -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 diff --git a/doc/ss-manager.md b/doc/ss-manager.md index a67d15cf..63b1dec7 100644 --- a/doc/ss-manager.md +++ b/doc/ss-manager.md @@ -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 diff --git a/doc/ss-redir.md b/doc/ss-redir.md index 008d89e6..ecb44f6e 100644 --- a/doc/ss-redir.md +++ b/doc/ss-redir.md @@ -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 diff --git a/doc/ss-server.md b/doc/ss-server.md index e3eac576..0385837d 100644 --- a/doc/ss-server.md +++ b/doc/ss-server.md @@ -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 diff --git a/doc/ss-tunnel.md b/doc/ss-tunnel.md index 67897e9b..a78aae93 100644 --- a/doc/ss-tunnel.md +++ b/doc/ss-tunnel.md @@ -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 diff --git a/scripts/no_heap_baseline.txt b/scripts/no_heap_baseline.txt index 7c7fe012..bc94968b 100644 --- a/scripts/no_heap_baseline.txt +++ b/scripts/no_heap_baseline.txt @@ -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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 74ba2e00..566163ae 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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} ) diff --git a/src/core/fixed_map.hpp b/src/core/fixed_map.hpp index a821e313..bb34462e 100644 --- a/src/core/fixed_map.hpp +++ b/src/core/fixed_map.hpp @@ -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 // Open addressing with linear probing and backward-shift deletion (no diff --git a/src/local.c b/src/local.cpp similarity index 97% rename from src/local.c rename to src/local.cpp index c000c1c7..a20fa6b9 100644 --- a/src/local.c +++ b/src/local.cpp @@ -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 * @@ -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' }, diff --git a/src/manager.c b/src/manager.cpp similarity index 96% rename from src/manager.c rename to src/manager.cpp index f1af4fcb..7e9494ec 100644 --- a/src/manager.c +++ b/src/manager.cpp @@ -1,5 +1,5 @@ /* - * server.c - Provide shadowsocks service + * server.cpp - Provide shadowsocks service * * Copyright (C) 2013 - 2019, Max Lv * @@ -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' }, diff --git a/src/redir.c b/src/redir.cpp similarity index 95% rename from src/redir.c rename to src/redir.cpp index dea814c6..60892412 100644 --- a/src/redir.c +++ b/src/redir.cpp @@ -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 @@ -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' }, diff --git a/src/server.c b/src/server.cpp similarity index 97% rename from src/server.c rename to src/server.cpp index 0a2c9bf4..e12d97c8 100644 --- a/src/server.c +++ b/src/server.cpp @@ -1,5 +1,5 @@ /* - * server.c - Provide shadowsocks service + * server.cpp - Provide shadowsocks service * * Copyright (C) 2013 - 2019, Max Lv * @@ -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' }, diff --git a/src/ss_event.c b/src/ss_event.cpp similarity index 100% rename from src/ss_event.c rename to src/ss_event.cpp diff --git a/src/tunnel.c b/src/tunnel.cpp similarity index 95% rename from src/tunnel.c rename to src/tunnel.cpp index 576ee74a..4015a7ee 100644 --- a/src/tunnel.c +++ b/src/tunnel.cpp @@ -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 * @@ -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' }, diff --git a/src/udprelay.c b/src/udprelay.cpp similarity index 99% rename from src/udprelay.c rename to src/udprelay.cpp index 5857a421..f4b0b90b 100644 --- a/src/udprelay.c +++ b/src/udprelay.cpp @@ -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 * diff --git a/src/utils.c b/src/utils.cpp similarity index 99% rename from src/utils.c rename to src/utils.cpp index b6f95f9c..24052734 100644 --- a/src/utils.c +++ b/src/utils.cpp @@ -1,5 +1,5 @@ /* - * utils.c - Misc utilities + * utils.cpp - Misc utilities * * Copyright (C) 2013 - 2019, Max Lv * @@ -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 } diff --git a/src/utils.h b/src/utils.h index a582a6de..1ffe1801 100644 --- a/src/utils.h +++ b/src/utils.h @@ -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); diff --git a/src/winsock.c b/src/winsock.cpp similarity index 99% rename from src/winsock.c rename to src/winsock.cpp index ef6e7cb5..c0997030 100644 --- a/src/winsock.c +++ b/src/winsock.cpp @@ -1,5 +1,5 @@ /* - * winsock.c - Windows socket compatibility layer + * winsock.cpp - Windows socket compatibility layer * * Copyright (C) 2013 - 2019, Max Lv * diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7b0befa8..d6aeb456 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -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) diff --git a/tests/test_cli_docs.py b/tests/test_cli_docs.py index 8b0032c3..eab32687 100644 --- a/tests/test_cli_docs.py +++ b/tests/test_cli_docs.py @@ -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)