v2rayN-HY2 能正常使用

总功能列表在这篇分析里.

我们现在实现第 7 项 能正常使用

首先要在 v2rayN.exe 同目录下放一个支持 hy2 的 v2ray 内核. 写本文时, 最新版本 v5.21.0 

下面, 开始处理代码.
打开主窗口 .cs 文件的设计器

找到菜单项, 双击, 
打开菜单项 "设定为活动服务器" 的响应函数

一路走读代码, 遇到函数就 F12 跳进去. 
最终看到 V2rayConfigHandler 模块的 GenerateClientConfig 函数.
然后我们需要在 outbound 函数里面 添加 生成 hy2 内容的逻辑.

抄一下原来的 Trojan 的流程框架, 把 hy2 相关的数据处理一下.

从配置文件上看, hy2 的参数, 要写在 streamSettings 里面. 所以我们还要继续修改 boundStreamSettings 函数.
跳进去一看, 对不同的 network, 相应地生成不同的 streamSettings.
也是照着其它的逻辑框架, 实现 hy2 的处理.

为了照样子抄呢, 还要新增一个结构 Hy2Settings
看一下其它的 Settings 定义在哪里, 鼠标点在 QuicSettings 上, F12 跳转到定义.
原来在 V2rayClientConfig 模块里.

我们也照样子抄一个结构.

这个结构是和配置文件的json结构相对应的. 对比观察一下.

进一步的, 在配置文件的json结构中, hy2Settings 是 streamSettings 的子元素.
那么在 C# 的数据结构定义中, 也要给 StreamSettings 类(结构) 添加一个 Hy2Settings 数据成员(子元素).

进一步的, 请你注意到, C# 中数据成员的命名, 要和 json 结构中的 key 名称完全一致.
这是和 C# 中将 数据结构 序列化为 Json 结构的规则有关.

跑起来看看.
报了一堆错.

似乎是启动命令有问题.

继续走读代码, 找到了 V2rayHandler 模块的 V2rayStart 函数.
可以看到 p.Start(); 就是启动 v2ray.exe 程序的地方. 我们在这里打个断点. 快捷键 F9

程序跑起来, 会暂停在断点这里, 并且不会执行断点这一句.
我们查看一下内存, 即将执行的命令到底是什么.
鼠标点在 p 变量上, Shift + F9 查看内存.

从代码上看, 前面一段, 对 StartInfo 结构的填充, 就是在设置运行的参数. 
对应着内存数据一起分析, 
结果就是, 相当于在命令行执行
D:\_work\v2rayN-3.29-VLESS\v2rayN\bin\Debug\v2ray.exe
按 v2ray v5.21.0 的启动语法来说, 这是有问题的. 

我们去命令行实际操作一下就知道了.
在命令行中, 应该使用 
v2ray.exe run -c config.json
的形式.

落实在代码上, 把参数设置进去.

再跑起来. 测试一下. 能用了.

========
开了一个分支, 本文的修改内容已提交.
如果你有兴趣, 可以看到整个的开发过程.

本次修改记录

评论

The Hot3 in Last 30 Days