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.
Files changed (319) hide show
  1. package/README.md +145 -331
  2. package/binding.gyp +16 -3
  3. package/lib/index.d.ts +288 -696
  4. package/lib/index.js +407 -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 +404 -179
  8. package/native-src/LICENSE +1 -1
  9. package/native-src/src/librats/bindings/rats.cpp +762 -0
  10. package/native-src/src/librats/bindings/rats.h +380 -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 +43 -0
  73. package/native-src/src/librats/core/types.h +103 -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/circuit_service.h +84 -0
  144. package/native-src/src/librats/node/config.h +110 -0
  145. package/native-src/src/librats/node/dial_service.h +54 -0
  146. package/native-src/src/librats/node/dialer.cpp +264 -0
  147. package/native-src/src/librats/node/dialer.h +188 -0
  148. package/native-src/src/librats/node/host_events.h +26 -0
  149. package/native-src/src/librats/node/identify.cpp +130 -0
  150. package/native-src/src/librats/node/identify.h +71 -0
  151. package/native-src/src/librats/node/nat_status.cpp +103 -0
  152. package/native-src/src/librats/node/nat_status.h +118 -0
  153. package/native-src/src/librats/node/node.cpp +865 -0
  154. package/native-src/src/librats/node/node.h +344 -0
  155. package/native-src/src/librats/node/node_context.h +33 -0
  156. package/native-src/src/librats/node/peer_network.h +91 -0
  157. package/native-src/src/librats/peer/peer.h +49 -0
  158. package/native-src/src/librats/peer/peer_book.cpp +181 -0
  159. package/native-src/src/librats/peer/peer_book.h +88 -0
  160. package/native-src/src/librats/peer/peer_id.cpp +72 -0
  161. package/native-src/src/librats/peer/peer_id.h +62 -0
  162. package/native-src/src/librats/peer/peer_info.h +37 -0
  163. package/native-src/src/librats/peer/peer_table.cpp +170 -0
  164. package/native-src/src/librats/peer/peer_table.h +148 -0
  165. package/native-src/src/librats/security/handshaker.h +66 -0
  166. package/native-src/src/librats/security/identity.h +43 -0
  167. package/native-src/src/librats/security/noise_security.cpp +122 -0
  168. package/native-src/src/librats/security/noise_security.h +37 -0
  169. package/native-src/src/librats/security/plaintext_security.h +106 -0
  170. package/native-src/src/librats/security/session.h +37 -0
  171. package/native-src/src/{storage.cpp → librats/storage/storage.cpp} +369 -522
  172. package/native-src/src/{storage.h → librats/storage/storage.h} +135 -299
  173. package/native-src/src/librats/subsystems/bittorrent.cpp +211 -0
  174. package/native-src/src/librats/subsystems/bittorrent.h +136 -0
  175. package/native-src/src/librats/subsystems/dht_discovery.cpp +202 -0
  176. package/native-src/src/librats/subsystems/dht_discovery.h +123 -0
  177. package/native-src/src/librats/subsystems/dht_service.h +36 -0
  178. package/native-src/src/librats/subsystems/file_transfer.cpp +972 -0
  179. package/native-src/src/librats/subsystems/file_transfer.h +367 -0
  180. package/native-src/src/librats/subsystems/hole_punch.cpp +605 -0
  181. package/native-src/src/librats/subsystems/hole_punch.h +290 -0
  182. package/native-src/src/librats/subsystems/hole_punch_service.h +38 -0
  183. package/native-src/src/librats/subsystems/mdns_discovery.cpp +66 -0
  184. package/native-src/src/librats/subsystems/mdns_discovery.h +55 -0
  185. package/native-src/src/librats/subsystems/message_json.cpp +112 -0
  186. package/native-src/src/librats/subsystems/message_json.h +88 -0
  187. package/native-src/src/librats/subsystems/peer_exchange.cpp +241 -0
  188. package/native-src/src/librats/subsystems/peer_exchange.h +136 -0
  189. package/native-src/src/librats/subsystems/ping_service.cpp +98 -0
  190. package/native-src/src/librats/subsystems/ping_service.h +66 -0
  191. package/native-src/src/librats/subsystems/port_mapping_service.cpp +192 -0
  192. package/native-src/src/librats/subsystems/port_mapping_service.h +84 -0
  193. package/native-src/src/librats/subsystems/pubsub.cpp +567 -0
  194. package/native-src/src/librats/subsystems/pubsub.h +175 -0
  195. package/native-src/src/librats/subsystems/reconnection.cpp +239 -0
  196. package/native-src/src/librats/subsystems/reconnection.h +126 -0
  197. package/native-src/src/librats/subsystems/relay.cpp +1142 -0
  198. package/native-src/src/librats/subsystems/relay.h +211 -0
  199. package/native-src/src/librats/subsystems/relay_service.h +46 -0
  200. package/native-src/src/librats/transport/connection.cpp +343 -0
  201. package/native-src/src/librats/transport/connection.h +283 -0
  202. package/native-src/src/librats/transport/link.h +96 -0
  203. package/native-src/src/librats/transport/reactor.cpp +588 -0
  204. package/native-src/src/librats/transport/reactor.h +262 -0
  205. package/native-src/src/librats/transport/reactor_pool.h +81 -0
  206. package/native-src/src/librats/transport/relay_link.cpp +208 -0
  207. package/native-src/src/librats/transport/relay_link.h +303 -0
  208. package/native-src/src/librats/transport/tcp_link.cpp +49 -0
  209. package/native-src/src/librats/transport/tcp_link.h +43 -0
  210. package/native-src/src/librats/transport/udp_mux.cpp +617 -0
  211. package/native-src/src/librats/transport/udp_mux.h +363 -0
  212. package/native-src/src/librats/transport/udp_packet.cpp +121 -0
  213. package/native-src/src/librats/transport/udp_packet.h +190 -0
  214. package/native-src/src/librats/transport/udp_stream.cpp +1194 -0
  215. package/native-src/src/librats/transport/udp_stream.h +614 -0
  216. package/native-src/src/librats/util/features.h.in +51 -0
  217. package/native-src/src/{fs.cpp → librats/util/fs.cpp} +51 -3
  218. package/native-src/src/librats/util/fs.h +136 -0
  219. package/native-src/src/librats/util/json.cpp +1002 -0
  220. package/native-src/src/librats/util/json.h +444 -0
  221. package/native-src/src/{logger.cpp → librats/util/logger.cpp} +1 -1
  222. package/native-src/src/{logger.h → librats/util/logger.h} +43 -31
  223. package/native-src/src/{network_monitor.cpp → librats/util/network_monitor.cpp} +12 -4
  224. package/native-src/src/{network_monitor.h → librats/util/network_monitor.h} +2 -1
  225. package/native-src/src/{network_utils.cpp → librats/util/network_utils.cpp} +38 -23
  226. package/native-src/src/{network_utils.h → librats/util/network_utils.h} +15 -8
  227. package/native-src/src/{os.cpp → librats/util/os.cpp} +48 -18
  228. package/native-src/src/librats/util/rats_export.h +69 -0
  229. package/native-src/src/{version.cpp → librats/util/version.cpp} +2 -2
  230. package/native-src/src/{version.h.in → librats/util/version.h.in} +1 -1
  231. package/native-src/src/librats/wire/frame.cpp +76 -0
  232. package/native-src/src/librats/wire/frame.h +111 -0
  233. package/native-src/src/librats/wire/message_router.cpp +45 -0
  234. package/native-src/src/librats/wire/message_router.h +47 -0
  235. package/package.json +5 -4
  236. package/scripts/build-librats.js +1 -0
  237. package/scripts/postinstall.js +3 -3
  238. package/scripts/prepare-package.js +4 -4
  239. package/scripts/verify-installation.js +63 -105
  240. package/src/librats_node.cpp +1067 -1323
  241. package/native-src/src/bencode.cpp +0 -485
  242. package/native-src/src/bencode.h +0 -145
  243. package/native-src/src/bittorrent.cpp +0 -14
  244. package/native-src/src/bittorrent.h +0 -74
  245. package/native-src/src/bt_bitfield.cpp +0 -372
  246. package/native-src/src/bt_bitfield.h +0 -316
  247. package/native-src/src/bt_choker.cpp +0 -228
  248. package/native-src/src/bt_choker.h +0 -147
  249. package/native-src/src/bt_client.cpp +0 -1047
  250. package/native-src/src/bt_client.h +0 -445
  251. package/native-src/src/bt_create_torrent.cpp +0 -677
  252. package/native-src/src/bt_create_torrent.h +0 -473
  253. package/native-src/src/bt_extension.cpp +0 -469
  254. package/native-src/src/bt_extension.h +0 -309
  255. package/native-src/src/bt_file_storage.cpp +0 -261
  256. package/native-src/src/bt_file_storage.h +0 -298
  257. package/native-src/src/bt_handshake.cpp +0 -134
  258. package/native-src/src/bt_handshake.h +0 -157
  259. package/native-src/src/bt_messages.cpp +0 -364
  260. package/native-src/src/bt_messages.h +0 -324
  261. package/native-src/src/bt_network.cpp +0 -1007
  262. package/native-src/src/bt_network.h +0 -417
  263. package/native-src/src/bt_peer_connection.cpp +0 -742
  264. package/native-src/src/bt_peer_connection.h +0 -592
  265. package/native-src/src/bt_piece_picker.cpp +0 -786
  266. package/native-src/src/bt_piece_picker.h +0 -473
  267. package/native-src/src/bt_resume_data.cpp +0 -410
  268. package/native-src/src/bt_resume_data.h +0 -249
  269. package/native-src/src/bt_torrent.cpp +0 -2120
  270. package/native-src/src/bt_torrent.h +0 -641
  271. package/native-src/src/bt_torrent_info.cpp +0 -659
  272. package/native-src/src/bt_torrent_info.h +0 -418
  273. package/native-src/src/bt_types.h +0 -621
  274. package/native-src/src/chained_send_buffer.cpp +0 -75
  275. package/native-src/src/chained_send_buffer.h +0 -137
  276. package/native-src/src/crypto/hkdf.c +0 -266
  277. package/native-src/src/crypto/poly1305.h +0 -36
  278. package/native-src/src/dht.cpp +0 -3311
  279. package/native-src/src/dht.h +0 -717
  280. package/native-src/src/disk_io.cpp +0 -632
  281. package/native-src/src/disk_io.h +0 -315
  282. package/native-src/src/file_transfer.cpp +0 -1415
  283. package/native-src/src/file_transfer.h +0 -286
  284. package/native-src/src/fs.h +0 -108
  285. package/native-src/src/gossipsub.cpp +0 -1139
  286. package/native-src/src/gossipsub.h +0 -403
  287. package/native-src/src/ice.cpp +0 -893
  288. package/native-src/src/ice.h +0 -559
  289. package/native-src/src/json.hpp +0 -25526
  290. package/native-src/src/librats.cpp +0 -2378
  291. package/native-src/src/librats.h +0 -2324
  292. package/native-src/src/librats_bittorrent.cpp +0 -601
  293. package/native-src/src/librats_c.cpp +0 -1557
  294. package/native-src/src/librats_c.h +0 -323
  295. package/native-src/src/librats_discovery.cpp +0 -402
  296. package/native-src/src/librats_encryption.cpp +0 -275
  297. package/native-src/src/librats_file_transfer.cpp +0 -144
  298. package/native-src/src/librats_gossipsub.cpp +0 -289
  299. package/native-src/src/librats_ice.cpp +0 -213
  300. package/native-src/src/librats_log_macros.h +0 -36
  301. package/native-src/src/librats_logging.cpp +0 -173
  302. package/native-src/src/librats_mdns.cpp +0 -166
  303. package/native-src/src/librats_persistence.cpp +0 -796
  304. package/native-src/src/librats_portmap.cpp +0 -419
  305. package/native-src/src/librats_reconnection.cpp +0 -218
  306. package/native-src/src/librats_statistic.cpp +0 -105
  307. package/native-src/src/librats_storage.cpp +0 -189
  308. package/native-src/src/rats_export.h +0 -17
  309. package/native-src/src/receive_buffer.cpp +0 -82
  310. package/native-src/src/receive_buffer.h +0 -127
  311. package/native-src/src/socket.h +0 -228
  312. package/native-src/src/threadmanager.cpp +0 -105
  313. package/native-src/src/threadmanager.h +0 -53
  314. package/native-src/src/tracker.cpp +0 -1264
  315. package/native-src/src/tracker.h +0 -319
  316. package/native-src/src/turn.cpp +0 -762
  317. package/native-src/src/turn.h +0 -460
  318. package/native-src/src/wakeup_pipe.h +0 -60
  319. /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