diff options
Diffstat (limited to 'listener.go')
-rw-r--r-- | listener.go | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/listener.go b/listener.go index 52c08fd..e99fb61 100644 --- a/listener.go +++ b/listener.go @@ -10,14 +10,18 @@ import ( "net" pt "git.torproject.org/pluggable-transports/goptlib.git" - "github.com/xtaci/kcp-go" "gitlab.com/yawning/obfs4.git/common/ntor" "gitlab.com/yawning/obfs4.git/transports/base" "gitlab.com/yawning/obfs4.git/transports/obfs4" + + "0xacab.org/leap/obfsvpn/quicwrapper" + "github.com/lucas-clemente/quic-go" + "github.com/xtaci/kcp-go" ) const ( - netKCP = "kcp" + netKCP = "kcp" + netQUIC = "quic" ) // ListenConfig contains options for listening to an address. @@ -113,22 +117,29 @@ func (lc *ListenConfig) Wrap(ctx context.Context, ln net.Listener) (*Listener, e // Listen listens on the local network address. // See func net.Dial for a description of the network and address parameters. func (lc *ListenConfig) Listen(ctx context.Context, network, address string) (*Listener, error) { - var ln net.Listener + var listener net.Listener var err error switch network { case netKCP: log.Println("kcp listen on", address) - ln, err = kcp.Listen(address) + listener, err = kcp.Listen(address) + if err != nil { + return nil, err + } + case netQUIC: + log.Println("quic listen on", address) + tlsConfig := generateTLSConfig() + listener, err = quicwrapper.ListenAddr(address, tlsConfig, &quic.Config{}) if err != nil { return nil, err } default: - ln, err = lc.ListenConfig.Listen(ctx, network, address) + listener, err = lc.ListenConfig.Listen(ctx, network, address) if err != nil { return nil, err } } - return lc.Wrap(ctx, ln) + return lc.Wrap(ctx, listener) } // Listener is a network listener that accepts obfuscated connections and |