mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-07 17:51:14 +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:
@@ -97,41 +97,7 @@ func IsStrUDP_network(s string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
//使用Addr,是因为有可能申请的是域名,而不是ip
|
||||
type MsgConn interface {
|
||||
ReadFrom() ([]byte, Addr, error)
|
||||
WriteTo([]byte, Addr) error
|
||||
}
|
||||
|
||||
type UDPMsgConnWrapper struct {
|
||||
*net.UDPConn
|
||||
IsClient bool
|
||||
FirstAddr Addr
|
||||
}
|
||||
|
||||
func (u *UDPMsgConnWrapper) ReadFrom() ([]byte, Addr, error) {
|
||||
bs := utils.GetPacket()
|
||||
n, ad, err := u.UDPConn.ReadFromUDP(bs)
|
||||
if err != nil {
|
||||
return nil, Addr{}, err
|
||||
}
|
||||
return bs[:n], NewAddrFromUDPAddr(ad), err
|
||||
}
|
||||
|
||||
func (u *UDPMsgConnWrapper) WriteTo(bs []byte, ad Addr) error {
|
||||
|
||||
if u.IsClient {
|
||||
if ad.GetHashable() == u.FirstAddr.GetHashable() {
|
||||
_, err := u.UDPConn.Write(bs)
|
||||
return err
|
||||
} else {
|
||||
|
||||
return utils.ErrNotImplemented
|
||||
}
|
||||
} else {
|
||||
_, err := u.UDPConn.WriteTo(bs, ad.ToUDPAddr())
|
||||
return err
|
||||
|
||||
}
|
||||
|
||||
type UDPAddrData struct {
|
||||
Addr net.UDPAddr
|
||||
Data []byte
|
||||
}
|
||||
|
Reference in New Issue
Block a user