mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-06 17:26:58 +08:00
32 lines
724 B
Go
32 lines
724 B
Go
package echo
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/xjasonlyu/tun2socks/common/log"
|
|
"github.com/xjasonlyu/tun2socks/core"
|
|
)
|
|
|
|
// An echo server, do nothing but echo back data to the sender.
|
|
type udpHandler struct{}
|
|
|
|
func NewUDPHandler() core.UDPConnHandler {
|
|
return &udpHandler{}
|
|
}
|
|
|
|
func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error {
|
|
return nil
|
|
}
|
|
|
|
func (h *udpHandler) ReceiveTo(conn core.UDPConn, data []byte, addr *net.UDPAddr) error {
|
|
// Dispatch to another goroutine, otherwise will result in deadlock.
|
|
payload := append([]byte(nil), data...)
|
|
go func(b []byte) {
|
|
_, err := conn.WriteFrom(b, addr)
|
|
if err != nil {
|
|
log.Warnf("failed to echo back data: %v", err)
|
|
}
|
|
}(payload)
|
|
return nil
|
|
}
|