Просмотр исходного кода

speedup keystore; add MTU option

Vladislav Yarmak 1 год назад
Родитель
Сommit
562a24ee47
7 измененных файлов с 21 добавлено и 3 удалено
  1. 4 1
      README.md
  2. 5 1
      client/client.go
  3. 1 0
      client/config.go
  4. 3 0
      cmd/dtlspipe/main.go
  5. 1 1
      keystore/static.go
  6. 1 0
      server/config.go
  7. 6 0
      server/server.go

+ 4 - 1
README.md

@@ -1,2 +1,5 @@
 # dtlspipe
-Generic DTLS wrapper for UDP sessions
+
+Generic DTLS wrapper for UDP sessions. Suitable for wrapping Wireguard or UDP OpenVPN or any other connection-oriented UDP sessions.
+
+

+ 5 - 1
client/client.go

@@ -15,6 +15,7 @@ import (
 
 const (
 	MaxPktBuf = 4096
+	Backlog   = 1024
 )
 
 type Client struct {
@@ -61,8 +62,11 @@ func New(cfg *Config) (*Client, error) {
 		ConnectContextMaker:  client.contextMaker,
 		PSK:                  client.psk,
 		PSKIdentityHint:      []byte(cfg.PSKIdentity),
+		MTU:                  cfg.MTU,
+	}
+	lc := udp.ListenConfig{
+		Backlog: Backlog,
 	}
-	lc := udp.ListenConfig{}
 	listener, err := lc.Listen("udp", net.UDPAddrFromAddrPort(lAddrPort))
 	if err != nil {
 		cancelCtx()

+ 1 - 0
client/config.go

@@ -13,6 +13,7 @@ type Config struct {
 	BaseContext   context.Context
 	PSKCallback   func([]byte) ([]byte, error)
 	PSKIdentity   string
+	MTU           int
 }
 
 func (cfg *Config) populateDefaults() *Config {

+ 3 - 0
cmd/dtlspipe/main.go

@@ -30,6 +30,7 @@ var (
 	pskHexOpt = flag.String("psk", "", "hex-encoded pre-shared key. Can be generated with genpsk subcommand")
 	keyLength = flag.Uint("key-length", 16, "generate key with specified length")
 	identity  = flag.String("identity", "", "client identity sent to server")
+	mtu       = flag.Int("mtu", 1400, "MTU used for DTLS fragments")
 )
 
 func usage() {
@@ -85,6 +86,7 @@ func cmdClient(bindAddress, remoteAddress string) int {
 		Timeout:       *timeout,
 		IdleTimeout:   *idleTime,
 		BaseContext:   appCtx,
+		MTU:           *mtu,
 	}
 
 	clt, err := client.New(&cfg)
@@ -117,6 +119,7 @@ func cmdServer(bindAddress, remoteAddress string) int {
 		Timeout:       *timeout,
 		IdleTimeout:   *idleTime,
 		BaseContext:   appCtx,
+		MTU:           *mtu,
 	}
 
 	srv, err := server.New(&cfg)

+ 1 - 1
keystore/static.go

@@ -13,5 +13,5 @@ func NewStaticKeystore(psk []byte) *StaticKeystore {
 }
 
 func (store *StaticKeystore) PSKCallback(hint []byte) ([]byte, error) {
-	return bytes.Clone(store.psk), nil
+	return store.psk, nil
 }

+ 1 - 0
server/config.go

@@ -12,6 +12,7 @@ type Config struct {
 	IdleTimeout   time.Duration
 	BaseContext   context.Context
 	PSKCallback   func([]byte) ([]byte, error)
+	MTU           int
 }
 
 func (cfg *Config) populateDefaults() *Config {

+ 6 - 0
server/server.go

@@ -15,6 +15,10 @@ import (
 	"github.com/pion/transport/v2/udp"
 )
 
+const (
+	Backlog = 1024
+)
+
 type Server struct {
 	listener    net.Listener
 	dtlsConfig  *dtls.Config
@@ -58,6 +62,7 @@ func New(cfg *Config) (*Server, error) {
 		ExtendedMasterSecret: dtls.RequireExtendedMasterSecret,
 		ConnectContextMaker:  srv.contextMaker,
 		PSK:                  srv.psk,
+		MTU:                  cfg.MTU,
 	}
 	lc := udp.ListenConfig{
 		AcceptFilter: func(packet []byte) bool {
@@ -71,6 +76,7 @@ func New(cfg *Config) (*Server, error) {
 			}
 			return h.ContentType == protocol.ContentTypeHandshake
 		},
+		Backlog: Backlog,
 	}
 	listener, err := lc.Listen("udp", net.UDPAddrFromAddrPort(lAddrPort))
 	if err != nil {