diff --git a/cmd/pineconesim/main.go b/cmd/pineconesim/main.go index 9d81de2..37e4218 100644 --- a/cmd/pineconesim/main.go +++ b/cmd/pineconesim/main.go @@ -255,6 +255,16 @@ func configureHTTPRouting(log *log.Logger, sim *simulator.Simulator) { log.Printf("WebSocket peer %q connected to sim node %q\n", c.RemoteAddr(), nodeID) }) + http.DefaultServeMux.HandleFunc("/manhole", func(w http.ResponseWriter, r *http.Request) { + nodeID := r.URL.Query().Get("node") + node := sim.Node(nodeID) + if node == nil { + w.WriteHeader(404) + return + } + node.SimRouter.ManholeHandler(w, r) + }) + http.DefaultServeMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { _ = template.Must(template.ParseFiles("./cmd/pineconesim/page.html")).Execute(w, "") }) diff --git a/cmd/pineconesim/simulator/adversary/drop_packets.go b/cmd/pineconesim/simulator/adversary/drop_packets.go index a6f44ab..e8a0772 100644 --- a/cmd/pineconesim/simulator/adversary/drop_packets.go +++ b/cmd/pineconesim/simulator/adversary/drop_packets.go @@ -19,6 +19,7 @@ import ( "crypto/ed25519" "log" "net" + "net/http" "time" "github.com/matrix-org/pinecone/router" @@ -150,6 +151,10 @@ func (a *AdversaryRouter) ConfigureFilterPeer(peer types.PublicKey, rates DropRa a.dropSettings.peers[peer] = rates } +func (a *AdversaryRouter) ManholeHandler(w http.ResponseWriter, req *http.Request) { + a.rtr.ManholeHandler(w, req) +} + func (a *AdversaryRouter) updatePacketCounts(from types.PublicKey, frameType types.FrameType) { a.packetsRx.overall.Inc() a.packetsRx.peers[from].overall.Inc() diff --git a/cmd/pineconesim/simulator/router.go b/cmd/pineconesim/simulator/router.go index c3fb2fd..10a0791 100644 --- a/cmd/pineconesim/simulator/router.go +++ b/cmd/pineconesim/simulator/router.go @@ -17,6 +17,7 @@ package simulator import ( "context" "net" + "net/http" "time" "github.com/matrix-org/pinecone/cmd/pineconesim/simulator/adversary" @@ -33,6 +34,7 @@ type SimRouter interface { Coords() types.Coordinates ConfigureFilterDefaults(rates adversary.DropRates) ConfigureFilterPeer(peer types.PublicKey, rates adversary.DropRates) + ManholeHandler(w http.ResponseWriter, req *http.Request) } type DefaultRouter struct { @@ -62,3 +64,7 @@ func (r *DefaultRouter) Coords() types.Coordinates { func (r *DefaultRouter) ConfigureFilterDefaults(rates adversary.DropRates) {} func (r *DefaultRouter) ConfigureFilterPeer(peer types.PublicKey, rates adversary.DropRates) {} + +func (r *DefaultRouter) ManholeHandler(w http.ResponseWriter, req *http.Request) { + r.rtr.ManholeHandler(w, req) +}