基于TunnelKit源码
-
修改在手机设置里能看到服务器名为IP地址与端口的问题
在OpenVN.ProviderConfiguration
文件中修改asTunnelProtocol
方法
原代码为protocolConfiguration.serverAddress ="\(firstRemote.address):\(firstRemote.proto.port)"
修改成与原样式显示一致,将原数字进行异或变更
let array = firstRemote.address.split(separator: ".")
var newAddress = ""
//改变vn设置页显示的设备信息
for (idx,obj) in array.enumerated(){
if let num = Int(obj) {
newAddress += String(num ^ 0x5f)
if idx < array.count-1{
newAddress += "."
}
}
}
protocolConfiguration.serverAddress = "\(newAddress):\(firstRemote.proto.port^0x5f5f)"
-
监听VN状态
状态共包括:连接中、已连接、断开中、已断开
- 刚进入App会收到当前VN状态
如App显示当前vpn已连接,去手机设置中关闭VN。回调App通过此通知得到的新状态处理相关逻辑 - 每次发起连接前,会先获取到当前连接状态
基于此机制,处理状态变化逻辑时,需要特别考虑。
比如:
当前节点已连接,需要切换到其他节点。此时收到VN通知如下:已连接-断开中-已断开-连接中-连接结果
当前节点未连接,需要切换到其他节点。此时收到VN通知如下:未连接-连接中-连接结果
处理时,需要考虑过滤掉第一个状态,避免干扰 - 首次连接设置的超时时长未生效
由于首次连接需要经历开启VN权限这步,配置化未完毕,造成设置的negotiationTimeout
未生效。相关的重试机制、自动切换机制都未正常执行 - 如设置了总连接超时时长,需考虑新App第一次连接场景
首连受开启权限影响,会消耗一定的时间用于处理。如总超时从用户点下连接这刻算起,真正连接时间将变少
网友评论