librats 1.0.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -331
- package/binding.gyp +16 -3
- package/lib/index.d.ts +288 -696
- package/lib/index.js +407 -44
- package/native-src/3rdparty/android/ifaddrs-android.c +1 -0
- package/native-src/3rdparty/android/ifaddrs-android.h +1 -0
- package/native-src/CMakeLists.txt +404 -179
- package/native-src/LICENSE +1 -1
- package/native-src/src/librats/bindings/rats.cpp +762 -0
- package/native-src/src/librats/bindings/rats.h +380 -0
- package/native-src/src/librats/bittorrent/bencode.cpp +437 -0
- package/native-src/src/librats/bittorrent/bencode.h +176 -0
- package/native-src/src/librats/bittorrent/bitfield.cpp +97 -0
- package/native-src/src/librats/bittorrent/bitfield.h +76 -0
- package/native-src/src/librats/bittorrent/byte_io.h +58 -0
- package/native-src/src/librats/bittorrent/choker.cpp +25 -0
- package/native-src/src/librats/bittorrent/choker.h +46 -0
- package/native-src/src/librats/bittorrent/client.cpp +413 -0
- package/native-src/src/librats/bittorrent/client.h +227 -0
- package/native-src/src/librats/bittorrent/disk_io.cpp +209 -0
- package/native-src/src/librats/bittorrent/disk_io.h +150 -0
- package/native-src/src/librats/bittorrent/extensions.cpp +191 -0
- package/native-src/src/librats/bittorrent/extensions.h +94 -0
- package/native-src/src/librats/bittorrent/file_storage.cpp +77 -0
- package/native-src/src/librats/bittorrent/file_storage.h +79 -0
- package/native-src/src/librats/bittorrent/log.h +42 -0
- package/native-src/src/librats/bittorrent/magnet_uri.cpp +98 -0
- package/native-src/src/librats/bittorrent/magnet_uri.h +35 -0
- package/native-src/src/librats/bittorrent/peer_connection.cpp +502 -0
- package/native-src/src/librats/bittorrent/peer_connection.h +194 -0
- package/native-src/src/librats/bittorrent/peer_list.cpp +68 -0
- package/native-src/src/librats/bittorrent/peer_list.h +75 -0
- package/native-src/src/librats/bittorrent/piece_picker.cpp +352 -0
- package/native-src/src/librats/bittorrent/piece_picker.h +201 -0
- package/native-src/src/librats/bittorrent/reactor.cpp +97 -0
- package/native-src/src/librats/bittorrent/reactor.h +89 -0
- package/native-src/src/librats/bittorrent/resume_data.cpp +72 -0
- package/native-src/src/librats/bittorrent/resume_data.h +41 -0
- package/native-src/src/librats/bittorrent/store_buffer.cpp +48 -0
- package/native-src/src/librats/bittorrent/store_buffer.h +47 -0
- package/native-src/src/librats/bittorrent/torrent.cpp +870 -0
- package/native-src/src/librats/bittorrent/torrent.h +260 -0
- package/native-src/src/librats/bittorrent/torrent_creator.cpp +129 -0
- package/native-src/src/librats/bittorrent/torrent_creator.h +58 -0
- package/native-src/src/librats/bittorrent/torrent_info.cpp +314 -0
- package/native-src/src/librats/bittorrent/torrent_info.h +118 -0
- package/native-src/src/librats/bittorrent/tracker.cpp +374 -0
- package/native-src/src/librats/bittorrent/tracker.h +108 -0
- package/native-src/src/librats/bittorrent/types.cpp +206 -0
- package/native-src/src/librats/bittorrent/types.h +86 -0
- package/native-src/src/librats/core/address.cpp +35 -0
- package/native-src/src/librats/core/address.h +78 -0
- package/native-src/src/librats/core/bytes.h +69 -0
- package/native-src/src/librats/core/chained_send_buffer.cpp +172 -0
- package/native-src/src/librats/core/chained_send_buffer.h +183 -0
- package/native-src/src/librats/core/endpoint_parse.cpp +41 -0
- package/native-src/src/librats/core/endpoint_parse.h +31 -0
- package/native-src/src/librats/core/event_bus.h +70 -0
- package/native-src/src/librats/core/host_endpoint.h +56 -0
- package/native-src/src/{io_poller.cpp → librats/core/io_poller.cpp} +520 -65
- package/native-src/src/{io_poller.h → librats/core/io_poller.h} +12 -6
- package/native-src/src/librats/core/ip_address.cpp +120 -0
- package/native-src/src/librats/core/ip_address.h +109 -0
- package/native-src/src/librats/core/mpsc_queue.h +47 -0
- package/native-src/src/librats/core/notifier.h +74 -0
- package/native-src/src/librats/core/receive_buffer.cpp +219 -0
- package/native-src/src/librats/core/receive_buffer.h +171 -0
- package/native-src/src/librats/core/service_registry.h +58 -0
- package/native-src/src/{socket.cpp → librats/core/socket.cpp} +625 -118
- package/native-src/src/librats/core/socket.h +496 -0
- package/native-src/src/librats/core/timer_queue.h +105 -0
- package/native-src/src/librats/core/types.cpp +43 -0
- package/native-src/src/librats/core/types.h +103 -0
- package/native-src/src/librats/core/wakeup_pipe.h +83 -0
- package/native-src/src/{crypto → librats/crypto}/blake2_endian.h +21 -23
- package/native-src/src/{crypto → librats/crypto}/blake2b.c +34 -33
- package/native-src/src/{crypto → librats/crypto}/blake2b.h +7 -6
- package/native-src/src/{crypto → librats/crypto}/blake2s.c +55 -54
- package/native-src/src/{crypto → librats/crypto}/blake2s.h +13 -12
- package/native-src/src/{crypto → librats/crypto}/chacha.c +22 -21
- package/native-src/src/{crypto → librats/crypto}/chacha.h +14 -13
- package/native-src/src/{crypto → librats/crypto}/chachapoly.c +56 -56
- package/native-src/src/{crypto → librats/crypto}/chachapoly.h +24 -17
- package/native-src/src/{crc32.cpp → librats/crypto/crc32.cpp} +1 -1
- package/native-src/src/{crc32.h → librats/crypto/crc32.h} +3 -1
- package/native-src/src/{crypto → librats/crypto}/curve25519.c +6 -4
- package/native-src/src/{crypto → librats/crypto}/curve25519.h +6 -3
- package/native-src/src/librats/crypto/hkdf.c +266 -0
- package/native-src/src/{crypto → librats/crypto}/hkdf.h +19 -19
- package/native-src/src/{noise.cpp → librats/crypto/noise.cpp} +84 -73
- package/native-src/src/{noise.h → librats/crypto/noise.h} +18 -8
- package/native-src/src/{crypto → librats/crypto}/poly1305.c +47 -46
- package/native-src/src/librats/crypto/poly1305.h +37 -0
- package/native-src/src/{sha1.cpp → librats/crypto/sha1.cpp} +33 -1
- package/native-src/src/{sha1.h → librats/crypto/sha1.h} +14 -6
- package/native-src/src/{crypto → librats/crypto}/sha256.c +15 -14
- package/native-src/src/{crypto → librats/crypto}/sha256.h +8 -7
- package/native-src/src/{crypto → librats/crypto}/sha512.c +15 -14
- package/native-src/src/{crypto → librats/crypto}/sha512.h +8 -7
- package/native-src/src/librats/dht/announce.cpp +37 -0
- package/native-src/src/librats/dht/announce.h +41 -0
- package/native-src/src/librats/dht/bep42.cpp +109 -0
- package/native-src/src/librats/dht/bep42.h +48 -0
- package/native-src/src/librats/dht/dht.cpp +501 -0
- package/native-src/src/librats/dht/dht.h +119 -0
- package/native-src/src/librats/dht/dht_runner.cpp +103 -0
- package/native-src/src/librats/dht/dht_runner.h +71 -0
- package/native-src/src/librats/dht/dos_blocker.cpp +42 -0
- package/native-src/src/librats/dht/dos_blocker.h +47 -0
- package/native-src/src/librats/dht/find_peers.cpp +52 -0
- package/native-src/src/librats/dht/find_peers.h +73 -0
- package/native-src/src/librats/dht/id.h +167 -0
- package/native-src/src/{krpc.cpp → librats/dht/krpc.cpp} +32 -81
- package/native-src/src/{krpc.h → librats/dht/krpc.h} +19 -23
- package/native-src/src/librats/dht/log.h +38 -0
- package/native-src/src/librats/dht/node.cpp +473 -0
- package/native-src/src/librats/dht/node.h +164 -0
- package/native-src/src/librats/dht/node_entry.h +81 -0
- package/native-src/src/librats/dht/observer.h +72 -0
- package/native-src/src/librats/dht/persistence.cpp +90 -0
- package/native-src/src/librats/dht/persistence.h +32 -0
- package/native-src/src/librats/dht/routing_table.cpp +559 -0
- package/native-src/src/librats/dht/routing_table.h +185 -0
- package/native-src/src/librats/dht/rpc_manager.cpp +127 -0
- package/native-src/src/librats/dht/rpc_manager.h +77 -0
- package/native-src/src/librats/dht/storage.cpp +92 -0
- package/native-src/src/librats/dht/storage.h +74 -0
- package/native-src/src/librats/dht/transport.h +27 -0
- package/native-src/src/librats/dht/traversal.cpp +326 -0
- package/native-src/src/librats/dht/traversal.h +120 -0
- package/native-src/src/librats/dht/udp_transport.cpp +49 -0
- package/native-src/src/librats/dht/udp_transport.h +51 -0
- package/native-src/src/librats/mdns/log.h +22 -0
- package/native-src/src/{mdns.cpp → librats/mdns/mdns.cpp} +75 -40
- package/native-src/src/{mdns.h → librats/mdns/mdns.h} +9 -8
- package/native-src/src/{natpmp.cpp → librats/nat/natpmp.cpp} +12 -9
- package/native-src/src/{natpmp.h → librats/nat/natpmp.h} +3 -3
- package/native-src/src/{port_mapping.h → librats/nat/port_mapping.h} +3 -2
- package/native-src/src/{stun.cpp → librats/nat/stun.cpp} +4 -4
- package/native-src/src/{stun.h → librats/nat/stun.h} +1 -1
- package/native-src/src/{upnp.cpp → librats/nat/upnp.cpp} +6 -6
- package/native-src/src/{upnp.h → librats/nat/upnp.h} +2 -2
- package/native-src/src/librats/node/circuit_service.h +84 -0
- package/native-src/src/librats/node/config.h +110 -0
- package/native-src/src/librats/node/dial_service.h +54 -0
- package/native-src/src/librats/node/dialer.cpp +264 -0
- package/native-src/src/librats/node/dialer.h +188 -0
- package/native-src/src/librats/node/host_events.h +26 -0
- package/native-src/src/librats/node/identify.cpp +130 -0
- package/native-src/src/librats/node/identify.h +71 -0
- package/native-src/src/librats/node/nat_status.cpp +103 -0
- package/native-src/src/librats/node/nat_status.h +118 -0
- package/native-src/src/librats/node/node.cpp +865 -0
- package/native-src/src/librats/node/node.h +344 -0
- package/native-src/src/librats/node/node_context.h +33 -0
- package/native-src/src/librats/node/peer_network.h +91 -0
- package/native-src/src/librats/peer/peer.h +49 -0
- package/native-src/src/librats/peer/peer_book.cpp +181 -0
- package/native-src/src/librats/peer/peer_book.h +88 -0
- package/native-src/src/librats/peer/peer_id.cpp +72 -0
- package/native-src/src/librats/peer/peer_id.h +62 -0
- package/native-src/src/librats/peer/peer_info.h +37 -0
- package/native-src/src/librats/peer/peer_table.cpp +170 -0
- package/native-src/src/librats/peer/peer_table.h +148 -0
- package/native-src/src/librats/security/handshaker.h +66 -0
- package/native-src/src/librats/security/identity.h +43 -0
- package/native-src/src/librats/security/noise_security.cpp +122 -0
- package/native-src/src/librats/security/noise_security.h +37 -0
- package/native-src/src/librats/security/plaintext_security.h +106 -0
- package/native-src/src/librats/security/session.h +37 -0
- package/native-src/src/{storage.cpp → librats/storage/storage.cpp} +369 -522
- package/native-src/src/{storage.h → librats/storage/storage.h} +135 -299
- package/native-src/src/librats/subsystems/bittorrent.cpp +211 -0
- package/native-src/src/librats/subsystems/bittorrent.h +136 -0
- package/native-src/src/librats/subsystems/dht_discovery.cpp +202 -0
- package/native-src/src/librats/subsystems/dht_discovery.h +123 -0
- package/native-src/src/librats/subsystems/dht_service.h +36 -0
- package/native-src/src/librats/subsystems/file_transfer.cpp +972 -0
- package/native-src/src/librats/subsystems/file_transfer.h +367 -0
- package/native-src/src/librats/subsystems/hole_punch.cpp +605 -0
- package/native-src/src/librats/subsystems/hole_punch.h +290 -0
- package/native-src/src/librats/subsystems/hole_punch_service.h +38 -0
- package/native-src/src/librats/subsystems/mdns_discovery.cpp +66 -0
- package/native-src/src/librats/subsystems/mdns_discovery.h +55 -0
- package/native-src/src/librats/subsystems/message_json.cpp +112 -0
- package/native-src/src/librats/subsystems/message_json.h +88 -0
- package/native-src/src/librats/subsystems/peer_exchange.cpp +241 -0
- package/native-src/src/librats/subsystems/peer_exchange.h +136 -0
- package/native-src/src/librats/subsystems/ping_service.cpp +98 -0
- package/native-src/src/librats/subsystems/ping_service.h +66 -0
- package/native-src/src/librats/subsystems/port_mapping_service.cpp +192 -0
- package/native-src/src/librats/subsystems/port_mapping_service.h +84 -0
- package/native-src/src/librats/subsystems/pubsub.cpp +567 -0
- package/native-src/src/librats/subsystems/pubsub.h +175 -0
- package/native-src/src/librats/subsystems/reconnection.cpp +239 -0
- package/native-src/src/librats/subsystems/reconnection.h +126 -0
- package/native-src/src/librats/subsystems/relay.cpp +1142 -0
- package/native-src/src/librats/subsystems/relay.h +211 -0
- package/native-src/src/librats/subsystems/relay_service.h +46 -0
- package/native-src/src/librats/transport/connection.cpp +343 -0
- package/native-src/src/librats/transport/connection.h +283 -0
- package/native-src/src/librats/transport/link.h +96 -0
- package/native-src/src/librats/transport/reactor.cpp +588 -0
- package/native-src/src/librats/transport/reactor.h +262 -0
- package/native-src/src/librats/transport/reactor_pool.h +81 -0
- package/native-src/src/librats/transport/relay_link.cpp +208 -0
- package/native-src/src/librats/transport/relay_link.h +303 -0
- package/native-src/src/librats/transport/tcp_link.cpp +49 -0
- package/native-src/src/librats/transport/tcp_link.h +43 -0
- package/native-src/src/librats/transport/udp_mux.cpp +617 -0
- package/native-src/src/librats/transport/udp_mux.h +363 -0
- package/native-src/src/librats/transport/udp_packet.cpp +121 -0
- package/native-src/src/librats/transport/udp_packet.h +190 -0
- package/native-src/src/librats/transport/udp_stream.cpp +1194 -0
- package/native-src/src/librats/transport/udp_stream.h +614 -0
- package/native-src/src/librats/util/features.h.in +51 -0
- package/native-src/src/{fs.cpp → librats/util/fs.cpp} +51 -3
- package/native-src/src/librats/util/fs.h +136 -0
- package/native-src/src/librats/util/json.cpp +1002 -0
- package/native-src/src/librats/util/json.h +444 -0
- package/native-src/src/{logger.cpp → librats/util/logger.cpp} +1 -1
- package/native-src/src/{logger.h → librats/util/logger.h} +43 -31
- package/native-src/src/{network_monitor.cpp → librats/util/network_monitor.cpp} +12 -4
- package/native-src/src/{network_monitor.h → librats/util/network_monitor.h} +2 -1
- package/native-src/src/{network_utils.cpp → librats/util/network_utils.cpp} +38 -23
- package/native-src/src/{network_utils.h → librats/util/network_utils.h} +15 -8
- package/native-src/src/{os.cpp → librats/util/os.cpp} +48 -18
- package/native-src/src/librats/util/rats_export.h +69 -0
- package/native-src/src/{version.cpp → librats/util/version.cpp} +2 -2
- package/native-src/src/{version.h.in → librats/util/version.h.in} +1 -1
- package/native-src/src/librats/wire/frame.cpp +76 -0
- package/native-src/src/librats/wire/frame.h +111 -0
- package/native-src/src/librats/wire/message_router.cpp +45 -0
- package/native-src/src/librats/wire/message_router.h +47 -0
- package/package.json +5 -4
- package/scripts/build-librats.js +1 -0
- package/scripts/postinstall.js +3 -3
- package/scripts/prepare-package.js +4 -4
- package/scripts/verify-installation.js +63 -105
- package/src/librats_node.cpp +1067 -1323
- package/native-src/src/bencode.cpp +0 -485
- package/native-src/src/bencode.h +0 -145
- package/native-src/src/bittorrent.cpp +0 -14
- package/native-src/src/bittorrent.h +0 -74
- package/native-src/src/bt_bitfield.cpp +0 -372
- package/native-src/src/bt_bitfield.h +0 -316
- package/native-src/src/bt_choker.cpp +0 -228
- package/native-src/src/bt_choker.h +0 -147
- package/native-src/src/bt_client.cpp +0 -1047
- package/native-src/src/bt_client.h +0 -445
- package/native-src/src/bt_create_torrent.cpp +0 -677
- package/native-src/src/bt_create_torrent.h +0 -473
- package/native-src/src/bt_extension.cpp +0 -469
- package/native-src/src/bt_extension.h +0 -309
- package/native-src/src/bt_file_storage.cpp +0 -261
- package/native-src/src/bt_file_storage.h +0 -298
- package/native-src/src/bt_handshake.cpp +0 -134
- package/native-src/src/bt_handshake.h +0 -157
- package/native-src/src/bt_messages.cpp +0 -364
- package/native-src/src/bt_messages.h +0 -324
- package/native-src/src/bt_network.cpp +0 -1007
- package/native-src/src/bt_network.h +0 -417
- package/native-src/src/bt_peer_connection.cpp +0 -742
- package/native-src/src/bt_peer_connection.h +0 -592
- package/native-src/src/bt_piece_picker.cpp +0 -786
- package/native-src/src/bt_piece_picker.h +0 -473
- package/native-src/src/bt_resume_data.cpp +0 -410
- package/native-src/src/bt_resume_data.h +0 -249
- package/native-src/src/bt_torrent.cpp +0 -2120
- package/native-src/src/bt_torrent.h +0 -641
- package/native-src/src/bt_torrent_info.cpp +0 -659
- package/native-src/src/bt_torrent_info.h +0 -418
- package/native-src/src/bt_types.h +0 -621
- package/native-src/src/chained_send_buffer.cpp +0 -75
- package/native-src/src/chained_send_buffer.h +0 -137
- package/native-src/src/crypto/hkdf.c +0 -266
- package/native-src/src/crypto/poly1305.h +0 -36
- package/native-src/src/dht.cpp +0 -3311
- package/native-src/src/dht.h +0 -717
- package/native-src/src/disk_io.cpp +0 -632
- package/native-src/src/disk_io.h +0 -315
- package/native-src/src/file_transfer.cpp +0 -1415
- package/native-src/src/file_transfer.h +0 -286
- package/native-src/src/fs.h +0 -108
- package/native-src/src/gossipsub.cpp +0 -1139
- package/native-src/src/gossipsub.h +0 -403
- package/native-src/src/ice.cpp +0 -893
- package/native-src/src/ice.h +0 -559
- package/native-src/src/json.hpp +0 -25526
- package/native-src/src/librats.cpp +0 -2378
- package/native-src/src/librats.h +0 -2324
- package/native-src/src/librats_bittorrent.cpp +0 -601
- package/native-src/src/librats_c.cpp +0 -1557
- package/native-src/src/librats_c.h +0 -323
- package/native-src/src/librats_discovery.cpp +0 -402
- package/native-src/src/librats_encryption.cpp +0 -275
- package/native-src/src/librats_file_transfer.cpp +0 -144
- package/native-src/src/librats_gossipsub.cpp +0 -289
- package/native-src/src/librats_ice.cpp +0 -213
- package/native-src/src/librats_log_macros.h +0 -36
- package/native-src/src/librats_logging.cpp +0 -173
- package/native-src/src/librats_mdns.cpp +0 -166
- package/native-src/src/librats_persistence.cpp +0 -796
- package/native-src/src/librats_portmap.cpp +0 -419
- package/native-src/src/librats_reconnection.cpp +0 -218
- package/native-src/src/librats_statistic.cpp +0 -105
- package/native-src/src/librats_storage.cpp +0 -189
- package/native-src/src/rats_export.h +0 -17
- package/native-src/src/receive_buffer.cpp +0 -82
- package/native-src/src/receive_buffer.h +0 -127
- package/native-src/src/socket.h +0 -228
- package/native-src/src/threadmanager.cpp +0 -105
- package/native-src/src/threadmanager.h +0 -53
- package/native-src/src/tracker.cpp +0 -1264
- package/native-src/src/tracker.h +0 -319
- package/native-src/src/turn.cpp +0 -762
- package/native-src/src/turn.h +0 -460
- package/native-src/src/wakeup_pipe.h +0 -60
- /package/native-src/src/{os.h → librats/util/os.h} +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#include "librats.h"
|
|
2
|
-
#include "librats_log_macros.h"
|
|
3
|
-
#include "os.h"
|
|
4
|
-
|
|
5
|
-
namespace librats {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// =========================================================================
|
|
9
|
-
// Statistics and Information
|
|
10
|
-
// =========================================================================
|
|
11
|
-
|
|
12
|
-
nlohmann::json RatsClient::get_connection_statistics() const {
|
|
13
|
-
nlohmann::json stats;
|
|
14
|
-
|
|
15
|
-
{
|
|
16
|
-
std::lock_guard<std::mutex> lock(peers_mutex_);
|
|
17
|
-
stats["total_peers"] = peers_.size();
|
|
18
|
-
stats["validated_peers"] = get_peer_count_unlocked();
|
|
19
|
-
stats["max_peers"] = max_peers_;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
stats["running"] = is_running();
|
|
23
|
-
stats["listen_port"] = listen_port_;
|
|
24
|
-
stats["our_peer_id"] = get_our_peer_id();
|
|
25
|
-
stats["encryption_enabled"] = is_encryption_enabled();
|
|
26
|
-
|
|
27
|
-
// DHT statistics (IPv4 + IPv6 combined)
|
|
28
|
-
if (is_dht_running()) {
|
|
29
|
-
stats["dht_running"] = true;
|
|
30
|
-
stats["dht_routing_table_size"] = get_dht_routing_table_size();
|
|
31
|
-
stats["dht_ipv4_running"] = (dht_client_ && dht_client_->is_running());
|
|
32
|
-
stats["dht_ipv6_running"] = (dht_client_v6_ && dht_client_v6_->is_running());
|
|
33
|
-
if (dht_client_ && dht_client_->is_running()) {
|
|
34
|
-
stats["dht_ipv4_routing_table_size"] = dht_client_->get_routing_table_size();
|
|
35
|
-
}
|
|
36
|
-
if (dht_client_v6_ && dht_client_v6_->is_running()) {
|
|
37
|
-
stats["dht_ipv6_routing_table_size"] = dht_client_v6_->get_routing_table_size();
|
|
38
|
-
}
|
|
39
|
-
} else {
|
|
40
|
-
stats["dht_running"] = false;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// mDNS statistics
|
|
44
|
-
stats["mdns_running"] = is_mdns_running();
|
|
45
|
-
|
|
46
|
-
// Reconnection statistics
|
|
47
|
-
{
|
|
48
|
-
std::lock_guard<std::mutex> lock(reconnect_mutex_);
|
|
49
|
-
stats["reconnect_enabled"] = reconnect_config_.enabled;
|
|
50
|
-
stats["reconnect_queue_size"] = reconnect_queue_.size();
|
|
51
|
-
stats["reconnect_max_attempts"] = reconnect_config_.max_attempts;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return stats;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Cached formatting helpers - computed once on first use
|
|
58
|
-
static const std::string& get_box_separator() {
|
|
59
|
-
static const std::string separator = supports_unicode() ?
|
|
60
|
-
"════════════════════════════════════════════════════════════════════" :
|
|
61
|
-
"=====================================================================";
|
|
62
|
-
return separator;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
static const std::string& get_box_vertical() {
|
|
66
|
-
static const std::string vertical = supports_unicode() ? "│" : "|";
|
|
67
|
-
return vertical;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static const std::string& get_checkmark() {
|
|
71
|
-
static const std::string checkmark = supports_unicode() ? "✓" : "[*]";
|
|
72
|
-
return checkmark;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
void RatsClient::log_handshake_completion_unlocked(const RatsPeer& peer) {
|
|
76
|
-
// Calculate connection duration
|
|
77
|
-
auto now = std::chrono::steady_clock::now();
|
|
78
|
-
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(now - peer.connected_at);
|
|
79
|
-
|
|
80
|
-
// Get current peer count (assumes peers_mutex_ is already locked)
|
|
81
|
-
int current_peer_count = get_peer_count_unlocked();
|
|
82
|
-
|
|
83
|
-
// Create visually appealing log output
|
|
84
|
-
std::string connection_type = peer.is_outgoing ? "OUTGOING" : "INCOMING";
|
|
85
|
-
const std::string& separator = get_box_separator();
|
|
86
|
-
const std::string& vertical = get_box_vertical();
|
|
87
|
-
const std::string& checkmark = get_checkmark();
|
|
88
|
-
|
|
89
|
-
LOG_CLIENT_INFO("");
|
|
90
|
-
LOG_CLIENT_INFO(separator);
|
|
91
|
-
LOG_CLIENT_INFO(checkmark << " HANDSHAKE COMPLETED - NEW PEER CONNECTED");
|
|
92
|
-
LOG_CLIENT_INFO(separator);
|
|
93
|
-
LOG_CLIENT_INFO(vertical << " Peer ID : " << peer.peer_id);
|
|
94
|
-
LOG_CLIENT_INFO(vertical << " Address : " << peer.ip << ":" << peer.port);
|
|
95
|
-
LOG_CLIENT_INFO(vertical << " Connection : " << connection_type);
|
|
96
|
-
LOG_CLIENT_INFO(vertical << " Protocol Ver. : " << peer.version);
|
|
97
|
-
LOG_CLIENT_INFO(vertical << " Socket : " << peer.socket);
|
|
98
|
-
LOG_CLIENT_INFO(vertical << " Duration : " << duration.count() << "ms");
|
|
99
|
-
LOG_CLIENT_INFO(vertical << " Network Peers : " << current_peer_count << "/" << max_peers_);
|
|
100
|
-
|
|
101
|
-
LOG_CLIENT_INFO(separator);
|
|
102
|
-
LOG_CLIENT_INFO("");
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
#include "librats.h"
|
|
2
|
-
|
|
3
|
-
#ifdef RATS_STORAGE
|
|
4
|
-
|
|
5
|
-
#include "storage.h"
|
|
6
|
-
#include "logger.h"
|
|
7
|
-
|
|
8
|
-
namespace librats {
|
|
9
|
-
|
|
10
|
-
//=============================================================================
|
|
11
|
-
// Storage Manager Access
|
|
12
|
-
//=============================================================================
|
|
13
|
-
|
|
14
|
-
StorageManager& RatsClient::get_storage_manager() {
|
|
15
|
-
if (!storage_manager_) {
|
|
16
|
-
// Initialize storage manager on first access
|
|
17
|
-
StorageConfig config;
|
|
18
|
-
config.data_directory = data_directory_.empty() ? "./storage" : data_directory_ + "/storage";
|
|
19
|
-
storage_manager_ = std::make_unique<StorageManager>(*this, config);
|
|
20
|
-
}
|
|
21
|
-
return *storage_manager_;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
bool RatsClient::is_storage_available() const {
|
|
25
|
-
return storage_manager_ != nullptr;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
//=============================================================================
|
|
29
|
-
// Put Operations
|
|
30
|
-
//=============================================================================
|
|
31
|
-
|
|
32
|
-
bool RatsClient::storage_put(const std::string& key, const std::string& value) {
|
|
33
|
-
return get_storage_manager().put(key, value);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
bool RatsClient::storage_put(const std::string& key, int64_t value) {
|
|
37
|
-
return get_storage_manager().put(key, value);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
bool RatsClient::storage_put(const std::string& key, double value) {
|
|
41
|
-
return get_storage_manager().put(key, value);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
bool RatsClient::storage_put(const std::string& key, const std::vector<uint8_t>& value) {
|
|
45
|
-
return get_storage_manager().put(key, value);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
bool RatsClient::storage_put_json(const std::string& key, const nlohmann::json& value) {
|
|
49
|
-
return get_storage_manager().put_json(key, value);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
//=============================================================================
|
|
53
|
-
// Get Operations
|
|
54
|
-
//=============================================================================
|
|
55
|
-
|
|
56
|
-
std::optional<std::string> RatsClient::storage_get_string(const std::string& key) const {
|
|
57
|
-
if (!storage_manager_) {
|
|
58
|
-
return std::nullopt;
|
|
59
|
-
}
|
|
60
|
-
return storage_manager_->get_string(key);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
std::optional<int64_t> RatsClient::storage_get_int(const std::string& key) const {
|
|
64
|
-
if (!storage_manager_) {
|
|
65
|
-
return std::nullopt;
|
|
66
|
-
}
|
|
67
|
-
return storage_manager_->get_int(key);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
std::optional<double> RatsClient::storage_get_double(const std::string& key) const {
|
|
71
|
-
if (!storage_manager_) {
|
|
72
|
-
return std::nullopt;
|
|
73
|
-
}
|
|
74
|
-
return storage_manager_->get_double(key);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
std::optional<std::vector<uint8_t>> RatsClient::storage_get_binary(const std::string& key) const {
|
|
78
|
-
if (!storage_manager_) {
|
|
79
|
-
return std::nullopt;
|
|
80
|
-
}
|
|
81
|
-
return storage_manager_->get_binary(key);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
std::optional<nlohmann::json> RatsClient::storage_get_json(const std::string& key) const {
|
|
85
|
-
if (!storage_manager_) {
|
|
86
|
-
return std::nullopt;
|
|
87
|
-
}
|
|
88
|
-
return storage_manager_->get_json(key);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
//=============================================================================
|
|
92
|
-
// Delete and Query Operations
|
|
93
|
-
//=============================================================================
|
|
94
|
-
|
|
95
|
-
bool RatsClient::storage_delete(const std::string& key) {
|
|
96
|
-
if (!storage_manager_) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
return storage_manager_->remove(key);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
bool RatsClient::storage_has(const std::string& key) const {
|
|
103
|
-
if (!storage_manager_) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
return storage_manager_->has(key);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
std::vector<std::string> RatsClient::storage_keys() const {
|
|
110
|
-
if (!storage_manager_) {
|
|
111
|
-
return {};
|
|
112
|
-
}
|
|
113
|
-
return storage_manager_->keys();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
std::vector<std::string> RatsClient::storage_keys_with_prefix(const std::string& prefix) const {
|
|
117
|
-
if (!storage_manager_) {
|
|
118
|
-
return {};
|
|
119
|
-
}
|
|
120
|
-
return storage_manager_->keys_with_prefix(prefix);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
size_t RatsClient::storage_size() const {
|
|
124
|
-
if (!storage_manager_) {
|
|
125
|
-
return 0;
|
|
126
|
-
}
|
|
127
|
-
return storage_manager_->size();
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
//=============================================================================
|
|
131
|
-
// Synchronization
|
|
132
|
-
//=============================================================================
|
|
133
|
-
|
|
134
|
-
bool RatsClient::storage_request_sync() {
|
|
135
|
-
return get_storage_manager().request_sync();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
bool RatsClient::is_storage_synced() const {
|
|
139
|
-
if (!storage_manager_) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
return storage_manager_->is_synced();
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
//=============================================================================
|
|
146
|
-
// Statistics and Configuration
|
|
147
|
-
//=============================================================================
|
|
148
|
-
|
|
149
|
-
nlohmann::json RatsClient::get_storage_statistics() const {
|
|
150
|
-
if (!storage_manager_) {
|
|
151
|
-
nlohmann::json empty;
|
|
152
|
-
empty["available"] = false;
|
|
153
|
-
return empty;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
nlohmann::json stats = storage_manager_->get_statistics_json();
|
|
157
|
-
stats["available"] = true;
|
|
158
|
-
return stats;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
void RatsClient::set_storage_config(const StorageConfig& config) {
|
|
162
|
-
get_storage_manager().set_config(config);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const StorageConfig& RatsClient::get_storage_config() const {
|
|
166
|
-
// Need to ensure storage manager exists for this call
|
|
167
|
-
// Create a static default config to return if not available
|
|
168
|
-
static StorageConfig default_config;
|
|
169
|
-
if (!storage_manager_) {
|
|
170
|
-
return default_config;
|
|
171
|
-
}
|
|
172
|
-
return storage_manager_->get_config();
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
//=============================================================================
|
|
176
|
-
// Event Handlers
|
|
177
|
-
//=============================================================================
|
|
178
|
-
|
|
179
|
-
void RatsClient::on_storage_change(StorageChangeCallback callback) {
|
|
180
|
-
get_storage_manager().set_change_callback(callback);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
void RatsClient::on_storage_sync_complete(StorageSyncCompleteCallback callback) {
|
|
184
|
-
get_storage_manager().set_sync_complete_callback(callback);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
} // namespace librats
|
|
188
|
-
|
|
189
|
-
#endif // RATS_STORAGE
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#ifdef _WIN32
|
|
4
|
-
#if defined(RATS_EXPORT_DLL)
|
|
5
|
-
#define RATS_API __declspec(dllexport)
|
|
6
|
-
#elif defined(RATS_IMPORT_DLL)
|
|
7
|
-
#define RATS_API __declspec(dllimport)
|
|
8
|
-
#else
|
|
9
|
-
#define RATS_API
|
|
10
|
-
#endif
|
|
11
|
-
#else
|
|
12
|
-
#if __GNUC__ >= 4
|
|
13
|
-
#define RATS_API __attribute__((visibility("default")))
|
|
14
|
-
#else
|
|
15
|
-
#define RATS_API
|
|
16
|
-
#endif
|
|
17
|
-
#endif
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
#include "receive_buffer.h"
|
|
2
|
-
#include <cstring>
|
|
3
|
-
|
|
4
|
-
namespace librats {
|
|
5
|
-
|
|
6
|
-
ReceiveBuffer::ReceiveBuffer(size_t initial_capacity)
|
|
7
|
-
: buffer_(initial_capacity)
|
|
8
|
-
, recv_start_(0)
|
|
9
|
-
, recv_end_(0) {
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
void ReceiveBuffer::received(size_t bytes) {
|
|
13
|
-
recv_end_ += bytes;
|
|
14
|
-
if (recv_end_ > buffer_.size()) {
|
|
15
|
-
recv_end_ = buffer_.size(); // Safety clamp
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
void ReceiveBuffer::ensure_space(size_t bytes) {
|
|
20
|
-
size_t available = buffer_.size() - recv_end_;
|
|
21
|
-
|
|
22
|
-
if (available >= bytes) {
|
|
23
|
-
return; // Already have enough space
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Try normalizing first to reclaim front space
|
|
27
|
-
if (recv_start_ > 0) {
|
|
28
|
-
normalize();
|
|
29
|
-
available = buffer_.size() - recv_end_;
|
|
30
|
-
if (available >= bytes) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Need to grow the buffer
|
|
36
|
-
size_t needed = recv_end_ + bytes;
|
|
37
|
-
size_t new_size = buffer_.size();
|
|
38
|
-
|
|
39
|
-
// Grow by 1.5x or to needed size, whichever is larger
|
|
40
|
-
while (new_size < needed) {
|
|
41
|
-
new_size = new_size * 3 / 2;
|
|
42
|
-
if (new_size < 256) new_size = 256; // Minimum growth
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
buffer_.resize(new_size);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
void ReceiveBuffer::consume(size_t bytes) {
|
|
49
|
-
recv_start_ += bytes;
|
|
50
|
-
if (recv_start_ > recv_end_) {
|
|
51
|
-
recv_start_ = recv_end_; // Safety clamp
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// If buffer is now empty, reset pointers
|
|
55
|
-
if (recv_start_ == recv_end_) {
|
|
56
|
-
recv_start_ = 0;
|
|
57
|
-
recv_end_ = 0;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
void ReceiveBuffer::normalize() {
|
|
62
|
-
if (recv_start_ == 0) {
|
|
63
|
-
return; // Nothing to do
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
size_t data_size = recv_end_ - recv_start_;
|
|
67
|
-
|
|
68
|
-
if (data_size > 0) {
|
|
69
|
-
// Move data to the beginning
|
|
70
|
-
std::memmove(buffer_.data(), buffer_.data() + recv_start_, data_size);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
recv_end_ = data_size;
|
|
74
|
-
recv_start_ = 0;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
void ReceiveBuffer::clear() {
|
|
78
|
-
recv_start_ = 0;
|
|
79
|
-
recv_end_ = 0;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
} // namespace librats
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file receive_buffer.h
|
|
5
|
-
* @brief Efficient receive buffer with O(1) consume operation
|
|
6
|
-
*
|
|
7
|
-
* Unlike std::vector where erase() is O(n), this buffer uses
|
|
8
|
-
* start/end pointers to mark the valid data region. The consume()
|
|
9
|
-
* operation simply advances the start pointer.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
#include <vector>
|
|
13
|
-
#include <cstdint>
|
|
14
|
-
#include <cstddef>
|
|
15
|
-
|
|
16
|
-
namespace librats {
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @brief Efficient receive buffer with O(1) consume operation
|
|
20
|
-
*
|
|
21
|
-
* Unlike std::vector where erase() is O(n), this buffer uses
|
|
22
|
-
* start/end pointers to mark the valid data region. The consume()
|
|
23
|
-
* operation simply advances the start pointer.
|
|
24
|
-
*
|
|
25
|
-
* Periodically call normalize() to compact the buffer and reclaim space.
|
|
26
|
-
*
|
|
27
|
-
* Usage:
|
|
28
|
-
* 1. ensure_space(bytes) - make room for recv()
|
|
29
|
-
* 2. recv(socket, write_ptr(), write_space())
|
|
30
|
-
* 3. received(bytes) - mark bytes as received
|
|
31
|
-
* 4. Process data via data()/size()
|
|
32
|
-
* 5. consume(bytes) - mark bytes as processed
|
|
33
|
-
* 6. normalize() - periodically compact buffer
|
|
34
|
-
*/
|
|
35
|
-
class ReceiveBuffer {
|
|
36
|
-
public:
|
|
37
|
-
/**
|
|
38
|
-
* @brief Create receive buffer with initial capacity
|
|
39
|
-
*/
|
|
40
|
-
explicit ReceiveBuffer(size_t initial_capacity = 4096);
|
|
41
|
-
|
|
42
|
-
//=========================================================================
|
|
43
|
-
// Write interface (for recv())
|
|
44
|
-
//=========================================================================
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @brief Get pointer where new data should be written
|
|
48
|
-
*/
|
|
49
|
-
uint8_t* write_ptr() { return buffer_.data() + recv_end_; }
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @brief Get available space for writing
|
|
53
|
-
*/
|
|
54
|
-
size_t write_space() const { return buffer_.size() - recv_end_; }
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @brief Mark bytes as received (after successful recv())
|
|
58
|
-
*/
|
|
59
|
-
void received(size_t bytes);
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* @brief Ensure at least 'bytes' space is available for writing
|
|
63
|
-
*
|
|
64
|
-
* May reallocate or normalize the buffer.
|
|
65
|
-
*/
|
|
66
|
-
void ensure_space(size_t bytes);
|
|
67
|
-
|
|
68
|
-
//=========================================================================
|
|
69
|
-
// Read interface (for parsing)
|
|
70
|
-
//=========================================================================
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* @brief Get pointer to unprocessed data
|
|
74
|
-
*/
|
|
75
|
-
const uint8_t* data() const { return buffer_.data() + recv_start_; }
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* @brief Get size of unprocessed data
|
|
79
|
-
*/
|
|
80
|
-
size_t size() const { return recv_end_ - recv_start_; }
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @brief Check if buffer has no unprocessed data
|
|
84
|
-
*/
|
|
85
|
-
bool empty() const { return recv_start_ == recv_end_; }
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* @brief Mark bytes as consumed/processed - O(1) operation!
|
|
89
|
-
*
|
|
90
|
-
* This is the key advantage over vector::erase().
|
|
91
|
-
*/
|
|
92
|
-
void consume(size_t bytes);
|
|
93
|
-
|
|
94
|
-
//=========================================================================
|
|
95
|
-
// Buffer management
|
|
96
|
-
//=========================================================================
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @brief Compact buffer by moving data to the beginning
|
|
100
|
-
*
|
|
101
|
-
* Call this periodically to reclaim space at the front.
|
|
102
|
-
* This is O(n) but should be called infrequently.
|
|
103
|
-
*/
|
|
104
|
-
void normalize();
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* @brief Clear all data
|
|
108
|
-
*/
|
|
109
|
-
void clear();
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @brief Get total buffer capacity
|
|
113
|
-
*/
|
|
114
|
-
size_t capacity() const { return buffer_.size(); }
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* @brief Get wasted space at the front (for diagnostics)
|
|
118
|
-
*/
|
|
119
|
-
size_t front_waste() const { return recv_start_; }
|
|
120
|
-
|
|
121
|
-
private:
|
|
122
|
-
std::vector<uint8_t> buffer_;
|
|
123
|
-
size_t recv_start_ = 0; ///< Start of unprocessed data
|
|
124
|
-
size_t recv_end_ = 0; ///< End of received data (write position)
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
} // namespace librats
|