summaryrefslogtreecommitdiff
path: root/listener.go
diff options
context:
space:
mode:
Diffstat (limited to 'listener.go')
-rw-r--r--listener.go23
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