From 05622d1b6811c07711677fb9308706baa797e2d8 Mon Sep 17 00:00:00 2001 From: a <a@tuxpa.in> Date: Mon, 17 Jun 2024 00:14:27 -0500 Subject: [PATCH] noot --- lib/fed/conn.go | 2 +- lib/fed/listeners/netconnlistener/listener.go | 26 ---------- lib/gat/listen.go | 48 ++++++------------- 3 files changed, 15 insertions(+), 61 deletions(-) diff --git a/lib/fed/conn.go b/lib/fed/conn.go index 0acb2710..a32336e7 100644 --- a/lib/fed/conn.go +++ b/lib/fed/conn.go @@ -10,7 +10,7 @@ import ( ) type Listener interface { - Accept(func(*Conn)) error + Accept(fn func(*Conn)) error io.Closer } diff --git a/lib/fed/listeners/netconnlistener/listener.go b/lib/fed/listeners/netconnlistener/listener.go index 00a74e5f..0d6c0c55 100644 --- a/lib/fed/listeners/netconnlistener/listener.go +++ b/lib/fed/listeners/netconnlistener/listener.go @@ -1,42 +1,16 @@ package netconnlistener import ( - "context" - "crypto/tls" - "log" "net" - "os" - "path/filepath" "gfx.cafe/gfx/pggat/lib/fed" "gfx.cafe/gfx/pggat/lib/fed/codecs/netconncodec" - "gfx.cafe/gfx/pggat/lib/gat" - "github.com/caddyserver/caddy/v2" ) type Listener struct { Listener net.Listener } -func init() { - gat.RegisterNetwork("default", ListenerFunc) -} - -func ListenerFunc(ctx context.Context, addr caddy.NetworkAddress, config *tls.Config) (fed.Listener, error) { - if addr.Network == "unix" { - if err := os.MkdirAll(filepath.Dir(addr.Host), 0o660); err != nil { - return nil, err - } - } - listener, err := addr.Listen(context.Background(), 0, net.ListenConfig{}) - if err != nil { - return nil, err - } - log.Println("got fed conn") - ncn := &Listener{Listener: listener.(net.Listener)} - return ncn, nil -} - func (listener *Listener) Accept(fn func(*fed.Conn)) error { raw, err := listener.Listener.Accept() if err != nil { diff --git a/lib/gat/listen.go b/lib/gat/listen.go index 134f0617..ad806bf3 100644 --- a/lib/gat/listen.go +++ b/lib/gat/listen.go @@ -2,9 +2,11 @@ package gat import ( "context" - "crypto/tls" "encoding/json" "fmt" + "net" + "os" + "path/filepath" "strconv" "strings" "sync/atomic" @@ -13,28 +15,9 @@ import ( "go.uber.org/zap" "gfx.cafe/gfx/pggat/lib/fed" + "gfx.cafe/gfx/pggat/lib/fed/listeners/netconnlistener" ) -var networkTypes = map[string]ListenerFunc{} - -type ListenerFunc func(ctx context.Context, addr caddy.NetworkAddress, config *tls.Config) (fed.Listener, error) - -func RegisterNetwork(network string, getListener ListenerFunc) { - network = strings.TrimSpace(strings.ToLower(network)) - - if network == "tcp" || network == "tcp4" || network == "tcp6" || - network == "udp" || network == "udp4" || network == "udp6" || - network == "unix" || network == "unixpacket" || network == "unixgram" || - strings.HasPrefix("ip:", network) || strings.HasPrefix("ip4:", network) || strings.HasPrefix("ip6:", network) { - panic("network type " + network + " is reserved") - } - - if _, ok := networkTypes[strings.ToLower(network)]; ok { - panic("network type " + network + " is already registered") - } - networkTypes[network] = getListener -} - type ListenerConfig struct { Address string `json:"address"` SSL json.RawMessage `json:"ssl,omitempty" caddy:"namespace=pggat.ssl.servers inline_key=provider"` @@ -95,25 +78,22 @@ func (T *Listener) Provision(ctx caddy.Context) error { } func (T *Listener) Start() error { - listenerFunc, ok := networkTypes[T.networkAddress.Network] - if !ok { - listenerFunc, ok = networkTypes["default"] - if !ok { - return fmt.Errorf("no default listenerFunc registered. forgot to import gfx.cafe/gfx/pggat/lib/fed/listeners/netconnlistener ?") + addr := T.networkAddress + if addr.Network == "unix" { + if err := os.MkdirAll(filepath.Dir(addr.Host), 0o660); err != nil { + return err } } - var tlsConfig *tls.Config - if T.ssl != nil { - tlsConfig = T.ssl.ServerTLSConfig() - } - listener, err := listenerFunc(context.Background(), T.networkAddress, tlsConfig) + listener, err := addr.Listen(context.Background(), 0, net.ListenConfig{}) if err != nil { return err } - T.listener = listener - + if netListener, ok := listener.(net.Listener); ok { + T.listener = &netconnlistener.Listener{Listener: netListener} + } else if fedListener, ok := listener.(fed.Listener); ok { + T.listener = fedListener + } T.log.Info("listening", zap.String("address", T.networkAddress.String())) - return nil } -- GitLab