Commit Graph
43 Commits
Author SHA1 Message Date
callebtcandGitHub 1178fc254a remove the noise handshake if peer goes offline (#435) 2025-09-15 15:33:39 +02:00
callebtcandGitHub 73c91b9509 Plumtree sync (#393)
* wip plumtree

* sync works

* fix logging

* ttl to 0

* fix send packet to one peer

* spec

* wip GCS instead of bloom

* remove bloom filter remainders

* clean

* prune old announcements

* remove announcements from sync after LEAVE

* sync after 1 second

* pruning

* track own announcement and prune messages without announcements

* fix pruning

* getGcsMaxFilterBytes default value 400 bytes

* parameters
2025-09-14 03:32:10 +02:00
callebtcandGitHub 3967ef8922 peerid computed from noise fingerprint (#413) 2025-09-13 16:43:06 +02:00
callebtcandGitHub c1e56188d6 Revert "Mesh gossip (#381)" (#394)
This reverts commit 0969c0641e.
2025-09-08 15:15:54 +02:00
callebtcandGitHub 0969c0641e Mesh gossip (#381)
* wip mesh graph

* gossip fix

* gossip works

* source-based routing wip

* log
2025-09-08 15:15:32 +02:00
callebtcandGitHub 998ee606b1 Nostr refactor simplify (#390)
* fix bug

* geoDM receive works, send doesnt, and incoming message doesnt make sender appear in peer list

* fix nostr dm

* geohash dms work

* Geohash DM UI: stop mixing Nostr DM temp chats into mesh offline list; ensure geohash DM senders are added to geohash people list only. Removed nostr_* sidebar append in PeopleSection; kept 64-hex mesh offline favorites. Verified build.

* refactor

* nice

* works

* merging nostr -> mesh works

* tripple click to delete all

* fix sidebar icon

* remove hash

* dms have correct recipient

* works

* wip unread badge

* geohash dms wip

* dms work
2025-09-08 13:46:15 +02:00
callebtcandGitHub f47819a31e Debug button (#377)
* feat(debug): add DebugSettingsManager + DebugSettingsSheet scaffold and AboutSheet entry; groundwork for verbose logging, GATT controls, relay stats, device/scan views

* fix(debug): wire debug sheet launch via onShowDebug in AboutSheet from ChatScreen; add public start/stop server/client methods}

* fix(about): remove misplaced debug item block inside PoW section; keep debug launcher managed by ChatScreen only

* feat(debug): wire DebugSettingsSheet role switches to explicit startServer/stopServer and startClient/stopClient; expose role controls + disconnectAll on BluetoothConnectionManager; fix syntax error; build passes

* feat(debug): add connect/disconnect helpers; wire DebugSettingsSheet connect/disconnect actions to BluetoothConnectionManager

* feat(debug): add debug settings button at bottom of AboutSheet; wire onShowDebug callback to open DebugSettingsSheet from ChatScreen

* feat(debug): wire verbose logging into chat view via DebugSettingsManager; add rolling relay stats; push connected devices and scan results; ensure GATT role stop closes connections; log incoming packets and relay events; add UI polling for devices; build passes

* chore(debug-branch): remove unrelated files that were mistakenly added in first commit; keep only intended debug settings changes

* fix(chat): prevent mesh→geohash leak

Root cause:
- DebugSettingsManager→chat bridge appended system logs to the global timeline regardless of active channel
- MeshDelegateHandler added public mesh messages to UI unconditionally

Fixes:
- Only inject debug system messages when selected location channel is Mesh
- Only add public mesh messages to UI when Mesh is selected (still send notifications)

Build: ./gradlew assembleDebug
}

* fix(timeline): restore message persistence across channel switches

Root cause:
- NostrGeohashService.switchLocationChannel() called messageManager.clearMessages()
  which wiped ALL messages (mesh + debug + geohash) from main timeline
- Geohash events were adding to main timeline, causing cross-contamination

Fixes:
- Remove messageManager.clearMessages() from channel switching
- ChatScreen displayMessages now routes to separate storage:
  - Mesh: messages (main timeline, includes debug logs when Mesh selected)
  - Geohash: viewModel.getGeohashMessages(geohash) from separate history
  - Private: privateChats[peerID]
  - Channels: channelMessages[channel]
- Geohash events no longer add to main timeline, only to geohash history
- Mesh messages always stored to preserve history when switching away

Result: Each chat type has persistent separate storage, no message loss

* Debug/relay logs: use MessageType names; include device route in verbose packet logs.

* Verbose device-peer assignment and connection/disconnection logs with peerId, deviceId, nickname; packet relay log uses MessageType names.}

* Debug logs API: include nickname and deviceId for incoming/relay; update callers.}

* Fix compile: import MessageType; correct debug manager API usage and remove stray insertion; build.}

* Respect relay toggle; helper to log relay with deviceId.}

* PacketRelayManager: add relay toggle and unified logging helper; clean file header comments; build fixes.}

