diff --git a/app/src/main/java/com/bitchat/android/mesh/BluetoothPacketBroadcaster.kt b/app/src/main/java/com/bitchat/android/mesh/BluetoothPacketBroadcaster.kt index 188e9d2e..4abbf4cf 100644 --- a/app/src/main/java/com/bitchat/android/mesh/BluetoothPacketBroadcaster.kt +++ b/app/src/main/java/com/bitchat/android/mesh/BluetoothPacketBroadcaster.kt @@ -1,3 +1,4 @@ + package com.bitchat.android.mesh import android.bluetooth.BluetoothDevice @@ -70,6 +71,7 @@ class BluetoothPacketBroadcaster( try { val fromNick = incomingPeer?.let { nicknameResolver?.invoke(it) } val toNick = toPeer?.let { nicknameResolver?.invoke(it) } + val isRelay = (incomingAddr != null || incomingPeer != null) com.bitchat.android.ui.debug.DebugSettingsManager.getInstance().logPacketRelayDetailed( packetType = typeName, @@ -81,7 +83,8 @@ class BluetoothPacketBroadcaster( toPeerID = toPeer, toNickname = toNick, toDeviceAddress = toDeviceAddress, - ttl = ttl + ttl = ttl, + isRelay = isRelay ) } catch (_: Exception) { // Silently ignore debug logging failures diff --git a/app/src/main/java/com/bitchat/android/ui/debug/DebugSettingsManager.kt b/app/src/main/java/com/bitchat/android/ui/debug/DebugSettingsManager.kt index 9095d765..6e37286f 100644 --- a/app/src/main/java/com/bitchat/android/ui/debug/DebugSettingsManager.kt +++ b/app/src/main/java/com/bitchat/android/ui/debug/DebugSettingsManager.kt @@ -257,11 +257,10 @@ class DebugSettingsManager private constructor() { val who = if (!senderNickname.isNullOrBlank()) "$senderNickname ($senderPeerID)" else senderPeerID val routeInfo = if (!viaDeviceId.isNullOrBlank()) " via $viaDeviceId" else " (direct)" addDebugMessage(DebugMessage.PacketEvent( - "📥 Received $messageType from $who$routeInfo" + "📦 Received $messageType from $who$routeInfo" )) } } - fun logPacketRelay( packetType: String, originalPeerID: String, @@ -279,9 +278,11 @@ class DebugSettingsManager private constructor() { toPeerID = null, toNickname = null, toDeviceAddress = null, - ttl = null + ttl = null, + isRelay = true ) } + // New, more detailed relay logger used by the mesh/broadcaster fun logPacketRelayDetailed( @@ -294,7 +295,8 @@ class DebugSettingsManager private constructor() { toPeerID: String?, toNickname: String?, toDeviceAddress: String?, - ttl: UByte? + ttl: UByte?, + isRelay: Boolean = true ) { // Build message only if verbose logging is enabled, but always update stats val senderLabel = when { @@ -319,16 +321,26 @@ class DebugSettingsManager private constructor() { val ttlStr = ttl?.toString() ?: "?" if (verboseLoggingEnabled.value) { - addDebugMessage( - DebugMessage.RelayEvent( - "♻️ Relayed $packetType by $senderLabel from $fromName (${fromPeerID ?: "?"}, $fromAddr) to $toName (${toPeerID ?: "?"}, $toAddr) with TTL $ttlStr" + if (isRelay) { + addDebugMessage( + DebugMessage.RelayEvent( + "♻️ Relayed $packetType by $senderLabel from $fromName (${fromPeerID ?: "?"}, $fromAddr) to $toName (${toPeerID ?: "?"}, $toAddr) with TTL $ttlStr" + ) ) - ) + } else { + addDebugMessage( + DebugMessage.PacketEvent( + "📤 Sent $packetType by $senderLabel to $toName (${toPeerID ?: "?"}, $toAddr) with TTL $ttlStr" + ) + ) + } } - // Update rolling statistics - relayTimestamps.offer(System.currentTimeMillis()) - updateRelayStatsFromTimestamps() + // Update rolling statistics only for relays + if (isRelay) { + relayTimestamps.offer(System.currentTimeMillis()) + updateRelayStatsFromTimestamps() + } } // MARK: - Clear Data