mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 18:05:19 +00:00
centralize apply route
This commit is contained in:
@@ -731,8 +731,6 @@ final class BLEService: NSObject {
|
|||||||
version: 2
|
version: 2
|
||||||
)
|
)
|
||||||
|
|
||||||
self.applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
|
|
||||||
if let signed = self.noiseService.signPacket(packet) {
|
if let signed = self.noiseService.signPacket(packet) {
|
||||||
packet = signed
|
packet = signed
|
||||||
}
|
}
|
||||||
@@ -761,7 +759,6 @@ final class BLEService: NSObject {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
} catch {
|
} catch {
|
||||||
SecureLogger.error("Failed to send read receipt: \(error)")
|
SecureLogger.error("Failed to send read receipt: \(error)")
|
||||||
@@ -780,21 +777,30 @@ final class BLEService: NSObject {
|
|||||||
// MARK: - Packet Broadcasting
|
// MARK: - Packet Broadcasting
|
||||||
|
|
||||||
private func broadcastPacket(_ packet: BitchatPacket, transferId: String? = nil) {
|
private func broadcastPacket(_ packet: BitchatPacket, transferId: String? = nil) {
|
||||||
|
// Apply route if recipient exists (centralized route application)
|
||||||
|
let packetToSend: BitchatPacket
|
||||||
|
if let recipientID = packet.recipientID,
|
||||||
|
let recipientPeerID = PeerID(hexData: recipientID) {
|
||||||
|
packetToSend = applyRouteIfAvailable(packet, to: recipientPeerID)
|
||||||
|
} else {
|
||||||
|
packetToSend = packet
|
||||||
|
}
|
||||||
|
|
||||||
// Encode once using a small per-type padding policy, then delegate by type
|
// Encode once using a small per-type padding policy, then delegate by type
|
||||||
let padForBLE = padPolicy(for: packet.type)
|
let padForBLE = padPolicy(for: packetToSend.type)
|
||||||
if packet.type == MessageType.fileTransfer.rawValue {
|
if packetToSend.type == MessageType.fileTransfer.rawValue {
|
||||||
sendFragmentedPacket(packet, pad: padForBLE, maxChunk: nil, directedOnlyPeer: nil, transferId: transferId)
|
sendFragmentedPacket(packetToSend, pad: padForBLE, maxChunk: nil, directedOnlyPeer: nil, transferId: transferId)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard let data = packet.toBinaryData(padding: padForBLE) else {
|
guard let data = packetToSend.toBinaryData(padding: padForBLE) else {
|
||||||
SecureLogger.error("❌ Failed to convert packet to binary data", category: .session)
|
SecureLogger.error("❌ Failed to convert packet to binary data", category: .session)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if packet.type == MessageType.noiseEncrypted.rawValue {
|
if packetToSend.type == MessageType.noiseEncrypted.rawValue {
|
||||||
sendEncrypted(packet, data: data, pad: padForBLE)
|
sendEncrypted(packetToSend, data: data, pad: padForBLE)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sendGenericBroadcast(packet, data: data, pad: padForBLE)
|
sendGenericBroadcast(packetToSend, data: data, pad: padForBLE)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Broadcast helpers (single responsibility)
|
// MARK: - Broadcast helpers (single responsibility)
|
||||||
@@ -1243,7 +1249,6 @@ final class BLEService: NSObject {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
} catch {
|
} catch {
|
||||||
SecureLogger.error("Failed to send delivery ACK: \(error)")
|
SecureLogger.error("Failed to send delivery ACK: \(error)")
|
||||||
@@ -2459,10 +2464,23 @@ extension BLEService {
|
|||||||
meshTopology.computeRoute(from: myPeerIDData, to: routingData(for: peerID))
|
meshTopology.computeRoute(from: myPeerIDData, to: routingData(for: peerID))
|
||||||
}
|
}
|
||||||
|
|
||||||
private func applyRouteIfAvailable(_ packet: inout BitchatPacket, to recipient: PeerID) {
|
private func applyRouteIfAvailable(_ packet: BitchatPacket, to recipient: PeerID) -> BitchatPacket {
|
||||||
guard let route = computeRoute(to: recipient), route.count >= 2 else { return }
|
guard let route = computeRoute(to: recipient), route.count >= 2 else {
|
||||||
packet.route = route
|
return packet
|
||||||
|
}
|
||||||
meshTopology.recordRoute(route)
|
meshTopology.recordRoute(route)
|
||||||
|
// Return new packet with route applied and version upgraded to 2
|
||||||
|
return BitchatPacket(
|
||||||
|
type: packet.type,
|
||||||
|
senderID: packet.senderID,
|
||||||
|
recipientID: packet.recipientID,
|
||||||
|
timestamp: packet.timestamp,
|
||||||
|
payload: packet.payload,
|
||||||
|
signature: packet.signature,
|
||||||
|
ttl: packet.ttl,
|
||||||
|
version: 2,
|
||||||
|
route: route
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func routingPeer(from data: Data) -> PeerID? {
|
private func routingPeer(from data: Data) -> PeerID? {
|
||||||
@@ -2556,7 +2574,6 @@ extension BLEService {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
} catch {
|
} catch {
|
||||||
SecureLogger.error("Failed to send verification payload: \(error)")
|
SecureLogger.error("Failed to send verification payload: \(error)")
|
||||||
@@ -2784,7 +2801,6 @@ extension BLEService {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: recipientID)
|
|
||||||
|
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
|
|
||||||
@@ -2833,7 +2849,6 @@ extension BLEService {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
} catch {
|
} catch {
|
||||||
SecureLogger.error("Failed to initiate handshake: \(error)")
|
SecureLogger.error("Failed to initiate handshake: \(error)")
|
||||||
@@ -2876,7 +2891,6 @@ extension BLEService {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&packet, to: peerID)
|
|
||||||
|
|
||||||
// We're already on messageQueue from the callback
|
// We're already on messageQueue from the callback
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
@@ -3692,7 +3706,6 @@ extension BLEService {
|
|||||||
signature: nil,
|
signature: nil,
|
||||||
ttl: messageTTL
|
ttl: messageTTL
|
||||||
)
|
)
|
||||||
applyRouteIfAvailable(&responsePacket, to: peerID)
|
|
||||||
// We're on messageQueue from delegate callback
|
// We're on messageQueue from delegate callback
|
||||||
broadcastPacket(responsePacket)
|
broadcastPacket(responsePacket)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user