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,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