|
|
package integration_tests |
|
|
|
|
|
import ( |
|
|
"crypto/tls" |
|
|
"io" |
|
|
"net" |
|
|
|
|
|
"github.com/apernet/hysteria/core/v2/server" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
const ( |
|
|
testCertFile = "test.crt" |
|
|
testKeyFile = "test.key" |
|
|
) |
|
|
|
|
|
func serverTLSConfig() server.TLSConfig { |
|
|
cert, err := tls.LoadX509KeyPair(testCertFile, testKeyFile) |
|
|
if err != nil { |
|
|
panic(err) |
|
|
} |
|
|
return server.TLSConfig{ |
|
|
Certificates: []tls.Certificate{cert}, |
|
|
} |
|
|
} |
|
|
|
|
|
func serverConn() (net.PacketConn, net.Addr, error) { |
|
|
udpAddr := &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 14514} |
|
|
udpConn, err := net.ListenUDP("udp", udpAddr) |
|
|
if err != nil { |
|
|
return nil, nil, err |
|
|
} |
|
|
return udpConn, udpAddr, nil |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type tcpEchoServer struct { |
|
|
Listener net.Listener |
|
|
} |
|
|
|
|
|
func (s *tcpEchoServer) Serve() error { |
|
|
for { |
|
|
conn, err := s.Listener.Accept() |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
go func() { |
|
|
_, _ = io.Copy(conn, conn) |
|
|
_ = conn.Close() |
|
|
}() |
|
|
} |
|
|
} |
|
|
|
|
|
func (s *tcpEchoServer) Close() error { |
|
|
return s.Listener.Close() |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type udpEchoServer struct { |
|
|
Conn net.PacketConn |
|
|
} |
|
|
|
|
|
func (s *udpEchoServer) Serve() error { |
|
|
buf := make([]byte, 65536) |
|
|
for { |
|
|
n, addr, err := s.Conn.ReadFrom(buf) |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
_, err = s.Conn.WriteTo(buf[:n], addr) |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
func (s *udpEchoServer) Close() error { |
|
|
return s.Conn.Close() |
|
|
} |
|
|
|