|
@ -52,7 +52,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, pc *net.UDPConn) { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error { |
|
|
func (h *udpHandler) Connect(localConn core.UDPConn, target *net.UDPAddr) error { |
|
|
bindAddr := &net.UDPAddr{IP: nil, Port: 0} |
|
|
bindAddr := &net.UDPAddr{IP: nil, Port: 0} |
|
|
pc, err := net.ListenUDP("udp", bindAddr) |
|
|
pc, err := net.ListenUDP("udp", bindAddr) |
|
|
if err != nil { |
|
|
if err != nil { |
|
@ -61,24 +61,24 @@ func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error { |
|
|
} |
|
|
} |
|
|
targetAddr, _ := net.ResolveUDPAddr("udp", h.target) |
|
|
targetAddr, _ := net.ResolveUDPAddr("udp", h.target) |
|
|
|
|
|
|
|
|
h.remoteAddrMap.Store(conn, targetAddr) |
|
|
h.remoteAddrMap.Store(localConn, targetAddr) |
|
|
h.remoteUDPConnMap.Store(conn, pc) |
|
|
h.remoteUDPConnMap.Store(localConn, pc) |
|
|
|
|
|
|
|
|
go h.fetchUDPInput(conn, pc) |
|
|
go h.fetchUDPInput(localConn, pc) |
|
|
|
|
|
|
|
|
log.Infof("new proxy connection for target: %s:%s", target.Network(), target.String()) |
|
|
log.Infof("new proxy connection for target: %s:%s", target.Network(), target.String()) |
|
|
return nil |
|
|
return nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (h *udpHandler) ReceiveTo(conn core.UDPConn, data []byte, addr *net.UDPAddr) error { |
|
|
func (h *udpHandler) ReceiveTo(localConn core.UDPConn, data []byte, addr *net.UDPAddr) error { |
|
|
var pc *net.UDPConn |
|
|
var pc *net.UDPConn |
|
|
var targetAddr *net.UDPAddr |
|
|
var targetAddr *net.UDPAddr |
|
|
|
|
|
|
|
|
if value, ok := h.remoteAddrMap.Load(conn); ok { |
|
|
if value, ok := h.remoteAddrMap.Load(localConn); ok { |
|
|
targetAddr = value.(*net.UDPAddr) |
|
|
targetAddr = value.(*net.UDPAddr) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if value, ok := h.remoteUDPConnMap.Load(conn); ok { |
|
|
if value, ok := h.remoteUDPConnMap.Load(localConn); ok { |
|
|
pc = value.(*net.UDPConn) |
|
|
pc = value.(*net.UDPConn) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -90,7 +90,7 @@ func (h *udpHandler) ReceiveTo(conn core.UDPConn, data []byte, addr *net.UDPAddr |
|
|
} |
|
|
} |
|
|
return nil |
|
|
return nil |
|
|
} else { |
|
|
} else { |
|
|
return errors.New(fmt.Sprintf("proxy connection %v->%v does not exists", conn.LocalAddr(), addr)) |
|
|
return errors.New(fmt.Sprintf("proxy connection %v->%v does not exists", localConn.LocalAddr(), addr)) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|