diff --git a/README.md b/README.md index 21e825d..4b46328 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,4 @@ MIT [tlstunnel]: https://sr.ht/~emersion/tlstunnel/ [PROXY protocol]: https://www.haproxy.org/download/2.3/doc/proxy-protocol.txt [mailing list]: https://lists.sr.ht/~emersion/public-inbox -[issue tracker]: https://git.sr.ht/~emersion/tlstunnel +[issue tracker]: https://todo.sr.ht/~emersion/tlstunnel diff --git a/server.go b/server.go index fd2d7c8..e910889 100644 --- a/server.go +++ b/server.go @@ -15,6 +15,10 @@ import ( "github.com/pires/go-proxyproto/tlvparse" ) +type conn struct { + downstream, upstream net.Conn +} + type Server struct { Listeners map[string]*Listener // indexed by listening address Frontends []*Frontend @@ -24,6 +28,8 @@ type Server struct { ACMEManager *certmagic.ACMEManager ACMEConfig *certmagic.Config + + conns map[*conn]struct{} } func NewServer() *Server { @@ -76,10 +82,16 @@ func (srv *Server) Start() error { return nil } +func (srv *Server) Close() error { + +} + type Listener struct { Address string Server *Server Frontends map[string]*Frontend // indexed by server name + + ln net.Listener } func newListener(srv *Server, addr string) *Listener { @@ -105,6 +117,8 @@ func (ln *Listener) Start() error { } log.Printf("listening on %q", ln.Address) + ln.ln = netLn + go func() { if err := ln.serve(netLn); err != nil { log.Fatalf("listener %q: %v", ln.Address, err) @@ -114,6 +128,10 @@ func (ln *Listener) Start() error { return nil } +func (ln *Listener) Close() error { + return ln.ln.Close() +} + func (ln *Listener) serve(netLn net.Listener) error { for { conn, err := netLn.Accept()