mirror of
https://github.com/yggdrasil-network/yggstack.git
synced 2025-04-28 22:25:08 +03:00
Refactor UDP port forwarding and document usage
This commit is contained in:
parent
0783b429fd
commit
f529064aa0
4 changed files with 52 additions and 43 deletions
|
@ -86,12 +86,12 @@ func (s *YggdrasilNetstack) DialContext(ctx context.Context, network, address st
|
|||
}
|
||||
}
|
||||
|
||||
func (s *YggdrasilNetstack) DialTCP(addr *net.TCPAddr) (net.Conn, error) {
|
||||
func (s *YggdrasilNetstack) DialTCP(addr *net.TCPAddr) (*gonet.TCPConn, error) {
|
||||
fa, pn, _ := convertToFullAddr(addr.IP, addr.Port)
|
||||
return gonet.DialTCP(s.stack, fa, pn)
|
||||
}
|
||||
|
||||
func (s *YggdrasilNetstack) DialUDP(addr *net.UDPAddr) (net.PacketConn, error) {
|
||||
func (s *YggdrasilNetstack) DialUDP(addr *net.UDPAddr) (*gonet.UDPConn, error) {
|
||||
fa, pn, _ := convertToFullAddr(addr.IP, addr.Port)
|
||||
return gonet.DialUDP(s.stack, nil, &fa, pn)
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ func (s *YggdrasilNetstack) ListenTCP(addr *net.TCPAddr) (net.Listener, error) {
|
|||
return gonet.ListenTCP(s.stack, fa, pn)
|
||||
}
|
||||
|
||||
func (s *YggdrasilNetstack) ListenUDP(addr *net.UDPAddr) (net.PacketConn, error) {
|
||||
func (s *YggdrasilNetstack) ListenUDP(addr *net.UDPAddr) (*gonet.UDPConn, error) {
|
||||
fa, pn, _ := convertToFullAddr(addr.IP, addr.Port)
|
||||
return gonet.DialUDP(s.stack, &fa, nil, pn)
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"net"
|
||||
)
|
||||
|
||||
func ReverseProxyUDPConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.UDPConn) error {
|
||||
func ReverseProxyUDP(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.Conn) error {
|
||||
buf := make([]byte, mtu)
|
||||
for {
|
||||
n, err := src.Read(buf[:])
|
||||
|
@ -20,20 +20,3 @@ func ReverseProxyUDPConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src n
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReverseProxyUDPPacketConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.PacketConn) error {
|
||||
buf := make([]byte, mtu)
|
||||
for {
|
||||
n, _, err := src.ReadFrom(buf[:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if n > 0 {
|
||||
n, err = dst.WriteTo(buf[:n], dstAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue