Compare commits

..

2 Commits
v0.8.0 ... main

Author SHA1 Message Date
jdl
5ae075647d Bug fixes 2025-09-25 10:03:37 +02:00
jdl
29bbb442c8 Cleanup 2025-09-25 09:08:10 +02:00
8 changed files with 18 additions and 28 deletions

View File

@ -2,6 +2,8 @@
## TO DO ## TO DO
* peer - write status to file instead of using sockets
* peer - improve relay selection
* Double buffering in IFReader and ConnReader ? * Double buffering in IFReader and ConnReader ?
## Hub Server Configuration ## Hub Server Configuration

View File

@ -5,8 +5,6 @@ import (
"errors" "errors"
"log" "log"
"net/http" "net/http"
"net/netip"
"strings"
"vppn/hub/api" "vppn/hub/api"
"vppn/m" "vppn/m"
@ -248,27 +246,6 @@ func (a *App) _adminPeerDeleteSubmit(s *api.Session, w http.ResponseWriter, r *h
return a.redirect(w, r, "/admin/network/view/?NetworkID=%d", n.NetworkID) return a.redirect(w, r, "/admin/network/view/?NetworkID=%d", n.NetworkID)
} }
func (a *App) _adminNetworkHosts(s *api.Session, w http.ResponseWriter, r *http.Request) error {
n, peers, err := a.formGetNetworkPeers(r.Form)
if err != nil {
return err
}
b := strings.Builder{}
for _, peer := range peers {
ip := n.Network
ip[3] = peer.PeerIP
b.WriteString(netip.AddrFrom4([4]byte(ip)).String())
b.WriteString(" ")
b.WriteString(peer.Name)
b.WriteString("\n")
}
w.Write([]byte(b.String()))
return nil
}
func (a *App) _adminPasswordEdit(s *api.Session, w http.ResponseWriter, r *http.Request) error { func (a *App) _adminPasswordEdit(s *api.Session, w http.ResponseWriter, r *http.Request) error {
return a.render("/admin-password-edit.html", w, struct{ Session *api.Session }{s}) return a.render("/admin-password-edit.html", w, struct{ Session *api.Session }{s})
} }

View File

@ -19,7 +19,6 @@ func (a *App) registerRoutes() {
a.handleSignedIn("POST /admin/network/delete/", a._adminNetworkDeleteSubmit) a.handleSignedIn("POST /admin/network/delete/", a._adminNetworkDeleteSubmit)
a.handleSignedIn("GET /admin/network/view/", a._adminNetworkView) a.handleSignedIn("GET /admin/network/view/", a._adminNetworkView)
a.handleSignedIn("GET /admin/network/hosts/", a._adminNetworkHosts)
a.handleSignedIn("GET /admin/peer/create/", a._adminPeerCreate) a.handleSignedIn("GET /admin/peer/create/", a._adminPeerCreate)
a.handleSignedIn("POST /admin/peer/create/", a._adminPeerCreateSubmit) a.handleSignedIn("POST /admin/peer/create/", a._adminPeerCreateSubmit)
a.handleSignedIn("GET /admin/peer/view/", a._adminPeerView) a.handleSignedIn("GET /admin/peer/view/", a._adminPeerView)

View File

@ -1,7 +1,6 @@
{{define "body" -}} {{define "body" -}}
<p> <p>
<a href="/admin/network/delete/?NetworkID={{.Network.NetworkID}}">Delete</a> / <a href="/admin/network/delete/?NetworkID={{.Network.NetworkID}}">Delete</a>
<a href="/admin/network/hosts/?NetworkID={{.Network.NetworkID}}">Hosts</a>
</p> </p>
<table class="def-list"> <table class="def-list">

View File

@ -108,9 +108,11 @@ func main_status() {
fmt.Printf("\n%s Status\n\n", netName) fmt.Printf("\n%s Status\n\n", netName)
if len(report.Network) != 4 { if len(report.Network) != 4 {
fmt.Println("ERROR: Network isn't 4 bytes.")
fmt.Printf("Network: %v\n\n", report.Network) fmt.Printf("Network: %v\n\n", report.Network)
} else { } else {
nw := report.Network nw := report.Network
fmt.Printf("%-8s %d.%d.%d.%d\n", "IP", nw[0], nw[1], nw[2], report.LocalPeerIP)
fmt.Printf("%-8s %d.%d.%d.%d/24\n", "Network", nw[0], nw[1], nw[2], nw[3]) fmt.Printf("%-8s %d.%d.%d.%d/24\n", "Network", nw[0], nw[1], nw[2], nw[3])
} }

View File

@ -30,6 +30,10 @@ func newPeerMain(args mainArgs) *peerMain {
log.Printf("[Main] "+s, args...) log.Printf("[Main] "+s, args...)
} }
if err := os.MkdirAll(configDir(args.NetName), 0700); err != nil {
log.Fatalf("Failed to create config directory: %v", err)
}
lockFile, err := flock.TryLock(lockFilePath(args.NetName)) lockFile, err := flock.TryLock(lockFilePath(args.NetName))
if err != nil { if err != nil {
log.Fatalf("Failed to open lock file: %v", err) log.Fatalf("Failed to open lock file: %v", err)

View File

@ -280,6 +280,11 @@ func (r *Remote) handleDataPacket(h Header, data []byte) {
// HandleLocalDiscoveryPacket is called by the MCReader. // HandleLocalDiscoveryPacket is called by the MCReader.
func (r *Remote) HandleLocalDiscoveryPacket(h Header, srcAddr netip.AddrPort, data []byte) { func (r *Remote) HandleLocalDiscoveryPacket(h Header, srcAddr netip.AddrPort, data []byte) {
conf := r.conf() conf := r.conf()
if conf.Peer == nil {
r.logf("No peer for discovery packet.")
return
}
if conf.Peer.PubSignKey == nil { if conf.Peer.PubSignKey == nil {
r.logf("No signing key for discovery packet.") r.logf("No signing key for discovery packet.")
return return

View File

@ -10,6 +10,7 @@ import (
) )
type StatusReport struct { type StatusReport struct {
LocalPeerIP byte
Network []byte Network []byte
RelayPeerIP byte RelayPeerIP byte
Remotes []RemoteStatus Remotes []RemoteStatus
@ -32,8 +33,9 @@ func runStatusServer(g Globals, socketPath string) {
handler := func(w http.ResponseWriter, r *http.Request) { handler := func(w http.ResponseWriter, r *http.Request) {
report := StatusReport{ report := StatusReport{
Network: g.Network, LocalPeerIP: g.LocalPeerIP,
Remotes: make([]RemoteStatus, 0, 255), Network: g.Network,
Remotes: make([]RemoteStatus, 0, 255),
} }
relay := g.RelayHandler.Load() relay := g.RelayHandler.Load()