首先从 README.md 读. 之后读 crates/ruci-cmd/README.md
然后读 配置文件 local.lua 和 remote.lua
读完后,只是有了一个大概的印象。还是要编译、运行一下
(或者直接下载release后运行, 运行参数为 crates/ruci-cmd/README.md 文件中 的 cargo run 中后面的 --
后面的参数, 不包含 --
)
先将 local.lua 中 Config =
的地方设为 Config = config_0_direct
之后进入 crates/ruci-cmd, 运行 crates/ruci-cmd/README.md 中的 标着 “指定不生成 log “ 的那个命令,即可编译+运行(自动运行)
之后把系统代理设为 socks5://0.0.0.0:10800
后,即可用本地代理直连了(没什么用,但是可测试程序功能是否正常)
浏览一个网页,发现能正常浏览,之后日志会有 类似下面的内容
ruci-cmd
working dir: “~/ruci/crates/ruci-cmd"
Mode: C
Config: local.lua
LogLevel(flag): None
Empty log-file name specified, no log file would be generated.
Log Level(flag/env): "none,ruci=debug"
…
new accepted stream cid=1 new_cid=1-5
folding…
fold inbound succeed
try select out
folding
direct dial
fold outbound succeed
当然,前面会跟着 时间, DEBUG, INFO, 等字样。
关闭ruci-cmd( ctrl+c) 时,日志会有 如下内容
got interrupt
signal received, starting graceful shutdown...
chain engine: stop called
sending close signal inbound=0
chain engine stopped
terminating listen laddr="0.0.0.0:10800"
Engine reset called
Engine reset successful
chain engine shutted down gracefully
这说明一切正常
这就是了解 ruci 的第一步了。
分三步,ruci,rucimp, ruci-cmd
先读 net模块,再读 map 模块,然后读 relay 模块
读的时候,先读文件顶部的文档
也可以 用 cargo doc --no-deps --open
生成html 文档 后阅读
读完文档后,利用您的代码编辑器纵览文档中指出的关键部分.
rucimp 的核心部分是 modes 模块. 读完 modes 内容后,其它代码都是可选阅读的,如 quic, ws, tproxy 等代码
rucimp 有很多可选feature, 生成文档时要注意, 如
cargo doc --no-deps --open --features "rustls21 quinn tun trace lua use-native-tls"
ruci-cmd 是一套长且乏味的应用程序代码,如果仅需了解基本运行原理,读 rucimp/examples 中的代码就够了
它主要是通过 clap 包 读取命令行命令,然后按需运行相应功能.
功能主要有 start_engine, api_client, api_server, utils 这几个部分.