mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 04:05:21 +00:00
Handle only packets addressed to me (#184)
* skip private packets not to us * logs
This commit is contained in:
@@ -316,6 +316,10 @@ class BluetoothMeshService(private val context: Context) {
|
|||||||
peerManager.updatePeerLastSeen(peerID)
|
peerManager.updatePeerLastSeen(peerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getPeerNickname(peerID: String): String? {
|
||||||
|
return peerManager.getPeerNickname(peerID)
|
||||||
|
}
|
||||||
|
|
||||||
// Network information for relay manager
|
// Network information for relay manager
|
||||||
override fun getNetworkSize(): Int {
|
override fun getNetworkSize(): Int {
|
||||||
return peerManager.getActivePeerCount()
|
return peerManager.getActivePeerCount()
|
||||||
|
|||||||
@@ -24,6 +24,12 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
// Delegate for callbacks
|
// Delegate for callbacks
|
||||||
var delegate: PacketProcessorDelegate? = null
|
var delegate: PacketProcessorDelegate? = null
|
||||||
|
|
||||||
|
// Helper function to format peer ID with nickname for logging
|
||||||
|
private fun formatPeerForLog(peerID: String): String {
|
||||||
|
val nickname = delegate?.getPeerNickname(peerID)
|
||||||
|
return if (nickname != null) "$peerID ($nickname)" else peerID
|
||||||
|
}
|
||||||
|
|
||||||
// Packet relay manager for centralized relay decisions
|
// Packet relay manager for centralized relay decisions
|
||||||
private val packetRelayManager = PacketRelayManager(myPeerID)
|
private val packetRelayManager = PacketRelayManager(myPeerID)
|
||||||
|
|
||||||
@@ -39,15 +45,15 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
private fun getOrCreateActorForPeer(peerID: String) = processorScope.actor<RoutedPacket>(
|
private fun getOrCreateActorForPeer(peerID: String) = processorScope.actor<RoutedPacket>(
|
||||||
capacity = Channel.UNLIMITED
|
capacity = Channel.UNLIMITED
|
||||||
) {
|
) {
|
||||||
Log.d(TAG, "🎭 Created packet actor for peer: $peerID")
|
Log.d(TAG, "🎭 Created packet actor for peer: ${formatPeerForLog(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 ${formatPeerForLog(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 ${formatPeerForLog(peerID)}")
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
Log.d(TAG, "🎭 Packet actor for $peerID terminated")
|
Log.d(TAG, "🎭 Packet actor for ${formatPeerForLog(peerID)} terminated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +80,7 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
try {
|
try {
|
||||||
actor.send(routed)
|
actor.send(routed)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.w(TAG, "Failed to send packet to actor for $peerID: ${e.message}")
|
Log.w(TAG, "Failed to send packet to actor for ${formatPeerForLog(peerID)}: ${e.message}")
|
||||||
// Fallback to direct processing if actor fails
|
// Fallback to direct processing if actor fails
|
||||||
handleReceivedPacket(routed)
|
handleReceivedPacket(routed)
|
||||||
}
|
}
|
||||||
@@ -109,17 +115,16 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
|
|
||||||
// Basic validation and security checks
|
// Basic validation and security checks
|
||||||
if (!delegate?.validatePacketSecurity(packet, peerID)!!) {
|
if (!delegate?.validatePacketSecurity(packet, peerID)!!) {
|
||||||
Log.d(TAG, "Packet failed security validation from $peerID")
|
Log.d(TAG, "Packet failed security validation from ${formatPeerForLog(peerID)}")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var validPacket = true
|
var validPacket = true
|
||||||
Log.d(TAG, "Processing packet type ${packet.type} from $peerID")
|
Log.d(TAG, "Processing packet type ${MessageType.fromValue(packet.type)} from ${formatPeerForLog(peerID)}")
|
||||||
val DEBUG_MESSAGE_TYPE = MessageType.fromValue(packet.type)
|
val messageType = MessageType.fromValue(packet.type)
|
||||||
when (MessageType.fromValue(packet.type)) {
|
|
||||||
MessageType.NOISE_HANDSHAKE_INIT -> handleNoiseHandshake(routed, 1)
|
// Handle public packet types (no address check needed)
|
||||||
MessageType.NOISE_HANDSHAKE_RESP -> handleNoiseHandshake(routed, 2)
|
when (messageType) {
|
||||||
MessageType.NOISE_ENCRYPTED -> handleNoiseEncrypted(routed)
|
|
||||||
MessageType.NOISE_IDENTITY_ANNOUNCE -> handleNoiseIdentityAnnouncement(routed)
|
MessageType.NOISE_IDENTITY_ANNOUNCE -> handleNoiseIdentityAnnouncement(routed)
|
||||||
MessageType.ANNOUNCE -> handleAnnounce(routed)
|
MessageType.ANNOUNCE -> handleAnnounce(routed)
|
||||||
MessageType.MESSAGE -> handleMessage(routed)
|
MessageType.MESSAGE -> handleMessage(routed)
|
||||||
@@ -127,6 +132,13 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
MessageType.FRAGMENT_START,
|
MessageType.FRAGMENT_START,
|
||||||
MessageType.FRAGMENT_CONTINUE,
|
MessageType.FRAGMENT_CONTINUE,
|
||||||
MessageType.FRAGMENT_END -> handleFragment(routed)
|
MessageType.FRAGMENT_END -> handleFragment(routed)
|
||||||
|
else -> {
|
||||||
|
// Handle private packet types (address check required)
|
||||||
|
if (packetRelayManager.isPacketAddressedToMe(packet)) {
|
||||||
|
when (messageType) {
|
||||||
|
MessageType.NOISE_HANDSHAKE_INIT -> handleNoiseHandshake(routed, 1)
|
||||||
|
MessageType.NOISE_HANDSHAKE_RESP -> handleNoiseHandshake(routed, 2)
|
||||||
|
MessageType.NOISE_ENCRYPTED -> handleNoiseEncrypted(routed)
|
||||||
MessageType.DELIVERY_ACK -> handleDeliveryAck(routed)
|
MessageType.DELIVERY_ACK -> handleDeliveryAck(routed)
|
||||||
MessageType.READ_RECEIPT -> handleReadReceipt(routed)
|
MessageType.READ_RECEIPT -> handleReadReceipt(routed)
|
||||||
else -> {
|
else -> {
|
||||||
@@ -134,6 +146,11 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
Log.w(TAG, "Unknown message type: ${packet.type}")
|
Log.w(TAG, "Unknown message type: ${packet.type}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Private packet type ${messageType} not addressed to us (from: ${formatPeerForLog(peerID)} to ${packet.recipientID?.let { it.joinToString("") { b -> "%02x".format(b) } }}), skipping")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update last seen timestamp
|
// Update last seen timestamp
|
||||||
if (validPacket) {
|
if (validPacket) {
|
||||||
@@ -149,7 +166,7 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
*/
|
*/
|
||||||
private fun handleNoiseHandshake(routed: RoutedPacket, step: Int) {
|
private fun handleNoiseHandshake(routed: RoutedPacket, step: Int) {
|
||||||
val peerID = routed.peerID ?: "unknown"
|
val peerID = routed.peerID ?: "unknown"
|
||||||
Log.d(TAG, "Processing Noise handshake step $step from $peerID")
|
Log.d(TAG, "Processing Noise handshake step $step from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleNoiseHandshake(routed, step)
|
delegate?.handleNoiseHandshake(routed, step)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +175,7 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
*/
|
*/
|
||||||
private suspend fun handleNoiseEncrypted(routed: RoutedPacket) {
|
private suspend fun handleNoiseEncrypted(routed: RoutedPacket) {
|
||||||
val peerID = routed.peerID ?: "unknown"
|
val peerID = routed.peerID ?: "unknown"
|
||||||
Log.d(TAG, "Processing Noise encrypted message from $peerID")
|
Log.d(TAG, "Processing Noise encrypted message from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleNoiseEncrypted(routed)
|
delegate?.handleNoiseEncrypted(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +184,7 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
*/
|
*/
|
||||||
private suspend fun handleNoiseIdentityAnnouncement(routed: RoutedPacket) {
|
private suspend fun handleNoiseIdentityAnnouncement(routed: RoutedPacket) {
|
||||||
val peerID = routed.peerID ?: "unknown"
|
val peerID = routed.peerID ?: "unknown"
|
||||||
Log.d(TAG, "Processing Noise identity announcement from $peerID")
|
Log.d(TAG, "Processing Noise identity announcement from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleNoiseIdentityAnnouncement(routed)
|
delegate?.handleNoiseIdentityAnnouncement(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +192,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle announce message
|
* Handle announce message
|
||||||
*/
|
*/
|
||||||
private suspend fun handleAnnounce(routed: RoutedPacket) {
|
private suspend fun handleAnnounce(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing announce from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing announce from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleAnnounce(routed)
|
delegate?.handleAnnounce(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +201,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle regular message
|
* Handle regular message
|
||||||
*/
|
*/
|
||||||
private suspend fun handleMessage(routed: RoutedPacket) {
|
private suspend fun handleMessage(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing message from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing message from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleMessage(routed)
|
delegate?.handleMessage(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +210,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle leave message
|
* Handle leave message
|
||||||
*/
|
*/
|
||||||
private suspend fun handleLeave(routed: RoutedPacket) {
|
private suspend fun handleLeave(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing leave from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing leave from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleLeave(routed)
|
delegate?.handleLeave(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +219,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle message fragments
|
* Handle message fragments
|
||||||
*/
|
*/
|
||||||
private suspend fun handleFragment(routed: RoutedPacket) {
|
private suspend fun handleFragment(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing fragment from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing fragment from ${formatPeerForLog(peerID)}")
|
||||||
|
|
||||||
val reassembledPacket = delegate?.handleFragment(routed.packet)
|
val reassembledPacket = delegate?.handleFragment(routed.packet)
|
||||||
if (reassembledPacket != null) {
|
if (reassembledPacket != null) {
|
||||||
@@ -214,7 +235,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle delivery acknowledgment
|
* Handle delivery acknowledgment
|
||||||
*/
|
*/
|
||||||
private suspend fun handleDeliveryAck(routed: RoutedPacket) {
|
private suspend fun handleDeliveryAck(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing delivery ACK from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing delivery ACK from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleDeliveryAck(routed)
|
delegate?.handleDeliveryAck(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +244,8 @@ class PacketProcessor(private val myPeerID: String) {
|
|||||||
* Handle read receipt
|
* Handle read receipt
|
||||||
*/
|
*/
|
||||||
private suspend fun handleReadReceipt(routed: RoutedPacket) {
|
private suspend fun handleReadReceipt(routed: RoutedPacket) {
|
||||||
Log.d(TAG, "Processing read receipt from ${routed.peerID}")
|
val peerID = routed.peerID ?: "unknown"
|
||||||
|
Log.d(TAG, "Processing read receipt from ${formatPeerForLog(peerID)}")
|
||||||
delegate?.handleReadReceipt(routed)
|
delegate?.handleReadReceipt(routed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +299,7 @@ interface PacketProcessorDelegate {
|
|||||||
|
|
||||||
// Peer management
|
// Peer management
|
||||||
fun updatePeerLastSeen(peerID: String)
|
fun updatePeerLastSeen(peerID: String)
|
||||||
|
fun getPeerNickname(peerID: String): String?
|
||||||
|
|
||||||
// Network information
|
// Network information
|
||||||
fun getNetworkSize(): Int
|
fun getNetworkSize(): Int
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class PacketRelayManager(private val myPeerID: String) {
|
|||||||
/**
|
/**
|
||||||
* Check if a packet is specifically addressed to us
|
* Check if a packet is specifically addressed to us
|
||||||
*/
|
*/
|
||||||
private fun isPacketAddressedToMe(packet: BitchatPacket): Boolean {
|
internal fun isPacketAddressedToMe(packet: BitchatPacket): Boolean {
|
||||||
val recipientID = packet.recipientID
|
val recipientID = packet.recipientID
|
||||||
|
|
||||||
// No recipient means broadcast (not addressed to us specifically)
|
// No recipient means broadcast (not addressed to us specifically)
|
||||||
|
|||||||
Reference in New Issue
Block a user