WIP: Apparently working?

This commit is contained in:
jdl
2025-08-26 16:11:21 +02:00
parent ab246b2a90
commit 169231d848
7 changed files with 21 additions and 29 deletions

View File

@@ -98,12 +98,12 @@ func (r *Remote) sendUDP(b []byte, addr netip.AddrPort) {
// ----------------------------------------------------------------------------
func (r *Remote) encryptData(conf remoteConfig, packet []byte) []byte {
func (r *Remote) encryptData(conf remoteConfig, destIP byte, packet []byte) []byte {
h := Header{
StreamID: dataStreamID,
Counter: atomic.AddUint64(&r.sendCounter, 1),
SourceIP: r.Globals.LocalPeerIP,
DestIP: r.RemotePeerIP,
DestIP: destIP,
}
return conf.DataCipher.Encrypt(h, packet, packet[len(packet):cap(packet)])
}
@@ -144,22 +144,21 @@ func (r *Remote) sendDataRelayed(conf remoteConfig, data []byte) {
return
}
relay.relayData(r.encryptData(conf, data))
relay.relayData(conf.Peer.PeerIP, r.encryptData(conf, conf.Peer.PeerIP, data))
}
// sendDataDirect sends data to the remote directly.
func (r *Remote) sendDataDirect(conf remoteConfig, data []byte) {
r.logf("Sending data direct...")
r.sendUDP(r.encryptData(conf, data), conf.DirectAddr)
r.sendUDP(r.encryptData(conf, conf.Peer.PeerIP, data), conf.DirectAddr)
}
func (r *Remote) relayData(enc []byte) {
func (r *Remote) relayData(toIP byte, enc []byte) {
conf := r.conf()
if !conf.Up || !conf.Direct {
r.logf("Cannot relay: not up or not a direct connection")
return
}
r.sendDataDirect(conf, enc)
r.sendUDP(r.encryptData(conf, toIP, enc), conf.DirectAddr)
}
func (r *Remote) sendControl(conf remoteConfig, data []byte) {
@@ -176,13 +175,11 @@ func (r *Remote) sendControlToAddr(buf []byte, addr netip.AddrPort) {
}
func (r *Remote) sendControlDirect(conf remoteConfig, data []byte) {
r.logf("Sending control direct...")
enc := r.encryptControl(conf, data)
r.sendUDP(enc, conf.DirectAddr)
}
func (r *Remote) sendControlRelayed(conf remoteConfig, data []byte) {
r.logf("Sending control relayed...")
relay := r.RelayHandler.Load()
if relay == nil {
@@ -190,7 +187,7 @@ func (r *Remote) sendControlRelayed(conf remoteConfig, data []byte) {
return
}
relay.relayData(r.encryptControl(conf, data))
relay.relayData(conf.Peer.PeerIP, r.encryptControl(conf, data))
}
func (r *Remote) forwardPacket(data []byte) {
@@ -268,7 +265,9 @@ func (r *Remote) handleDataPacket(h Header, data []byte) {
// For local.
if h.DestIP == r.LocalPeerIP {
if _, err := r.IFace.Write(dec); err != nil {
log.Fatalf("Failed to write to interface: %v", err)
// This could be a malformed packet from a peer, so we don't crash if it
// happens.
r.logf("Failed to write to interface: %v", err)
}
return
}
@@ -297,7 +296,6 @@ func (r *Remote) HandleLocalDiscoveryPacket(h Header, srcAddr netip.AddrPort, da
SrcIP: h.SourceIP,
SrcAddr: srcAddr,
}
r.logf("Got local discovery packet from %v.", srcAddr)
select {
case r.messages <- msg: