librats 1.0.2 → 2.1.4

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.
Files changed (313) hide show
  1. package/README.md +137 -332
  2. package/binding.gyp +16 -3
  3. package/lib/index.d.ts +271 -696
  4. package/lib/index.js +383 -44
  5. package/native-src/3rdparty/android/ifaddrs-android.c +1 -0
  6. package/native-src/3rdparty/android/ifaddrs-android.h +1 -0
  7. package/native-src/CMakeLists.txt +396 -179
  8. package/native-src/LICENSE +1 -1
  9. package/native-src/src/librats/bindings/rats.cpp +731 -0
  10. package/native-src/src/librats/bindings/rats.h +352 -0
  11. package/native-src/src/librats/bittorrent/bencode.cpp +437 -0
  12. package/native-src/src/librats/bittorrent/bencode.h +176 -0
  13. package/native-src/src/librats/bittorrent/bitfield.cpp +97 -0
  14. package/native-src/src/librats/bittorrent/bitfield.h +76 -0
  15. package/native-src/src/librats/bittorrent/byte_io.h +58 -0
  16. package/native-src/src/librats/bittorrent/choker.cpp +25 -0
  17. package/native-src/src/librats/bittorrent/choker.h +46 -0
  18. package/native-src/src/librats/bittorrent/client.cpp +413 -0
  19. package/native-src/src/librats/bittorrent/client.h +227 -0
  20. package/native-src/src/librats/bittorrent/disk_io.cpp +209 -0
  21. package/native-src/src/librats/bittorrent/disk_io.h +150 -0
  22. package/native-src/src/librats/bittorrent/extensions.cpp +191 -0
  23. package/native-src/src/librats/bittorrent/extensions.h +94 -0
  24. package/native-src/src/librats/bittorrent/file_storage.cpp +77 -0
  25. package/native-src/src/librats/bittorrent/file_storage.h +79 -0
  26. package/native-src/src/librats/bittorrent/log.h +42 -0
  27. package/native-src/src/librats/bittorrent/magnet_uri.cpp +98 -0
  28. package/native-src/src/librats/bittorrent/magnet_uri.h +35 -0
  29. package/native-src/src/librats/bittorrent/peer_connection.cpp +502 -0
  30. package/native-src/src/librats/bittorrent/peer_connection.h +194 -0
  31. package/native-src/src/librats/bittorrent/peer_list.cpp +68 -0
  32. package/native-src/src/librats/bittorrent/peer_list.h +75 -0
  33. package/native-src/src/librats/bittorrent/piece_picker.cpp +352 -0
  34. package/native-src/src/librats/bittorrent/piece_picker.h +201 -0
  35. package/native-src/src/librats/bittorrent/reactor.cpp +97 -0
  36. package/native-src/src/librats/bittorrent/reactor.h +89 -0
  37. package/native-src/src/librats/bittorrent/resume_data.cpp +72 -0
  38. package/native-src/src/librats/bittorrent/resume_data.h +41 -0
  39. package/native-src/src/librats/bittorrent/store_buffer.cpp +48 -0
  40. package/native-src/src/librats/bittorrent/store_buffer.h +47 -0
  41. package/native-src/src/librats/bittorrent/torrent.cpp +870 -0
  42. package/native-src/src/librats/bittorrent/torrent.h +260 -0
  43. package/native-src/src/librats/bittorrent/torrent_creator.cpp +129 -0
  44. package/native-src/src/librats/bittorrent/torrent_creator.h +58 -0
  45. package/native-src/src/librats/bittorrent/torrent_info.cpp +314 -0
  46. package/native-src/src/librats/bittorrent/torrent_info.h +118 -0
  47. package/native-src/src/librats/bittorrent/tracker.cpp +374 -0
  48. package/native-src/src/librats/bittorrent/tracker.h +108 -0
  49. package/native-src/src/librats/bittorrent/types.cpp +206 -0
  50. package/native-src/src/librats/bittorrent/types.h +86 -0
  51. package/native-src/src/librats/core/address.cpp +35 -0
  52. package/native-src/src/librats/core/address.h +78 -0
  53. package/native-src/src/librats/core/bytes.h +69 -0
  54. package/native-src/src/librats/core/chained_send_buffer.cpp +172 -0
  55. package/native-src/src/librats/core/chained_send_buffer.h +183 -0
  56. package/native-src/src/librats/core/endpoint_parse.cpp +41 -0
  57. package/native-src/src/librats/core/endpoint_parse.h +31 -0
  58. package/native-src/src/librats/core/event_bus.h +70 -0
  59. package/native-src/src/librats/core/host_endpoint.h +56 -0
  60. package/native-src/src/{io_poller.cpp → librats/core/io_poller.cpp} +520 -65
  61. package/native-src/src/{io_poller.h → librats/core/io_poller.h} +12 -6
  62. package/native-src/src/librats/core/ip_address.cpp +120 -0
  63. package/native-src/src/librats/core/ip_address.h +109 -0
  64. package/native-src/src/librats/core/mpsc_queue.h +47 -0
  65. package/native-src/src/librats/core/notifier.h +74 -0
  66. package/native-src/src/librats/core/receive_buffer.cpp +219 -0
  67. package/native-src/src/librats/core/receive_buffer.h +171 -0
  68. package/native-src/src/librats/core/service_registry.h +58 -0
  69. package/native-src/src/{socket.cpp → librats/core/socket.cpp} +625 -118
  70. package/native-src/src/librats/core/socket.h +496 -0
  71. package/native-src/src/librats/core/timer_queue.h +105 -0
  72. package/native-src/src/librats/core/types.cpp +42 -0
  73. package/native-src/src/librats/core/types.h +93 -0
  74. package/native-src/src/librats/core/wakeup_pipe.h +83 -0
  75. package/native-src/src/{crypto → librats/crypto}/blake2_endian.h +21 -23
  76. package/native-src/src/{crypto → librats/crypto}/blake2b.c +34 -33
  77. package/native-src/src/{crypto → librats/crypto}/blake2b.h +7 -6
  78. package/native-src/src/{crypto → librats/crypto}/blake2s.c +55 -54
  79. package/native-src/src/{crypto → librats/crypto}/blake2s.h +13 -12
  80. package/native-src/src/{crypto → librats/crypto}/chacha.c +22 -21
  81. package/native-src/src/{crypto → librats/crypto}/chacha.h +14 -13
  82. package/native-src/src/{crypto → librats/crypto}/chachapoly.c +56 -56
  83. package/native-src/src/{crypto → librats/crypto}/chachapoly.h +24 -17
  84. package/native-src/src/{crc32.cpp → librats/crypto/crc32.cpp} +1 -1
  85. package/native-src/src/{crc32.h → librats/crypto/crc32.h} +3 -1
  86. package/native-src/src/{crypto → librats/crypto}/curve25519.c +6 -4
  87. package/native-src/src/{crypto → librats/crypto}/curve25519.h +6 -3
  88. package/native-src/src/librats/crypto/hkdf.c +266 -0
  89. package/native-src/src/{crypto → librats/crypto}/hkdf.h +19 -19
  90. package/native-src/src/{noise.cpp → librats/crypto/noise.cpp} +84 -73
  91. package/native-src/src/{noise.h → librats/crypto/noise.h} +18 -8
  92. package/native-src/src/{crypto → librats/crypto}/poly1305.c +47 -46
  93. package/native-src/src/librats/crypto/poly1305.h +37 -0
  94. package/native-src/src/{sha1.cpp → librats/crypto/sha1.cpp} +33 -1
  95. package/native-src/src/{sha1.h → librats/crypto/sha1.h} +14 -6
  96. package/native-src/src/{crypto → librats/crypto}/sha256.c +15 -14
  97. package/native-src/src/{crypto → librats/crypto}/sha256.h +8 -7
  98. package/native-src/src/{crypto → librats/crypto}/sha512.c +15 -14
  99. package/native-src/src/{crypto → librats/crypto}/sha512.h +8 -7
  100. package/native-src/src/librats/dht/announce.cpp +37 -0
  101. package/native-src/src/librats/dht/announce.h +41 -0
  102. package/native-src/src/librats/dht/bep42.cpp +109 -0
  103. package/native-src/src/librats/dht/bep42.h +48 -0
  104. package/native-src/src/librats/dht/dht.cpp +501 -0
  105. package/native-src/src/librats/dht/dht.h +119 -0
  106. package/native-src/src/librats/dht/dht_runner.cpp +103 -0
  107. package/native-src/src/librats/dht/dht_runner.h +71 -0
  108. package/native-src/src/librats/dht/dos_blocker.cpp +42 -0
  109. package/native-src/src/librats/dht/dos_blocker.h +47 -0
  110. package/native-src/src/librats/dht/find_peers.cpp +52 -0
  111. package/native-src/src/librats/dht/find_peers.h +73 -0
  112. package/native-src/src/librats/dht/id.h +167 -0
  113. package/native-src/src/{krpc.cpp → librats/dht/krpc.cpp} +32 -81
  114. package/native-src/src/{krpc.h → librats/dht/krpc.h} +19 -23
  115. package/native-src/src/librats/dht/log.h +38 -0
  116. package/native-src/src/librats/dht/node.cpp +473 -0
  117. package/native-src/src/librats/dht/node.h +164 -0
  118. package/native-src/src/librats/dht/node_entry.h +81 -0
  119. package/native-src/src/librats/dht/observer.h +72 -0
  120. package/native-src/src/librats/dht/persistence.cpp +90 -0
  121. package/native-src/src/librats/dht/persistence.h +32 -0
  122. package/native-src/src/librats/dht/routing_table.cpp +559 -0
  123. package/native-src/src/librats/dht/routing_table.h +185 -0
  124. package/native-src/src/librats/dht/rpc_manager.cpp +127 -0
  125. package/native-src/src/librats/dht/rpc_manager.h +77 -0
  126. package/native-src/src/librats/dht/storage.cpp +92 -0
  127. package/native-src/src/librats/dht/storage.h +74 -0
  128. package/native-src/src/librats/dht/transport.h +27 -0
  129. package/native-src/src/librats/dht/traversal.cpp +326 -0
  130. package/native-src/src/librats/dht/traversal.h +120 -0
  131. package/native-src/src/librats/dht/udp_transport.cpp +49 -0
  132. package/native-src/src/librats/dht/udp_transport.h +51 -0
  133. package/native-src/src/librats/mdns/log.h +22 -0
  134. package/native-src/src/{mdns.cpp → librats/mdns/mdns.cpp} +75 -40
  135. package/native-src/src/{mdns.h → librats/mdns/mdns.h} +9 -8
  136. package/native-src/src/{natpmp.cpp → librats/nat/natpmp.cpp} +12 -9
  137. package/native-src/src/{natpmp.h → librats/nat/natpmp.h} +3 -3
  138. package/native-src/src/{port_mapping.h → librats/nat/port_mapping.h} +3 -2
  139. package/native-src/src/{stun.cpp → librats/nat/stun.cpp} +4 -4
  140. package/native-src/src/{stun.h → librats/nat/stun.h} +1 -1
  141. package/native-src/src/{upnp.cpp → librats/nat/upnp.cpp} +6 -6
  142. package/native-src/src/{upnp.h → librats/nat/upnp.h} +2 -2
  143. package/native-src/src/librats/node/config.h +110 -0
  144. package/native-src/src/librats/node/dial_service.h +54 -0
  145. package/native-src/src/librats/node/dialer.cpp +264 -0
  146. package/native-src/src/librats/node/dialer.h +188 -0
  147. package/native-src/src/librats/node/host_events.h +26 -0
  148. package/native-src/src/librats/node/identify.cpp +130 -0
  149. package/native-src/src/librats/node/identify.h +71 -0
  150. package/native-src/src/librats/node/nat_status.cpp +103 -0
  151. package/native-src/src/librats/node/nat_status.h +118 -0
  152. package/native-src/src/librats/node/node.cpp +826 -0
  153. package/native-src/src/librats/node/node.h +333 -0
  154. package/native-src/src/librats/node/node_context.h +33 -0
  155. package/native-src/src/librats/node/peer_network.h +91 -0
  156. package/native-src/src/librats/peer/peer.h +49 -0
  157. package/native-src/src/librats/peer/peer_book.cpp +181 -0
  158. package/native-src/src/librats/peer/peer_book.h +88 -0
  159. package/native-src/src/librats/peer/peer_id.cpp +72 -0
  160. package/native-src/src/librats/peer/peer_id.h +62 -0
  161. package/native-src/src/librats/peer/peer_info.h +37 -0
  162. package/native-src/src/librats/peer/peer_table.cpp +137 -0
  163. package/native-src/src/librats/peer/peer_table.h +148 -0
  164. package/native-src/src/librats/security/handshaker.h +66 -0
  165. package/native-src/src/librats/security/identity.h +43 -0
  166. package/native-src/src/librats/security/noise_security.cpp +122 -0
  167. package/native-src/src/librats/security/noise_security.h +37 -0
  168. package/native-src/src/librats/security/plaintext_security.h +106 -0
  169. package/native-src/src/librats/security/session.h +37 -0
  170. package/native-src/src/{storage.cpp → librats/storage/storage.cpp} +369 -522
  171. package/native-src/src/{storage.h → librats/storage/storage.h} +135 -299
  172. package/native-src/src/librats/subsystems/bittorrent.cpp +211 -0
  173. package/native-src/src/librats/subsystems/bittorrent.h +136 -0
  174. package/native-src/src/librats/subsystems/dht_discovery.cpp +202 -0
  175. package/native-src/src/librats/subsystems/dht_discovery.h +123 -0
  176. package/native-src/src/librats/subsystems/dht_service.h +36 -0
  177. package/native-src/src/librats/subsystems/file_transfer.cpp +972 -0
  178. package/native-src/src/librats/subsystems/file_transfer.h +367 -0
  179. package/native-src/src/librats/subsystems/hole_punch.cpp +532 -0
  180. package/native-src/src/librats/subsystems/hole_punch.h +266 -0
  181. package/native-src/src/librats/subsystems/hole_punch_service.h +38 -0
  182. package/native-src/src/librats/subsystems/mdns_discovery.cpp +66 -0
  183. package/native-src/src/librats/subsystems/mdns_discovery.h +55 -0
  184. package/native-src/src/librats/subsystems/message_json.cpp +112 -0
  185. package/native-src/src/librats/subsystems/message_json.h +88 -0
  186. package/native-src/src/librats/subsystems/peer_exchange.cpp +241 -0
  187. package/native-src/src/librats/subsystems/peer_exchange.h +136 -0
  188. package/native-src/src/librats/subsystems/ping_service.cpp +98 -0
  189. package/native-src/src/librats/subsystems/ping_service.h +66 -0
  190. package/native-src/src/librats/subsystems/port_mapping_service.cpp +192 -0
  191. package/native-src/src/librats/subsystems/port_mapping_service.h +84 -0
  192. package/native-src/src/librats/subsystems/pubsub.cpp +567 -0
  193. package/native-src/src/librats/subsystems/pubsub.h +175 -0
  194. package/native-src/src/librats/subsystems/reconnection.cpp +239 -0
  195. package/native-src/src/librats/subsystems/reconnection.h +126 -0
  196. package/native-src/src/librats/transport/connection.cpp +343 -0
  197. package/native-src/src/librats/transport/connection.h +283 -0
  198. package/native-src/src/librats/transport/link.h +96 -0
  199. package/native-src/src/librats/transport/reactor.cpp +540 -0
  200. package/native-src/src/librats/transport/reactor.h +224 -0
  201. package/native-src/src/librats/transport/reactor_pool.h +81 -0
  202. package/native-src/src/librats/transport/tcp_link.cpp +49 -0
  203. package/native-src/src/librats/transport/tcp_link.h +43 -0
  204. package/native-src/src/librats/transport/udp_mux.cpp +617 -0
  205. package/native-src/src/librats/transport/udp_mux.h +363 -0
  206. package/native-src/src/librats/transport/udp_packet.cpp +121 -0
  207. package/native-src/src/librats/transport/udp_packet.h +190 -0
  208. package/native-src/src/librats/transport/udp_stream.cpp +1194 -0
  209. package/native-src/src/librats/transport/udp_stream.h +614 -0
  210. package/native-src/src/librats/util/features.h.in +51 -0
  211. package/native-src/src/{fs.cpp → librats/util/fs.cpp} +51 -3
  212. package/native-src/src/librats/util/fs.h +136 -0
  213. package/native-src/src/librats/util/json.cpp +1002 -0
  214. package/native-src/src/librats/util/json.h +444 -0
  215. package/native-src/src/{logger.cpp → librats/util/logger.cpp} +1 -1
  216. package/native-src/src/{logger.h → librats/util/logger.h} +43 -31
  217. package/native-src/src/{network_monitor.cpp → librats/util/network_monitor.cpp} +12 -4
  218. package/native-src/src/{network_monitor.h → librats/util/network_monitor.h} +2 -1
  219. package/native-src/src/{network_utils.cpp → librats/util/network_utils.cpp} +38 -23
  220. package/native-src/src/{network_utils.h → librats/util/network_utils.h} +15 -8
  221. package/native-src/src/{os.cpp → librats/util/os.cpp} +48 -18
  222. package/native-src/src/librats/util/rats_export.h +69 -0
  223. package/native-src/src/{version.cpp → librats/util/version.cpp} +2 -2
  224. package/native-src/src/{version.h.in → librats/util/version.h.in} +1 -1
  225. package/native-src/src/librats/wire/frame.cpp +76 -0
  226. package/native-src/src/librats/wire/frame.h +110 -0
  227. package/native-src/src/librats/wire/message_router.cpp +45 -0
  228. package/native-src/src/librats/wire/message_router.h +47 -0
  229. package/package.json +5 -4
  230. package/scripts/build-librats.js +1 -0
  231. package/scripts/postinstall.js +3 -3
  232. package/scripts/prepare-package.js +4 -4
  233. package/scripts/verify-installation.js +63 -105
  234. package/src/librats_node.cpp +1042 -1324
  235. package/native-src/src/bencode.cpp +0 -485
  236. package/native-src/src/bencode.h +0 -145
  237. package/native-src/src/bittorrent.cpp +0 -14
  238. package/native-src/src/bittorrent.h +0 -74
  239. package/native-src/src/bt_bitfield.cpp +0 -372
  240. package/native-src/src/bt_bitfield.h +0 -316
  241. package/native-src/src/bt_choker.cpp +0 -228
  242. package/native-src/src/bt_choker.h +0 -147
  243. package/native-src/src/bt_client.cpp +0 -1047
  244. package/native-src/src/bt_client.h +0 -445
  245. package/native-src/src/bt_create_torrent.cpp +0 -677
  246. package/native-src/src/bt_create_torrent.h +0 -473
  247. package/native-src/src/bt_extension.cpp +0 -469
  248. package/native-src/src/bt_extension.h +0 -309
  249. package/native-src/src/bt_file_storage.cpp +0 -261
  250. package/native-src/src/bt_file_storage.h +0 -298
  251. package/native-src/src/bt_handshake.cpp +0 -134
  252. package/native-src/src/bt_handshake.h +0 -157
  253. package/native-src/src/bt_messages.cpp +0 -364
  254. package/native-src/src/bt_messages.h +0 -324
  255. package/native-src/src/bt_network.cpp +0 -1007
  256. package/native-src/src/bt_network.h +0 -417
  257. package/native-src/src/bt_peer_connection.cpp +0 -742
  258. package/native-src/src/bt_peer_connection.h +0 -592
  259. package/native-src/src/bt_piece_picker.cpp +0 -786
  260. package/native-src/src/bt_piece_picker.h +0 -473
  261. package/native-src/src/bt_resume_data.cpp +0 -410
  262. package/native-src/src/bt_resume_data.h +0 -249
  263. package/native-src/src/bt_torrent.cpp +0 -2120
  264. package/native-src/src/bt_torrent.h +0 -641
  265. package/native-src/src/bt_torrent_info.cpp +0 -659
  266. package/native-src/src/bt_torrent_info.h +0 -418
  267. package/native-src/src/bt_types.h +0 -621
  268. package/native-src/src/chained_send_buffer.cpp +0 -75
  269. package/native-src/src/chained_send_buffer.h +0 -137
  270. package/native-src/src/crypto/hkdf.c +0 -266
  271. package/native-src/src/crypto/poly1305.h +0 -36
  272. package/native-src/src/dht.cpp +0 -3311
  273. package/native-src/src/dht.h +0 -717
  274. package/native-src/src/disk_io.cpp +0 -632
  275. package/native-src/src/disk_io.h +0 -315
  276. package/native-src/src/file_transfer.cpp +0 -1415
  277. package/native-src/src/file_transfer.h +0 -286
  278. package/native-src/src/fs.h +0 -108
  279. package/native-src/src/gossipsub.cpp +0 -1139
  280. package/native-src/src/gossipsub.h +0 -403
  281. package/native-src/src/ice.cpp +0 -893
  282. package/native-src/src/ice.h +0 -559
  283. package/native-src/src/json.hpp +0 -25526
  284. package/native-src/src/librats.cpp +0 -2378
  285. package/native-src/src/librats.h +0 -2324
  286. package/native-src/src/librats_bittorrent.cpp +0 -601
  287. package/native-src/src/librats_c.cpp +0 -1557
  288. package/native-src/src/librats_c.h +0 -323
  289. package/native-src/src/librats_discovery.cpp +0 -402
  290. package/native-src/src/librats_encryption.cpp +0 -275
  291. package/native-src/src/librats_file_transfer.cpp +0 -144
  292. package/native-src/src/librats_gossipsub.cpp +0 -289
  293. package/native-src/src/librats_ice.cpp +0 -213
  294. package/native-src/src/librats_log_macros.h +0 -36
  295. package/native-src/src/librats_logging.cpp +0 -173
  296. package/native-src/src/librats_mdns.cpp +0 -166
  297. package/native-src/src/librats_persistence.cpp +0 -796
  298. package/native-src/src/librats_portmap.cpp +0 -419
  299. package/native-src/src/librats_reconnection.cpp +0 -218
  300. package/native-src/src/librats_statistic.cpp +0 -105
  301. package/native-src/src/librats_storage.cpp +0 -189
  302. package/native-src/src/rats_export.h +0 -17
  303. package/native-src/src/receive_buffer.cpp +0 -82
  304. package/native-src/src/receive_buffer.h +0 -127
  305. package/native-src/src/socket.h +0 -228
  306. package/native-src/src/threadmanager.cpp +0 -105
  307. package/native-src/src/threadmanager.h +0 -53
  308. package/native-src/src/tracker.cpp +0 -1264
  309. package/native-src/src/tracker.h +0 -319
  310. package/native-src/src/turn.cpp +0 -762
  311. package/native-src/src/turn.h +0 -460
  312. package/native-src/src/wakeup_pipe.h +0 -60
  313. /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