mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-08 10:10:27 +08:00
修订udp代码; dial配置 添加 fullcone 选项;默认为非fullcone
现在整个程序均通过了go test, main 也可以正常运行了。 Relay_UDP 函数添加流量计数; 发现之前 Relay函数的流量计数 在main.go里参数传反了,导致实际上计数的是上传而不是下载,已修复 对fullcone的情况做了特别考量。MsgConn的 Close函数在fullcone时不能随便被调用。 因此我添加了一个 CloseConnWithRaddr(raddr Addr) error 方法,以及 Fullcone() bool 方法 在utils包的init部分使用 rand 随机种子
This commit is contained in:
@@ -19,21 +19,20 @@ func init() {
|
||||
//实现了 proxy.Client, netLayer.UDP_Putter_Generator
|
||||
type Client struct {
|
||||
proxy.ProxyCommonStruct
|
||||
isfullcone bool
|
||||
}
|
||||
|
||||
type ClientCreator struct{}
|
||||
|
||||
func NewClient() (proxy.Client, error) {
|
||||
func (_ ClientCreator) NewClientFromURL(*url.URL) (proxy.Client, error) {
|
||||
d := &Client{}
|
||||
return d, nil
|
||||
}
|
||||
|
||||
func (_ ClientCreator) NewClientFromURL(*url.URL) (proxy.Client, error) {
|
||||
return NewClient()
|
||||
}
|
||||
|
||||
func (_ ClientCreator) NewClient(*proxy.DialConf) (proxy.Client, error) {
|
||||
return NewClient()
|
||||
func (_ ClientCreator) NewClient(dc *proxy.DialConf) (proxy.Client, error) {
|
||||
d := &Client{}
|
||||
d.isfullcone = dc.Fullcone
|
||||
return d, nil
|
||||
}
|
||||
|
||||
func (d *Client) Name() string { return name }
|
||||
@@ -49,8 +48,8 @@ func (d *Client) Handshake(underlay net.Conn, target netLayer.Addr) (io.ReadWrit
|
||||
|
||||
}
|
||||
|
||||
//direct的Client的 EstablishUDPChannel 实际上就是直接拨号udp
|
||||
//direct的Client的 EstablishUDPChannel 实际上就是直接 监听一个udp端口。
|
||||
func (d *Client) EstablishUDPChannel(_ net.Conn, target netLayer.Addr) (netLayer.MsgConn, error) {
|
||||
conn, err := net.DialUDP("udp", nil, target.ToUDPAddr())
|
||||
return &netLayer.UDPMsgConnWrapper{UDPConn: conn, IsClient: true, FirstAddr: target}, err
|
||||
|
||||
return netLayer.NewUDPMsgConnClientWrapper(nil, d.isfullcone, false), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user