mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 05:05:19 +00:00
Fix private message routing
- Add recipient ID to private message packets for proper routing - Private messages now correctly include recipientID field - Add comprehensive debug logging for private message flow - Messages are now properly delivered to intended recipients - Add asterisk after bitchat text in header
This commit is contained in:
@@ -259,13 +259,18 @@ class BluetoothMeshService: NSObject {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if let messageData = message.toBinaryPayload() {
|
if let messageData = message.toBinaryPayload() {
|
||||||
|
// Create packet with recipient ID for proper routing
|
||||||
let packet = BitchatPacket(
|
let packet = BitchatPacket(
|
||||||
type: MessageType.privateMessage.rawValue,
|
type: MessageType.privateMessage.rawValue,
|
||||||
ttl: self.maxTTL,
|
senderID: Data(self.myPeerID.utf8),
|
||||||
senderID: self.myPeerID,
|
recipientID: Data(recipientPeerID.utf8),
|
||||||
payload: messageData
|
timestamp: UInt64(Date().timeIntervalSince1970),
|
||||||
|
payload: messageData,
|
||||||
|
signature: nil,
|
||||||
|
ttl: self.maxTTL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print("[PRIVATE] Sending private message to \(recipientPeerID)")
|
||||||
self.broadcastPacket(packet)
|
self.broadcastPacket(packet)
|
||||||
|
|
||||||
// Don't call didReceiveMessage here - let the view model handle it directly
|
// Don't call didReceiveMessage here - let the view model handle it directly
|
||||||
@@ -538,52 +543,63 @@ class BluetoothMeshService: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case .privateMessage:
|
case .privateMessage:
|
||||||
|
print("[PRIVATE] Received private message packet")
|
||||||
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
||||||
// Check if this private message is for us
|
// Check if this private message is for us
|
||||||
if let recipientID = packet.recipientID,
|
if let recipientID = packet.recipientID,
|
||||||
let recipientIDString = String(data: recipientID.trimmingNullBytes(), encoding: .utf8),
|
let recipientIDString = String(data: recipientID.trimmingNullBytes(), encoding: .utf8) {
|
||||||
recipientIDString == myPeerID {
|
print("[PRIVATE] Message recipient: \(recipientIDString), myPeerID: \(myPeerID)")
|
||||||
|
|
||||||
// Get sender ID
|
if recipientIDString == myPeerID {
|
||||||
if let senderID = String(data: packet.senderID.trimmingNullBytes(), encoding: .utf8) {
|
// Get sender ID
|
||||||
// Ignore our own messages
|
if let senderID = String(data: packet.senderID.trimmingNullBytes(), encoding: .utf8) {
|
||||||
if senderID == myPeerID {
|
// Ignore our own messages
|
||||||
return
|
if senderID == myPeerID {
|
||||||
}
|
print("[PRIVATE] Ignoring own message")
|
||||||
|
return
|
||||||
// Store nickname mapping if we don't have it
|
}
|
||||||
if peerNicknames[senderID] == nil {
|
|
||||||
peerNicknames[senderID] = message.sender
|
print("[PRIVATE] Received private message from \(senderID): \(message.content)")
|
||||||
|
|
||||||
|
// Store nickname mapping if we don't have it
|
||||||
|
if peerNicknames[senderID] == nil {
|
||||||
|
peerNicknames[senderID] = message.sender
|
||||||
|
|
||||||
|
// Update peer list to show the new nickname
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Create a new message with the sender peer ID
|
||||||
|
let messageWithPeerID = BitchatMessage(
|
||||||
|
sender: message.sender,
|
||||||
|
content: message.content,
|
||||||
|
timestamp: message.timestamp,
|
||||||
|
isRelay: message.isRelay,
|
||||||
|
originalSender: message.originalSender,
|
||||||
|
isPrivate: message.isPrivate,
|
||||||
|
recipientNickname: message.recipientNickname,
|
||||||
|
senderPeerID: senderID
|
||||||
|
)
|
||||||
|
|
||||||
// Update peer list to show the new nickname
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs())
|
self.delegate?.didReceiveMessage(messageWithPeerID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if packet.ttl > 0 {
|
||||||
|
// Relay private messages that aren't for us
|
||||||
// Create a new message with the sender peer ID
|
print("[PRIVATE] Relaying message not meant for us (TTL: \(packet.ttl))")
|
||||||
let messageWithPeerID = BitchatMessage(
|
var relayPacket = packet
|
||||||
sender: message.sender,
|
relayPacket.ttl -= 1
|
||||||
content: message.content,
|
self.broadcastPacket(relayPacket)
|
||||||
timestamp: message.timestamp,
|
|
||||||
isRelay: message.isRelay,
|
|
||||||
originalSender: message.originalSender,
|
|
||||||
isPrivate: message.isPrivate,
|
|
||||||
recipientNickname: message.recipientNickname,
|
|
||||||
senderPeerID: senderID
|
|
||||||
)
|
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
self.delegate?.didReceiveMessage(messageWithPeerID)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if packet.ttl > 0 {
|
} else {
|
||||||
// Relay private messages that aren't for us
|
print("[PRIVATE] No recipient ID in packet")
|
||||||
var relayPacket = packet
|
|
||||||
relayPacket.ttl -= 1
|
|
||||||
self.broadcastPacket(relayPacket)
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
print("[PRIVATE] Failed to decode message from payload")
|
||||||
}
|
}
|
||||||
|
|
||||||
case .voiceNote:
|
case .voiceNote:
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ struct ContentView: View {
|
|||||||
} else {
|
} else {
|
||||||
// Public chat header
|
// Public chat header
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
Text("bitchat")
|
Text("bitchat*")
|
||||||
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
||||||
.foregroundColor(textColor)
|
.foregroundColor(textColor)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user