* changes

* Geohash local echo: do not add to mesh timeline; rely on geohash history and ChatScreen display for location channels.

* persisting

* persist debug settings

* gitignore

* gatt server / client controls

* debugger

* max connection settings and graph

* more graph

* better logging

* refactor logging
2025-09-05 15:40:39 +02:00
callebtcandGitHub 8b3dc71dc6 Refactors cleanup (#372)
* cleanup peermanager

* cleanup geohash code

* direct connections fix

* pow display

* track disconnects too

* display pow only if enabled

* display pow only if enabled

* direct connection tracking
2025-09-02 22:09:44 +02:00
callebtcandGitHub 33b5814b7a Sign mesh message (#353)
* sign BLE packets

* fix x
2025-08-30 12:45:36 +02:00
47c40fb9f3 fix nip-17 (#305)
* NIP-59 stuff

* nip-17 ios to androing works, android to ios still wip

* fix impl

* ios compat

* default relays for DMs

* delivery ack works

* delivery ack

---------

Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
2025-08-24 19:06:29 +02:00
callebtcandGitHub 7243d841a3 Nostr geohash (#276)
* first nostr build

* add test file

* internet access

* fix relay manager

* fix serialization

* demo service - remove later

* fix nostr

* event dedupe

* dedupe

* ui wip

* can send messages

* subscription works

* works

* favs

* works

* delete chat on change

* fix mentions

* remove autojoin channels

* styling

* adjust colors

* ui changes

* live updates working

* use local timestamp

* message history in background

* robust

* fixes

* nicknames refresh optimization

* nostr service

* refactor nostr

* style

* geohash works

* centralize colors

* refactoring

* disable DMs for now: click on peer nickname doesnt open chat list in geohash mode

* use local time

* less logging

* robustness

* scroll nickname

* adjust some text
2025-08-22 19:09:18 +02:00
callebtcandGitHub c5a3368b9f Sign announcements (#267)
* wip

* announcements WIP

* works

* restore mainnet
2025-08-20 13:24:52 +02:00
callebtcandGitHub 9795e2ce8a Changes bitchat protocol (#265)
* create payload

* compiles and can send messages

* identityannouncement

* DMs work, read receipt not sent yet

* works

* delete old code

* simplify

* working

* fragment wip

* compression wip

* use zlib compression

* clean

* nice

* mesh

* remove comments
2025-08-18 21:16:27 +02:00
lollerfirstandGitHub 72af724588 add sendPeriodicBroadcastAnnounce to startServices (#243) 2025-08-11 19:45:15 +02:00
callebtcandGitHub 67c91b0559 remove system messages for connect / disconnect (#241)
* remove system messages for connect / disconnect

* fix tests
2025-08-07 11:58:06 +03:00
callebtcandGitHub 4d0419c536 Touches (#205)
* touch

* increase TTL of announcements

* ui touches
2025-07-31 06:28:31 +02:00
callebtcandGitHub 4cb5932fd0 improve identity announcements (#198)
* improve identity announcements

* touches

* signing noise id

* panic mode delete signing key
2025-07-31 06:26:41 +02:00
callebtcandGitHub c9aba00478 Dm header icons reactive (#190)
* header reactive to noise session

* favorite button reactive

* icon change

* nice
2025-07-25 19:50:40 +02:00
callebtcandGitHub 34b3d8dd82 Init handshake on dm (#187)
* kinda working

* establish handshake if not done yet

* add handshakerequest packet

* read receipt
2025-07-25 19:11:45 +02:00
callebtcandGitHub 565e4ab33c Fix delivery acks and read receipts (#186)
* delivery ack and read receipt

* handle deliveryack

* fix uppercase id

* fix read receipts too
2025-07-25 17:54:12 +02:00
callebtcandGitHub 534be7e613 Refactor fingerprint manager (#185)
* centralized fingerprint manager

* centralized fingerprintmanager

* update fingerprint only if no collision
2025-07-25 15:43:19 +02:00
callebtcandGitHub 9b7009137c Handle only packets addressed to me (#184)
* skip private packets not to us

* logs
2025-07-25 02:32:36 +02:00
callebtcandGitHub 167237f7c0 Centralized relay manager (#182)
* noise: send nonce

* broadcast manager

* add missing file
2025-07-25 01:46:27 +02:00
callebtcandGitHub bc14b9f179 Periodidc broadcast announce (#183)
* noise: send nonce

* periodidc broadcast announce
2025-07-25 01:38:53 +02:00
callebtcandGitHub c3c395832c Implement Noise XX Handshake Protocol for Direct Messages (#180)
* noise

* works?

* noise

* temporary

* better

* wip: use subnet

* better

* barely working

* werk

* subnet

* fix peer ID

* 8 byte peer ID

* wip noise

* wip fixes for noise

* std lib for noise

* noise handshake one step further

* buffers

* use fork

* fix imports

* simplify counter

* remove trash

* hashing

* no prologue

* nice

* wip, use noise encryption

* peer ID hex

* simplify session manager

* heavy logging

* use singleton

* Fix Noise session race condition with elegant per-peer actor serialization

- Use Kotlin coroutine actors for per-peer packet processing
- Each peer gets dedicated actor that processes packets sequentially
- Eliminates race conditions in session management without complex locking
- Single surgical change in PacketProcessor - minimal, maintainable
- Leverages Kotlin's native concurrency primitives

* decrypt correctly

* iniator works now

* clean code and fix signature to null

* better

* no signature in private message

* small fixes

* refactor ack

* refactor but untested

* messages working

* wip ack

* wip fix ack

* more logging

* pending tracker

* keep pending connections on errors

* less logging

* refactor model

* refactor frombinarydata

* idendityannouncement refactor and update to new binary protocol

* fix keys

* refix keys

* dms work

* revert to mainnet

* do not change bluetooth adapter name

* keep code but uncomment

* clean up comments

* cleanup comments
2025-07-24 12:01:46 +02:00
callebtc 193918d81a track rssi correctly 2025-07-14 00:13:45 +02:00
callebtc f9a639af2d Merge branch 'main' into fix/android-ios-fragmentation-compatibility 2025-07-13 23:18:00 +02:00
callebtc 0e2614d3eb fix build 2025-07-13 22:52:50 +02:00
callebtc 362f9b0ff2 log 2025-07-13 22:39:41 +02:00
callebtc cac3b9ec6c better logging of device id 2025-07-13 22:18:31 +02:00
callebtcandGitHub d25d3bf991 Merge branch 'main' into fix/android-ios-fragmentation-compatibility 2025-07-13 21:25:11 +02:00
callebtc 887ca0119e Merge branch 'main' into adjust-scan-intervals 2025-07-13 19:43:58 +02:00
callebtc 2cf6bf19b1 Merge branch 'main' into routingOpt 2025-07-13 17:20:49 +02:00
callebtc 2a0f84b53b adjust scan intervals and reduce logging 2025-07-13 17:16:31 +02:00
callebtc 035273011f fix startup 2025-07-12 15:42:37 +02:00
GUVWAF d1085fde0b Cheap routing optimizations
- Don't relay back to sender or relayer
- Only send to connected device if recipientID matches one
- Don't relay our own ACK/read receipt
2025-07-12 13:18:09 +02:00
callebtc e58cf4fd0d fix null pointer 2025-07-12 12:53:01 +02:00
ShilohEye 33d273f268 Fix Android fragmentation for iOS/Rust compatibility
- Changed MAX_FRAGMENT_SIZE from 500 to 150 bytes to match iOS/Rust
- Fixed fragment ID generation to use 8 random bytes instead of string
- Implemented automatic fragmentation in BluetoothConnectionManager
- Added 20ms delay between fragments to match iOS/Rust implementation
- Updated fragment calculation to account for full packet overhead (34 bytes)

This ensures Android-generated fragments fit within iOS's default 185-byte BLE MTU,
fixing issues with commands like ?ls -la and ?ifconfig failing on iOS devices.
2025-07-10 19:25:52 -04:00
callebtc b6f281275a fixed 2025-07-09 21:51:04 +02:00
callebtc dd8aa083b9 power saving 2025-07-09 15:47:54 +02:00
callebtc d962ed8ccb logging 2025-07-09 15:04:43 +02:00
callebtc 849b0845c4 MAJOR REFACTOR: Replace monolithic BluetoothMeshService with component-based architecture
 SUCCESSFULLY REFACTORED BluetoothMeshService.kt:
- Original: ~1000+ lines monolithic service
- New: 522 lines coordinator + 7 focused components

🏗️ ARCHITECTURE:
- **BluetoothMeshService**: Main coordinator (522 lines)
- **PeerManager**: Lifecycle & RSSI tracking (161 lines)
- **FragmentManager**: Message fragmentation (194 lines)
- **SecurityManager**: Security & encryption (236 lines)
- **StoreForwardManager**: Offline caching (295 lines)
- **MessageHandler**: Message processing (284 lines)
- **BluetoothConnectionManager**: BLE operations (611 lines)
- **PacketProcessor**: Packet routing (108 lines)

 MAINTAINED COMPATIBILITY:
- Exact same public API (ChatViewModel unchanged)
- 100% iOS protocol compatibility
- Same UUIDs, packet format, timing
- All existing functionality preserved

🎯 BENEFITS ACHIEVED:
- Better separation of concerns
- Easier unit testing (each component isolated)
- Improved maintainability and debugging
- Cleaner code structure
- Future extensibility

 BUILD STATUS: Compiles successfully with zero errors!
2025-07-08 23:46:59 +02:00
callebtc d6a4e122b4 init 2025-07-08 20:37:46 +02:00