From 12fad0d74c3961fb7081e788ad78adbe25027ffa Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Fri, 21 Apr 2023 13:16:16 -0400 Subject: [PATCH] starting on udpTunnel (#306) --- endpoints/udpTunnel/backend.go | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 endpoints/udpTunnel/backend.go diff --git a/endpoints/udpTunnel/backend.go b/endpoints/udpTunnel/backend.go new file mode 100644 index 00000000..55cd40a4 --- /dev/null +++ b/endpoints/udpTunnel/backend.go @@ -0,0 +1,60 @@ +package udpTunnel + +import ( + "github.com/openziti/sdk-golang/ziti" + "github.com/openziti/sdk-golang/ziti/config" + "github.com/openziti/sdk-golang/ziti/edge" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "net" + "time" +) + +type BackendConfig struct { + IdentityPath string + EndpointAddress string + ShrToken string +} + +type Backend struct { + cfg *BackendConfig + listener edge.Listener +} + +func NewBackend(cfg *BackendConfig) (*Backend, error) { + options := ziti.ListenOptions{ + ConnectTimeout: 5 * time.Minute, + MaxConnections: 64, + } + zcfg, err := config.NewFromFile(cfg.IdentityPath) + if err != nil { + return nil, errors.Wrap(err, "error loading config") + } + listener, err := ziti.NewContextWithConfig(zcfg).ListenWithOptions(cfg.ShrToken, &options) + if err != nil { + return nil, errors.Wrap(err, "error listening") + } + b := &Backend{ + cfg: cfg, + listener: listener, + } + return b, nil +} + +func (b *Backend) Run() error { + logrus.Info("started") + defer logrus.Info("exited") + + for { + if conn, err := b.listener.Accept(); err == nil { + go b.handle(conn) + } else { + return errors.Wrap(err, "error accepting") + } + } +} + +func (b *Backend) handle(conn net.Conn) { + logrus.Infof("handling '%v'", conn.RemoteAddr()) + _ = conn.Close() +}