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,173 +0,0 @@
1
- #include "librats.h"
2
- #include "librats_log_macros.h"
3
- #include <algorithm>
4
-
5
- namespace librats {
6
-
7
- //=============================================================================
8
- // Logging Control API Implementation
9
- //=============================================================================
10
-
11
- void RatsClient::set_console_logging_enabled(bool enabled) {
12
- Logger::getInstance().set_console_logging_enabled(enabled);
13
- // Only log if console is enabled, otherwise we're silently disabling
14
- if (enabled) {
15
- LOG_CLIENT_INFO("Console logging enabled");
16
- }
17
- }
18
-
19
- bool RatsClient::is_console_logging_enabled() const {
20
- return Logger::getInstance().is_console_logging_enabled();
21
- }
22
-
23
- void RatsClient::set_logging_enabled(bool enabled) {
24
- LOG_CLIENT_INFO("Setting file logging " << (enabled ? "enabled" : "disabled"));
25
-
26
- Logger& logger = Logger::getInstance();
27
-
28
- if (enabled) {
29
- // Set default log file path if not already set
30
- if (logger.get_log_file_path().empty()) {
31
- logger.set_log_file_path("rats.log");
32
- }
33
- }
34
-
35
- logger.set_file_logging_enabled(enabled);
36
-
37
- if (enabled) {
38
- LOG_CLIENT_INFO("File logging enabled - logs will be written to: " << logger.get_log_file_path());
39
- } else {
40
- LOG_CLIENT_INFO("File logging disabled");
41
- }
42
- }
43
-
44
- bool RatsClient::is_logging_enabled() const {
45
- return Logger::getInstance().is_file_logging_enabled();
46
- }
47
-
48
- void RatsClient::set_log_file_path(const std::string& file_path) {
49
- Logger& logger = Logger::getInstance();
50
- logger.set_log_file_path(file_path);
51
- LOG_CLIENT_INFO("Log file path set to: " << file_path);
52
- }
53
-
54
- std::string RatsClient::get_log_file_path() const {
55
- return Logger::getInstance().get_log_file_path();
56
- }
57
-
58
- void RatsClient::set_log_level(LogLevel level) {
59
- Logger::getInstance().set_log_level(level);
60
- LOG_CLIENT_INFO("Log level set to: " << static_cast<int>(level));
61
- }
62
-
63
- void RatsClient::set_log_level(const std::string& level_str) {
64
- LogLevel level;
65
-
66
- std::string upper_level = level_str;
67
- std::transform(upper_level.begin(), upper_level.end(), upper_level.begin(), ::toupper);
68
-
69
- if (upper_level == "DEBUG") {
70
- level = LogLevel::DEBUG;
71
- } else if (upper_level == "INFO") {
72
- level = LogLevel::INFO;
73
- } else if (upper_level == "WARN" || upper_level == "WARNING") {
74
- level = LogLevel::WARN;
75
- } else if (upper_level == "ERROR") {
76
- level = LogLevel::ERROR;
77
- } else {
78
- LOG_CLIENT_WARN("Invalid log level string: " << level_str << " - using INFO as default");
79
- level = LogLevel::INFO;
80
- }
81
-
82
- set_log_level(level);
83
- }
84
-
85
- LogLevel RatsClient::get_log_level() const {
86
- // Note: Logger doesn't expose get_log_level method, so we'll use a workaround
87
- // by checking which level actually outputs. This is a limitation of the current Logger design.
88
- Logger& logger = Logger::getInstance();
89
-
90
- // Try to determine current level by checking if debug messages would be shown
91
- // This is a simple approximation - for a more accurate implementation,
92
- // the Logger class would need a get_log_level() method
93
-
94
- // For now, we'll return INFO as a reasonable default
95
- // In a production system, the Logger class should be enhanced to track and return the current level
96
- return LogLevel::INFO;
97
- }
98
-
99
- void RatsClient::set_log_colors_enabled(bool enabled) {
100
- Logger::getInstance().set_colors_enabled(enabled);
101
- LOG_CLIENT_INFO("Log colors " << (enabled ? "enabled" : "disabled"));
102
- }
103
-
104
- bool RatsClient::is_log_colors_enabled() const {
105
- // Note: Logger doesn't expose a getter for colors_enabled
106
- // This is another limitation of the current Logger design
107
- // For now, return true as a reasonable default
108
- return true;
109
- }
110
-
111
- void RatsClient::set_log_timestamps_enabled(bool enabled) {
112
- Logger::getInstance().set_timestamps_enabled(enabled);
113
- LOG_CLIENT_INFO("Log timestamps " << (enabled ? "enabled" : "disabled"));
114
- }
115
-
116
- bool RatsClient::is_log_timestamps_enabled() const {
117
- // Note: Logger doesn't expose a getter for timestamps_enabled
118
- // This is another limitation of the current Logger design
119
- // For now, return true as a reasonable default
120
- return true;
121
- }
122
-
123
- void RatsClient::set_log_rotation_size(size_t max_size_bytes) {
124
- Logger::getInstance().set_log_rotation_size(max_size_bytes);
125
- LOG_CLIENT_INFO("Log rotation size set to: " << max_size_bytes << " bytes");
126
- }
127
-
128
- void RatsClient::set_log_retention_count(int count) {
129
- Logger::getInstance().set_log_retention_count(count);
130
- LOG_CLIENT_INFO("Log retention count set to: " << count << " files");
131
- }
132
-
133
- void RatsClient::set_log_rotate_on_startup(bool enabled) {
134
- Logger::getInstance().set_rotate_on_startup(enabled);
135
- LOG_CLIENT_INFO("Log rotation on startup " << (enabled ? "enabled" : "disabled"));
136
- }
137
-
138
- bool RatsClient::is_log_rotate_on_startup_enabled() const {
139
- return Logger::getInstance().is_rotate_on_startup_enabled();
140
- }
141
-
142
- void RatsClient::clear_log_file() {
143
- Logger& logger = Logger::getInstance();
144
- std::string log_path = logger.get_log_file_path();
145
-
146
- if (log_path.empty()) {
147
- LOG_CLIENT_WARN("No log file path set - cannot clear log file");
148
- return;
149
- }
150
-
151
- try {
152
- // Temporarily disable file logging
153
- bool was_enabled = logger.is_file_logging_enabled();
154
- if (was_enabled) {
155
- logger.set_file_logging_enabled(false);
156
- }
157
-
158
- // Delete the log file
159
- std::remove(log_path.c_str());
160
-
161
- // Re-enable file logging if it was enabled
162
- if (was_enabled) {
163
- logger.set_file_logging_enabled(true);
164
- }
165
-
166
- LOG_CLIENT_INFO("Log file cleared: " << log_path);
167
-
168
- } catch (const std::exception& e) {
169
- LOG_CLIENT_ERROR("Failed to clear log file: " << e.what());
170
- }
171
- }
172
-
173
- }
@@ -1,166 +0,0 @@
1
- #include "librats.h"
2
- #include "mdns.h"
3
- #include <iostream>
4
- #include <algorithm>
5
- #include <chrono>
6
- #include <memory>
7
- #include <stdexcept>
8
-
9
- #include "librats_log_macros.h"
10
-
11
- namespace librats {
12
-
13
- // ===== mDNS DISCOVERY METHODS IMPLEMENTATION =====
14
-
15
- bool RatsClient::start_mdns_discovery(const std::string& service_instance_name,
16
- const std::map<std::string, std::string>& txt_records) {
17
- if (!running_.load()) {
18
- LOG_CLIENT_ERROR("RatsClient is not running, cannot start mDNS discovery");
19
- return false;
20
- }
21
-
22
- if (mdns_client_ && mdns_client_->is_running()) {
23
- LOG_CLIENT_WARN("mDNS discovery is already running");
24
- return true;
25
- }
26
-
27
- LOG_CLIENT_INFO("Starting mDNS service discovery and announcement");
28
-
29
- // Create service instance name from our peer ID if not provided
30
- std::string instance_name = service_instance_name;
31
- if (instance_name.empty()) {
32
- instance_name = "librats-" + get_our_peer_id().substr(0, 8);
33
- }
34
-
35
- // Create mDNS client
36
- mdns_client_ = std::make_unique<MdnsClient>(instance_name, listen_port_);
37
-
38
- // Set service type based on protocol name (e.g., "_rats-search._tcp.local.")
39
- std::string protocol_name = get_protocol_name();
40
- std::string service_type = "_" + protocol_name + "._tcp.local.";
41
- mdns_client_->set_service_type(service_type);
42
-
43
- // Set service discovery callback
44
- mdns_client_->set_service_callback([this](const MdnsService& service, bool is_new) {
45
- handle_mdns_service_discovery(service, is_new);
46
- });
47
-
48
- // Start mDNS client
49
- if (!mdns_client_->start()) {
50
- LOG_CLIENT_ERROR("Failed to start mDNS client");
51
- mdns_client_.reset();
52
- return false;
53
- }
54
-
55
- // Start service announcement
56
- if (!mdns_client_->announce_service(instance_name, listen_port_, txt_records)) {
57
- LOG_CLIENT_WARN("Failed to start mDNS service announcement");
58
- }
59
-
60
- // Start service discovery
61
- if (!mdns_client_->start_discovery()) {
62
- LOG_CLIENT_WARN("Failed to start mDNS service discovery");
63
- }
64
-
65
- LOG_CLIENT_INFO("mDNS discovery started successfully for service: " << instance_name);
66
- return true;
67
- }
68
-
69
- void RatsClient::stop_mdns_discovery() {
70
- if (!mdns_client_) {
71
- return;
72
- }
73
-
74
- LOG_CLIENT_INFO("Stopping mDNS discovery");
75
-
76
- mdns_client_->stop();
77
- mdns_client_.reset();
78
-
79
- LOG_CLIENT_INFO("mDNS discovery stopped");
80
- }
81
-
82
- bool RatsClient::is_mdns_running() const {
83
- return mdns_client_ && mdns_client_->is_running();
84
- }
85
-
86
- void RatsClient::set_mdns_callback(std::function<void(const std::string&, int, const std::string&)> callback) {
87
- mdns_callback_ = callback;
88
- }
89
-
90
- std::vector<MdnsService> RatsClient::get_mdns_services() const {
91
- if (!mdns_client_) {
92
- return {};
93
- }
94
-
95
- return mdns_client_->get_recent_services(std::chrono::seconds(300)); // Services seen in last 5 minutes
96
- }
97
-
98
- bool RatsClient::query_mdns_services() {
99
- if (!mdns_client_) {
100
- LOG_CLIENT_ERROR("mDNS client not initialized");
101
- return false;
102
- }
103
-
104
- return mdns_client_->query_services();
105
- }
106
-
107
- void RatsClient::handle_mdns_service_discovery(const MdnsService& service, bool is_new) {
108
- LOG_CLIENT_INFO("mDNS discovered " << (is_new ? "new" : "updated") << " librats service: "
109
- << service.service_name << " at " << service.ip_address << ":" << service.port);
110
-
111
- // Extract instance name from service name for logging
112
- std::string instance_name = service.service_name;
113
- size_t pos = instance_name.find("._librats._tcp.local.");
114
- if (pos != std::string::npos) {
115
- instance_name = instance_name.substr(0, pos);
116
- }
117
-
118
- // Call user callback if registered
119
- if (mdns_callback_) {
120
- try {
121
- mdns_callback_(service.ip_address, service.port, instance_name);
122
- } catch (const std::exception& e) {
123
- LOG_CLIENT_ERROR("Exception in mDNS callback: " << e.what());
124
- }
125
- }
126
-
127
- // Auto-connect to discovered services if they're new
128
- if (is_new) {
129
- // Check if this peer should be ignored (local interface)
130
- if (should_ignore_peer(service.ip_address, service.port)) {
131
- LOG_CLIENT_DEBUG("Ignoring mDNS discovered peer " << service.ip_address << ":"
132
- << service.port << " - local interface address");
133
- return;
134
- }
135
-
136
- // Check if we're already connected to this peer
137
- std::string normalized_peer_address = normalize_peer_address(service.ip_address, service.port);
138
- if (is_already_connected_to_address(normalized_peer_address)) {
139
- LOG_CLIENT_DEBUG("Already connected to mDNS discovered peer: " << normalized_peer_address);
140
- return;
141
- }
142
-
143
- // Check if peer limit is reached
144
- if (is_peer_limit_reached()) {
145
- LOG_CLIENT_DEBUG("Peer limit reached, not connecting to mDNS discovered peer "
146
- << service.ip_address << ":" << service.port);
147
- return;
148
- }
149
-
150
- LOG_CLIENT_INFO("Attempting to connect to mDNS discovered peer: "
151
- << service.ip_address << ":" << service.port);
152
-
153
- // Try to connect to the discovered peer (non-blocking)
154
- std::thread([this, service]() {
155
- if (connect_to_peer(service.ip_address, service.port)) {
156
- LOG_CLIENT_INFO("Successfully connected to mDNS discovered peer: "
157
- << service.ip_address << ":" << service.port);
158
- } else {
159
- LOG_CLIENT_DEBUG("Failed to connect to mDNS discovered peer: "
160
- << service.ip_address << ":" << service.port);
161
- }
162
- }).detach();
163
- }
164
- }
165
-
166
- } // namespace librats