This commit is contained in:
callebtc
2025-07-21 19:18:46 +02:00
parent 554b687ad8
commit bfb9a535ac
6 changed files with 20 additions and 19 deletions
@@ -92,7 +92,7 @@ class EncryptionService(private val context: Context) {
fun encrypt(data: ByteArray, peerID: String): ByteArray { fun encrypt(data: ByteArray, peerID: String): ByteArray {
val encrypted = noiseService.encrypt(data, peerID) val encrypted = noiseService.encrypt(data, peerID)
if (encrypted == null) { if (encrypted == null) {
throw Exception("Failed to encrypt for $peerID - no established session") throw Exception("Failed to encrypt for $peerID")
} }
return encrypted return encrypted
} }
@@ -104,7 +104,7 @@ class EncryptionService(private val context: Context) {
fun decrypt(data: ByteArray, peerID: String): ByteArray { fun decrypt(data: ByteArray, peerID: String): ByteArray {
val decrypted = noiseService.decrypt(data, peerID) val decrypted = noiseService.decrypt(data, peerID)
if (decrypted == null) { if (decrypted == null) {
throw Exception("Failed to decrypt from $peerID - no established session") throw Exception("Failed to decrypt from $peerID")
} }
return decrypted return decrypted
} }
@@ -61,6 +61,9 @@ class BluetoothMeshService(private val context: Context) {
init { init {
setupDelegates() setupDelegates()
// Wire up PacketProcessor reference for recursive handling in MessageHandler
messageHandler.packetProcessor = packetProcessor
// startPeriodicDebugLogging() // startPeriodicDebugLogging()
} }
@@ -41,7 +41,7 @@ class BluetoothPacketBroadcaster(
fragments.forEach { fragment -> fragments.forEach { fragment ->
broadcastSinglePacket(RoutedPacket(fragment), gattServer, characteristic) broadcastSinglePacket(RoutedPacket(fragment), gattServer, characteristic)
// 20ms delay between fragments (matching iOS/Rust) // 20ms delay between fragments (matching iOS/Rust)
delay(20) delay(200)
} }
} }
return return
@@ -27,6 +27,9 @@ class MessageHandler(private val myPeerID: String) {
// Delegate for callbacks // Delegate for callbacks
var delegate: MessageHandlerDelegate? = null var delegate: MessageHandlerDelegate? = null
// Reference to PacketProcessor for recursive packet handling
var packetProcessor: PacketProcessor? = null
// Coroutines // Coroutines
private val handlerScope = CoroutineScope(Dispatchers.IO + SupervisorJob()) private val handlerScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
@@ -88,14 +91,11 @@ class MessageHandler(private val myPeerID: String) {
// Create a new routed packet with the decrypted inner packet // Create a new routed packet with the decrypted inner packet
val innerRouted = RoutedPacket(innerPacket, peerID, routed.relayAddress) val innerRouted = RoutedPacket(innerPacket, peerID, routed.relayAddress)
// Process the decrypted inner packet recursively // Use PacketProcessor to handle the inner packet recursively
when (MessageType.fromValue(innerPacket.type)) { if (packetProcessor != null) {
MessageType.MESSAGE -> handleMessage(innerRouted) packetProcessor!!.processPacket(innerRouted)
MessageType.DELIVERY_ACK -> handleDeliveryAck(innerRouted) } else {
MessageType.READ_RECEIPT -> handleReadReceipt(innerRouted) Log.w(TAG, "PacketProcessor reference is null; cannot recursively process inner packet.")
else -> {
Log.w(TAG, "Unexpected inner packet type: ${innerPacket.type}")
}
} }
} else { } else {
Log.w(TAG, "Failed to parse decrypted data as packet from $peerID") Log.w(TAG, "Failed to parse decrypted data as packet from $peerID")
@@ -39,9 +39,9 @@ class PacketProcessor(private val myPeerID: String) {
Log.d(TAG, "🎭 Created packet actor for peer: $peerID") Log.d(TAG, "🎭 Created packet actor for peer: $peerID")
try { try {
for (packet in channel) { for (packet in channel) {
Log.d(TAG, "🔒 Processing packet type ${packet.packet.type} from $peerID (serialized)") Log.d(TAG, "Processing packet type ${packet.packet.type} from $peerID (serialized)")
handleReceivedPacket(packet) handleReceivedPacket(packet)
Log.d(TAG, "🔓 Completed packet type ${packet.packet.type} from $peerID") Log.d(TAG, "Completed packet type ${packet.packet.type} from $peerID")
} }
} finally { } finally {
Log.d(TAG, "🎭 Packet actor for $peerID terminated") Log.d(TAG, "🎭 Packet actor for $peerID terminated")
@@ -417,15 +417,13 @@ class NoiseSession(
try { try {
val plaintext = ByteArray(encryptedData.size) // Over-allocate for safety val plaintext = ByteArray(encryptedData.size) // Over-allocate for safety
val plaintextLength = receiveCipher!!.decryptWithAd(null, encryptedData, 0, plaintext, 0, encryptedData.size) val plaintextLength = receiveCipher!!.decryptWithAd(null, encryptedData, 0, plaintext, 0, encryptedData.size)
messagesReceived++ messagesReceived++
val result = plaintext.copyOf(plaintextLength) val result = plaintext.copyOf(plaintextLength)
Log.d(TAG, "Real decrypted ${encryptedData.size} bytes to ${result.size} bytes from $peerID (msg #$messagesReceived)") Log.d(TAG, "Decrypted ${encryptedData.size} bytes to ${result.size} bytes from $peerID (msg #$messagesReceived)")
return result return result
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Real decryption failed - exception: ${e.message}") Log.e(TAG, "Decryption failed - exception: ${e.message}")
// ENHANCED: Log cipher state and session details for debugging // ENHANCED: Log cipher state and session details for debugging
if (receiveCipher != null) { if (receiveCipher != null) {