From c95a8c543450ac7e08ff891d63aef2a9ef1286d2 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Wed, 4 Oct 2017 00:00:16 -0700 Subject: [PATCH] adjust for tun2 api changes --- cmd/route-httpagent/main.go | 2 +- internal/server/server.go | 71 +++++++++++++++++++++++++++++++++---- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/cmd/route-httpagent/main.go b/cmd/route-httpagent/main.go index 12feafa..f6acac3 100644 --- a/cmd/route-httpagent/main.go +++ b/cmd/route-httpagent/main.go @@ -35,7 +35,7 @@ func main() { client, _ := tun2.NewClient(cfg) for { - err := client.Connect() + err := client.Connect(context.Background()) if err != nil { ln.Error(context.Background(), err, ln.Action("client connection failed")) } diff --git a/internal/server/server.go b/internal/server/server.go index 6cbfbd4..bec338c 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -11,8 +11,11 @@ import ( "git.xeserv.us/xena/route/internal/database" "git.xeserv.us/xena/route/internal/tun2" proto "git.xeserv.us/xena/route/proto" + "github.com/Xe/ln" "github.com/mtneug/pkg/ulid" + kcp "github.com/xtaci/kcp-go" "golang.org/x/crypto/acme/autocert" + "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) @@ -46,6 +49,59 @@ type Config struct { CertKey *[32]byte } +func (s *Server) listenTCP(ctx context.Context, addr string, tcfg *tls.Config) { + l, err := tls.Listen("tcp", addr, tcfg) + if err != nil { + panic(err) + } + + ln.Log(ctx, ln.Action("tcp+tls listening"), ln.F{"addr": l.Addr()}) + + for { + conn, err := l.Accept() + if err != nil { + ln.Error(ctx, err, ln.Action("accept backend client socket")) + } + + ln.Log(ctx, ln.F{ + "action": "new backend client", + "addr": conn.RemoteAddr(), + "network": conn.RemoteAddr().Network(), + }) + + go s.ts.HandleConn(conn, false) + } +} + +func (s *Server) listenKCP(ctx context.Context, addr string, tcfg *tls.Config) { + l, err := kcp.Listen(addr) + if err != nil { + panic(err) + } + + ln.Log(ctx, ln.F{ + "action": "kcp+tls listening", + "addr": l.Addr(), + }) + + for { + conn, err := l.Accept() + if err != nil { + ln.Error(ctx, err, ln.F{"kind": "kcp", "addr": l.Addr().String()}) + } + + ln.Log(ctx, ln.F{ + "action": "new_client", + "network": conn.RemoteAddr().Network(), + "addr": conn.RemoteAddr(), + }) + + tc := tls.Server(conn, tcfg) + + go s.ts.HandleConn(tc, true) + } +} + // New creates a new Server func New(cfg Config) (*Server, error) { if cfg.CertKey == nil { @@ -65,11 +121,6 @@ func New(cfg Config) (*Server, error) { } tcfg := &tun2.ServerConfig{ - TCPAddr: cfg.BackendTCPAddr, - KCPAddr: cfg.BackendKCPAddr, - TLSConfig: &tls.Config{ - GetCertificate: m.GetCertificate, - }, Storage: &storageWrapper{ Storage: db, }, @@ -79,6 +130,7 @@ func New(cfg Config) (*Server, error) { if err != nil { return nil, err } + s := &Server{ cfg: &cfg, db: db, @@ -87,8 +139,13 @@ func New(cfg Config) (*Server, error) { Manager: m, } - s.ts = ts - go ts.ListenAndServe() + s.listenKCP(context.Background(), cfg.BackendKCPAddr, &tls.Config{ + GetCertificate: m.GetCertificate, + }) + + s.listenTCP(context.Background(), cfg.BackendTCPAddr, &tls.Config{ + GetCertificate: m.GetCertificate, + }) gs := grpc.NewServer(grpc.Creds(credentials.NewTLS(&tls.Config{ GetCertificate: m.GetCertificate,