client-interface-cleanup (#6)
Refactoring and code cleanup. Improved client command interface.
This commit is contained in:
69
peer/statusserver.go
Normal file
69
peer/statusserver.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package peer
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
"os"
|
||||
)
|
||||
|
||||
type StatusReport struct {
|
||||
Network []byte
|
||||
RelayPeerIP byte
|
||||
Remotes []RemoteStatus
|
||||
}
|
||||
|
||||
type RemoteStatus struct {
|
||||
PeerIP byte
|
||||
Up bool
|
||||
Name string
|
||||
PublicIP []byte
|
||||
Port uint16
|
||||
Relay bool
|
||||
Server bool
|
||||
Direct bool
|
||||
DirectAddr netip.AddrPort
|
||||
}
|
||||
|
||||
func runStatusServer(g Globals, socketPath string) {
|
||||
_ = os.RemoveAll(socketPath)
|
||||
|
||||
handler := func(w http.ResponseWriter, r *http.Request) {
|
||||
report := StatusReport{
|
||||
Network: g.Network,
|
||||
Remotes: make([]RemoteStatus, 0, 255),
|
||||
}
|
||||
|
||||
relay := g.RelayHandler.Load()
|
||||
if relay != nil {
|
||||
if relayStatus, ok := relay.Status(); ok {
|
||||
report.RelayPeerIP = relayStatus.PeerIP
|
||||
}
|
||||
}
|
||||
|
||||
for i := range g.RemotePeers {
|
||||
remote := g.RemotePeers[i].Load()
|
||||
status, ok := remote.Status()
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
report.Remotes = append(report.Remotes, status)
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(report)
|
||||
}
|
||||
|
||||
server := http.Server{
|
||||
Handler: http.HandlerFunc(handler),
|
||||
}
|
||||
|
||||
unixListener, err := net.Listen("unix", socketPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to bind to unix socket: %v", err)
|
||||
}
|
||||
if err := server.Serve(unixListener); err != nil {
|
||||
log.Fatalf("Failed to serve on unix socket: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user