mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 03:25:19 +00:00
Periphery 3.7.4 audit of both schemes (macOS + iOS, intersected so platform-specific code is never touched), with test targets indexed and the share extension built. 277 dead declarations removed or demoted: dead forwarding wrappers (ChatViewModel+Nostr/+PrivateChat), removed- feature remnants (autocomplete command suggestions, back-swipe tuning, MediaSendError, GeohashParticipantTracker), unused Tor dormancy bindings, assign-only properties, unused parameters (renamed to _), and redundant public accessibility. 13 orphaned localization keys deleted across all 29 locales (old pre-#1392 location-notes UI, app_info warnings). Two real tests were flagged as unused because they never ran: Swift Testing methods missing @Test (NostrProtocolTests. testAckRoundTripNIP44V2_Delivered, NotificationStreamAssemblerTests. testAssemblesCompressedLargeFrame). Re-armed both; they pass. Deliberately kept, now recorded in .periphery.baseline.json: iOS-only code invisible to the CI macOS scan, C FFI signatures, keep-alive NWPathMonitor reference, InboundEventKey.eventID (dedup semantics), wifiBulk capability bit (reserved for Wi-Fi bulk work, used by BitFoundation package tests), and the String secureClear cluster (exercised by package tests). New: .periphery.yml config and an advisory Dead Code CI job (mirrors the SwiftLint precedent from #1361) that fails on findings not in the committed baseline. Verified: full macOS app suite, BitFoundation (119) and BitLogger (13) package tests green; periphery scan --strict exits clean. Co-authored-by: jack <jackjackbits@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
47 lines
1.7 KiB
Swift
47 lines
1.7 KiB
Swift
import BitFoundation
|
|
import Foundation
|
|
|
|
enum BLEOutboundPacketPolicy {
|
|
private static let fragmentFrameOverhead = 13 + 8 + 8 + 13
|
|
|
|
static func messageID(for packet: BitchatPacket) -> String {
|
|
BLEIngressLinkRegistry.messageID(for: packet)
|
|
}
|
|
|
|
static func padsBLEFrame(for packetType: UInt8) -> Bool {
|
|
switch MessageType(rawValue: packetType) {
|
|
case .noiseEncrypted, .noiseHandshake:
|
|
return true
|
|
// voiceFrame is deliberately unpadded: padding to the 512 block would
|
|
// push every ~490-byte signed voice packet over the MTU into the
|
|
// fragment path.
|
|
case .none, .announce, .message, .leave, .requestSync, .fragment, .fileTransfer, .courierEnvelope, .boardPost, .ping, .pong, .nostrCarrier, .prekeyBundle, .groupMessage, .voiceFrame:
|
|
return false
|
|
}
|
|
}
|
|
|
|
static func priority(for packet: BitchatPacket, data _: Data) -> BLEOutboundWritePriority {
|
|
guard let messageType = MessageType(rawValue: packet.type) else { return .low }
|
|
switch messageType {
|
|
case .fragment:
|
|
return .fragment(totalFragments: fragmentTotalCount(from: packet.payload))
|
|
case .fileTransfer:
|
|
return .fileTransfer
|
|
default:
|
|
return .high
|
|
}
|
|
}
|
|
|
|
static func fragmentChunkSize(forLinkLimit limit: Int) -> Int {
|
|
max(64, limit - fragmentFrameOverhead)
|
|
}
|
|
|
|
private static func fragmentTotalCount(from payload: Data) -> Int {
|
|
guard payload.count >= 12 else { return Int(UInt16.max) }
|
|
let totalHigh = Int(payload[10])
|
|
let totalLow = Int(payload[11])
|
|
let total = (totalHigh << 8) | totalLow
|
|
return max(total, 1)
|
|
}
|
|
}
|