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