From 8d195e12bef21f51fccd82e6857ce54ce3511041 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Fri, 19 Feb 2021 17:19:45 +0000 Subject: [PATCH] Configurability updates --- build/gobind-pinecone/monolith.go | 40 +++++++++++++---------- cmd/dendrite-demo-pinecone/conn/client.go | 2 +- cmd/dendrite-demo-pinecone/main.go | 8 +++-- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/build/gobind-pinecone/monolith.go b/build/gobind-pinecone/monolith.go index 11900cc5d..b20002ba4 100644 --- a/build/gobind-pinecone/monolith.go +++ b/build/gobind-pinecone/monolith.go @@ -46,6 +46,12 @@ import ( yggdrasilConfig "github.com/yggdrasil-network/yggdrasil-go/src/config" ) +const ( + PeerTypeRemote = pineconeRouter.PeerTypeRemote + PeerTypeMulticast = pineconeRouter.PeerTypeMulticast + PeerTypeBluetooth = pineconeRouter.PeerTypeBluetooth +) + type DendriteMonolith struct { logger logrus.Logger config *yggdrasilConfig.NodeConfig @@ -72,25 +78,32 @@ func (m *DendriteMonolith) SessionCount() int { } func (m *DendriteMonolith) SetMulticastEnabled(enabled bool) { - // TODO + if enabled { + m.PineconeMulticast.Start() + } else { + m.PineconeMulticast.Stop() + m.DisconnectType(pineconeRouter.PeerTypeMulticast) + } } -func (m *DendriteMonolith) SetStaticPeer(uri string) error { - go conn.ConnectToPeer(m.PineconeRouter, uri) - return nil +func (m *DendriteMonolith) SetStaticPeer(uri string) { + m.DisconnectType(pineconeRouter.PeerTypeRemote) + if uri != "" { + go conn.ConnectToPeer(m.PineconeRouter, uri) + } } -func (m *DendriteMonolith) DisconnectNonMulticastPeers() { +func (m *DendriteMonolith) DisconnectType(peertype int) { for _, p := range m.PineconeRouter.Peers() { - if p.Zone == "static" { + if peertype == p.PeerType { _ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port)) } } } -func (m *DendriteMonolith) DisconnectMulticastPeers() { +func (m *DendriteMonolith) DisconnectZone(zone string) { for _, p := range m.PineconeRouter.Peers() { - if p.Zone != "static" { + if zone == p.Zone { _ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port)) } } @@ -100,7 +113,7 @@ func (m *DendriteMonolith) DisconnectPort(port int) error { return m.PineconeRouter.Disconnect(types.SwitchPortID(port)) } -func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) { +func (m *DendriteMonolith) Conduit(zone string, peertype int) (*Conduit, error) { l, r := net.Pipe() conduit := &Conduit{conn: r, port: 0} go func() { @@ -110,7 +123,7 @@ func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) { for i := 1; i <= 10; i++ { logrus.Errorf("Attempting authenticated connect (attempt %d)", i) var err error - conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone) + conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone, peertype) switch err { case io.ErrClosedPipe: logrus.Errorf("Authenticated connect failed due to closed pipe (attempt %d)", i) @@ -360,13 +373,6 @@ func (m *DendriteMonolith) Stop() { _ = m.PineconeRouter.Close() } -func (m *DendriteMonolith) Suspend() { - m.logger.Info("Suspending monolith") - if err := m.httpServer.Close(); err != nil { - m.logger.Warn("Error stopping HTTP server:", err) - } -} - type Conduit struct { conn net.Conn port types.SwitchPortID diff --git a/cmd/dendrite-demo-pinecone/conn/client.go b/cmd/dendrite-demo-pinecone/conn/client.go index 294a3fa9e..c883b97f5 100644 --- a/cmd/dendrite-demo-pinecone/conn/client.go +++ b/cmd/dendrite-demo-pinecone/conn/client.go @@ -35,7 +35,7 @@ func ConnectToPeer(pRouter *pineconeRouter.Router, peer string) { if parent == nil { return } - if _, err := pRouter.AuthenticatedConnect(parent, "static"); err != nil { + if _, err := pRouter.AuthenticatedConnect(parent, "static", pineconeRouter.PeerTypeRemote); err != nil { logrus.WithError(err).Errorf("Failed to connect Pinecone static peer to switch") } } diff --git a/cmd/dendrite-demo-pinecone/main.go b/cmd/dendrite-demo-pinecone/main.go index 71d1d6a8b..c0813c388 100644 --- a/cmd/dendrite-demo-pinecone/main.go +++ b/cmd/dendrite-demo-pinecone/main.go @@ -48,6 +48,7 @@ import ( "github.com/matrix-org/dendrite/userapi" "github.com/matrix-org/gomatrixserverlib" + pineconeMulticast "github.com/matrix-org/pinecone/multicast" pineconeRouter "github.com/matrix-org/pinecone/router" pineconeSessions "github.com/matrix-org/pinecone/sessions" @@ -109,7 +110,7 @@ func main() { continue } - port, err := pRouter.AuthenticatedConnect(conn, "") + port, err := pRouter.AuthenticatedConnect(conn, "", pineconeRouter.PeerTypeRemote) if err != nil { logrus.WithError(err).Error("pSwitch.AuthenticatedConnect failed") continue @@ -120,7 +121,8 @@ func main() { }() pQUIC := pineconeSessions.NewQUIC(logger, pRouter) - //_ = pineconeMulticast.NewMulticast(logger, pRouter) + pMulticast := pineconeMulticast.NewMulticast(logger, pRouter) + pMulticast.Start() cfg := &config.Dendrite{} cfg.Defaults() @@ -206,7 +208,7 @@ func main() { return } conn := conn.WrapWebSocketConn(c) - if _, err = pRouter.AuthenticatedConnect(conn, "websocket"); err != nil { + if _, err = pRouter.AuthenticatedConnect(conn, "websocket", pineconeRouter.PeerTypeRemote); err != nil { logrus.WithError(err).Error("Failed to connect WebSocket peer to Pinecone switch") } })