From a6e022e57075682a9bd44df9835c722bf9dbd999 Mon Sep 17 00:00:00 2001 From: jdl Date: Mon, 23 Dec 2024 08:15:02 +0100 Subject: [PATCH] Cleanup: working --- node/globalfuncs.go | 47 ++++++++------------------ node/globals.go | 44 ++++++++++++------------ node/{peer-pollhub.go => hubpoller.go} | 0 node/main.go | 2 +- 4 files changed, 37 insertions(+), 56 deletions(-) rename node/{peer-pollhub.go => hubpoller.go} (100%) diff --git a/node/globalfuncs.go b/node/globalfuncs.go index 9ddf90c..406588e 100644 --- a/node/globalfuncs.go +++ b/node/globalfuncs.go @@ -5,48 +5,25 @@ import ( "sync/atomic" ) -func _sendControlPacket( - pkt interface{ Marshal([]byte) []byte }, - route peerRoute, - buf1 []byte, - buf2 []byte, -) { - buf := pkt.Marshal(buf1) - h1 := header{ +func _sendControlPacket(pkt interface{ Marshal([]byte) []byte }, route peerRoute, buf1, buf2 []byte) { + buf := pkt.Marshal(buf2) + h := header{ StreamID: controlStreamID, Counter: atomic.AddUint64(&sendCounters[route.IP], 1), SourceIP: localIP, DestIP: route.IP, } - buf = route.ControlCipher.Encrypt(h1, buf, buf2) + buf = route.ControlCipher.Encrypt(h, buf, buf1) if route.RelayIP == 0 { _conn.WriteTo(buf, route.RemoteAddr) return } - relayRoute := routingTable[route.RelayIP].Load() - if !relayRoute.Up || !relayRoute.Relay { - log.Print("Failed to send control packet: relay not available.") - return - } - - h2 := header{ - StreamID: dataStreamID, - Counter: atomic.AddUint64(&sendCounters[relayRoute.IP], 1), - SourceIP: localIP, - DestIP: route.IP, - } - buf = relayRoute.DataCipher.Encrypt(h2, buf, buf1) - _conn.WriteTo(buf, relayRoute.RemoteAddr) + _relayPacket(route.RelayIP, route.IP, buf, buf2) } -func _sendDataPacket( - pkt []byte, - route *peerRoute, - buf1 []byte, - buf2 []byte, -) { +func _sendDataPacket(route *peerRoute, pkt, buf1, buf2 []byte) { h := header{ StreamID: dataStreamID, Counter: atomic.AddUint64(&sendCounters[route.IP], 1), @@ -61,19 +38,23 @@ func _sendDataPacket( return } - relayRoute := routingTable[route.RelayIP].Load() + _relayPacket(route.RelayIP, route.IP, enc, buf2) +} + +func _relayPacket(relayIP, destIP byte, data, buf []byte) { + relayRoute := routingTable[relayIP].Load() if !relayRoute.Up || !relayRoute.Relay { log.Print("Failed to send data packet: relay not available.") return } - h2 := header{ + h := header{ StreamID: dataStreamID, Counter: atomic.AddUint64(&sendCounters[relayRoute.IP], 1), SourceIP: localIP, - DestIP: route.IP, + DestIP: destIP, } - enc = relayRoute.DataCipher.Encrypt(h2, enc, buf2) + enc := relayRoute.DataCipher.Encrypt(h, data, buf) _conn.WriteTo(enc, relayRoute.RemoteAddr) } diff --git a/node/globals.go b/node/globals.go index db1e792..f782cb5 100644 --- a/node/globals.go +++ b/node/globals.go @@ -27,31 +27,31 @@ type peerRoute struct { RelayIP byte // Non-zero if we should relay. } -// Configuration for this peer. var ( + // Configuration for this peer. netName string localIP byte localPub bool privateKey []byte + + // Shared interface for writing. + _iface *ifWriter + + // Shared connection for writing. + _conn *connWriter + + // Counters for sending to each peer. + sendCounters [256]uint64 + + // Duplicate checkers for incoming packets. + dupChecks [256]*dupCheck + + // Channels for incoming control packets. + controlPackets [256]chan controlPacket + + // Channels for incoming peer updates from the hub. + peerUpdates [256]chan *m.Peer + + // Global routing table. + routingTable [256]*atomic.Pointer[peerRoute] ) - -// Shared interface for writing. -var _iface *ifWriter - -// Shared connection for writing. -var _conn *connWriter - -// Counters for sending to each peer. -var sendCounters [256]uint64 - -// Duplicate checkers for incoming packets. -var dupChecks [256]*dupCheck - -// Channels for incoming control packets. -var controlPackets [256]chan controlPacket - -// Channels for incoming peer updates from the hub. -var peerUpdates [256]chan *m.Peer - -// Global routing table. -var routingTable [256]*atomic.Pointer[peerRoute] diff --git a/node/peer-pollhub.go b/node/hubpoller.go similarity index 100% rename from node/peer-pollhub.go rename to node/hubpoller.go diff --git a/node/main.go b/node/main.go index e2e5c42..d9d865a 100644 --- a/node/main.go +++ b/node/main.go @@ -287,6 +287,6 @@ func readFromIFace(iface io.ReadWriteCloser) { continue } - _sendDataPacket(packet, route, buf1, buf2) + _sendDataPacket(route, packet, buf1, buf2) } }