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,323 +0,0 @@
1
- #pragma once
2
-
3
- #include "rats_export.h"
4
- #include <stdint.h>
5
- #include <stddef.h>
6
-
7
- #ifdef __cplusplus
8
- extern "C" {
9
- #endif
10
-
11
- // Opaque handle to a RatsClient instance
12
- typedef void* rats_client_t;
13
-
14
- // Memory helpers for returned strings
15
- RATS_API void rats_string_free(const char* str);
16
-
17
- // Version / ABI
18
- RATS_API const char* rats_get_version_string(void);
19
- RATS_API void rats_get_version(int* major, int* minor, int* patch, int* build);
20
- RATS_API const char* rats_get_git_describe(void);
21
- RATS_API uint32_t rats_get_abi(void);
22
-
23
- // Client lifecycle
24
- RATS_API rats_client_t rats_create(int listen_port);
25
- RATS_API void rats_destroy(rats_client_t client);
26
- RATS_API int rats_start(rats_client_t client);
27
- RATS_API void rats_stop(rats_client_t client);
28
-
29
- // Basic operations
30
- RATS_API int rats_connect(rats_client_t client, const char* host, int port);
31
- RATS_API int rats_get_listen_port(rats_client_t client);
32
- RATS_API int rats_broadcast_string(rats_client_t client, const char* message);
33
- RATS_API int rats_send_string(rats_client_t client, const char* peer_id, const char* message);
34
-
35
- // Info
36
- RATS_API int rats_get_peer_count(rats_client_t client);
37
- RATS_API char* rats_get_our_peer_id(rats_client_t client); // caller must free with rats_string_free
38
- RATS_API char* rats_get_connection_statistics_json(rats_client_t client); // caller must free with rats_string_free
39
- RATS_API char** rats_get_validated_peer_ids(rats_client_t client, int* count); // caller must free array and strings
40
- RATS_API char** rats_get_peer_ids(rats_client_t client, int* count); // caller must free array and strings
41
- RATS_API char* rats_get_peer_info_json(rats_client_t client, const char* peer_id); // caller must free
42
-
43
- // Logging controls (optional helpers)
44
- RATS_API void rats_set_console_logging_enabled(int enabled);
45
- RATS_API int rats_is_console_logging_enabled(void);
46
- RATS_API void rats_set_logging_enabled(int enabled);
47
- RATS_API void rats_set_log_level(const char* level_str); // "DEBUG", "INFO", "WARN", "ERROR"
48
- RATS_API void rats_set_log_file_path(rats_client_t client, const char* file_path);
49
- RATS_API char* rats_get_log_file_path(rats_client_t client); // caller must free
50
- RATS_API void rats_set_log_colors_enabled(rats_client_t client, int enabled);
51
- RATS_API int rats_is_log_colors_enabled(rats_client_t client);
52
- RATS_API void rats_set_log_timestamps_enabled(rats_client_t client, int enabled);
53
- RATS_API int rats_is_log_timestamps_enabled(rats_client_t client);
54
- RATS_API void rats_set_log_rotation_size(rats_client_t client, size_t max_size_bytes);
55
- RATS_API void rats_set_log_retention_count(rats_client_t client, int count);
56
- RATS_API void rats_set_log_rotate_on_startup(rats_client_t client, int enabled);
57
- RATS_API int rats_is_log_rotate_on_startup_enabled(rats_client_t client);
58
- RATS_API void rats_clear_log_file(rats_client_t client);
59
-
60
- // Error codes
61
- typedef enum {
62
- RATS_SUCCESS = 0,
63
- RATS_ERROR_INVALID_HANDLE = -1,
64
- RATS_ERROR_INVALID_PARAMETER = -2,
65
- RATS_ERROR_NOT_RUNNING = -3,
66
- RATS_ERROR_OPERATION_FAILED = -4,
67
- RATS_ERROR_PEER_NOT_FOUND = -5,
68
- RATS_ERROR_MEMORY_ALLOCATION = -6,
69
- RATS_ERROR_JSON_PARSE = -7
70
- } rats_error_t;
71
-
72
- // C callbacks
73
- typedef void (*rats_connection_cb)(void* user_data, const char* peer_id);
74
- typedef void (*rats_string_cb)(void* user_data, const char* peer_id, const char* message);
75
- typedef void (*rats_binary_cb)(void* user_data, const char* peer_id, const void* data, size_t size);
76
- typedef void (*rats_json_cb)(void* user_data, const char* peer_id, const char* json_str);
77
- typedef void (*rats_disconnect_cb)(void* user_data, const char* peer_id);
78
- typedef void (*rats_peer_discovered_cb)(void* user_data, const char* host, int port, const char* service_name);
79
- typedef void (*rats_message_cb)(void* user_data, const char* peer_id, const char* message_data);
80
- typedef void (*rats_peers_found_cb)(void* user_data, const char** peer_addresses, int count);
81
-
82
- // Peer configuration
83
- RATS_API rats_error_t rats_set_max_peers(rats_client_t client, int max_peers);
84
- RATS_API int rats_get_max_peers(rats_client_t client);
85
- RATS_API int rats_is_peer_limit_reached(rats_client_t client);
86
-
87
- // Connection methods
88
- RATS_API rats_error_t rats_disconnect_peer_by_id(rats_client_t client, const char* peer_id);
89
-
90
- // Binary data operations
91
- RATS_API rats_error_t rats_send_binary(rats_client_t client, const char* peer_id,
92
- const void* data, size_t size);
93
- RATS_API int rats_broadcast_binary(rats_client_t client, const void* data, size_t size);
94
-
95
- // JSON operations
96
- RATS_API rats_error_t rats_send_json(rats_client_t client, const char* peer_id, const char* json_str);
97
- RATS_API int rats_broadcast_json(rats_client_t client, const char* json_str);
98
-
99
- // DHT Discovery
100
- RATS_API rats_error_t rats_start_dht_discovery(rats_client_t client, int dht_port);
101
- RATS_API void rats_stop_dht_discovery(rats_client_t client);
102
- RATS_API int rats_is_dht_running(rats_client_t client);
103
- RATS_API rats_error_t rats_announce_for_hash(rats_client_t client, const char* content_hash, int port,
104
- rats_peers_found_cb callback, void* user_data);
105
- RATS_API size_t rats_get_dht_routing_table_size(rats_client_t client);
106
-
107
- // Automatic discovery
108
- RATS_API void rats_start_automatic_peer_discovery(rats_client_t client);
109
- RATS_API void rats_stop_automatic_peer_discovery(rats_client_t client);
110
- RATS_API int rats_is_automatic_discovery_running(rats_client_t client);
111
- RATS_API char* rats_get_discovery_hash(rats_client_t client); // caller must free
112
- RATS_API char* rats_get_rats_peer_discovery_hash(void); // caller must free - static method
113
-
114
- // mDNS Discovery
115
- RATS_API rats_error_t rats_start_mdns_discovery(rats_client_t client, const char* service_name);
116
- RATS_API void rats_stop_mdns_discovery(rats_client_t client);
117
- RATS_API int rats_is_mdns_running(rats_client_t client);
118
- RATS_API rats_error_t rats_query_mdns_services(rats_client_t client);
119
-
120
- // Encryption
121
- RATS_API rats_error_t rats_set_encryption_enabled(rats_client_t client, int enabled);
122
- RATS_API int rats_is_encryption_enabled(rats_client_t client);
123
-
124
- // Protocol configuration
125
- RATS_API rats_error_t rats_set_protocol_name(rats_client_t client, const char* protocol_name);
126
- RATS_API rats_error_t rats_set_protocol_version(rats_client_t client, const char* protocol_version);
127
- RATS_API char* rats_get_protocol_name(rats_client_t client); // caller must free
128
- RATS_API char* rats_get_protocol_version(rats_client_t client); // caller must free
129
-
130
- // Message Exchange API
131
- RATS_API rats_error_t rats_on_message(rats_client_t client, const char* message_type,
132
- rats_message_cb callback, void* user_data);
133
- RATS_API rats_error_t rats_send_message(rats_client_t client, const char* peer_id,
134
- const char* message_type, const char* data);
135
- RATS_API rats_error_t rats_broadcast_message(rats_client_t client, const char* message_type,
136
- const char* data);
137
-
138
- // File Transfer
139
- RATS_API char* rats_send_file(rats_client_t client, const char* peer_id,
140
- const char* file_path, const char* remote_filename); // returns transfer_id, caller must free
141
- RATS_API char* rats_send_directory(rats_client_t client, const char* peer_id, const char* directory_path, const char* remote_directory_name, int recursive); // returns transfer_id, caller must free
142
- RATS_API char* rats_request_file(rats_client_t client, const char* peer_id, const char* remote_file_path, const char* local_path); // returns transfer_id, caller must free
143
- RATS_API char* rats_request_directory(rats_client_t client, const char* peer_id, const char* remote_directory_path, const char* local_directory_path, int recursive); // returns transfer_id, caller must free
144
- RATS_API rats_error_t rats_accept_file_transfer(rats_client_t client, const char* transfer_id,
145
- const char* local_path);
146
- RATS_API rats_error_t rats_reject_file_transfer(rats_client_t client, const char* transfer_id,
147
- const char* reason);
148
- RATS_API rats_error_t rats_cancel_file_transfer(rats_client_t client, const char* transfer_id);
149
- RATS_API rats_error_t rats_accept_directory_transfer(rats_client_t client, const char* transfer_id, const char* local_path);
150
- RATS_API rats_error_t rats_reject_directory_transfer(rats_client_t client, const char* transfer_id, const char* reason);
151
- RATS_API rats_error_t rats_pause_file_transfer(rats_client_t client, const char* transfer_id);
152
- RATS_API rats_error_t rats_resume_file_transfer(rats_client_t client, const char* transfer_id);
153
- RATS_API char* rats_get_file_transfer_progress_json(rats_client_t client, const char* transfer_id); // caller must free
154
- RATS_API char* rats_get_file_transfer_statistics_json(rats_client_t client); // caller must free
155
-
156
- // File transfer callbacks
157
- typedef void (*rats_file_request_cb)(void* user_data, const char* peer_id, const char* transfer_id, const char* remote_path, const char* filename);
158
- typedef void (*rats_directory_request_cb)(void* user_data, const char* peer_id, const char* transfer_id, const char* remote_path, const char* directory_name);
159
- typedef void (*rats_directory_progress_cb)(void* user_data, const char* transfer_id, int files_completed, int total_files, const char* current_file);
160
- typedef void (*rats_file_progress_cb)(void* user_data, const char* transfer_id, int progress_percent, const char* status);
161
-
162
- // Additional file transfer callbacks
163
- RATS_API void rats_set_file_request_callback(rats_client_t client, rats_file_request_cb cb, void* user_data);
164
- RATS_API void rats_set_directory_request_callback(rats_client_t client, rats_directory_request_cb cb, void* user_data);
165
- RATS_API void rats_set_file_progress_callback(rats_client_t client, rats_file_progress_cb cb, void* user_data);
166
- RATS_API void rats_set_directory_progress_callback(rats_client_t client, rats_directory_progress_cb cb, void* user_data);
167
-
168
- // Enhanced callbacks
169
- RATS_API void rats_set_connection_callback(rats_client_t client, rats_connection_cb cb, void* user_data);
170
- RATS_API void rats_set_string_callback(rats_client_t client, rats_string_cb cb, void* user_data);
171
- RATS_API void rats_set_binary_callback(rats_client_t client, rats_binary_cb cb, void* user_data);
172
- RATS_API void rats_set_json_callback(rats_client_t client, rats_json_cb cb, void* user_data);
173
- RATS_API void rats_set_disconnect_callback(rats_client_t client, rats_disconnect_cb cb, void* user_data);
174
- RATS_API void rats_set_peer_discovered_callback(rats_client_t client, rats_peer_discovered_cb cb, void* user_data);
175
-
176
- // GossipSub functionality
177
- RATS_API int rats_is_gossipsub_available(rats_client_t client);
178
- RATS_API int rats_is_gossipsub_running(rats_client_t client);
179
- RATS_API rats_error_t rats_subscribe_to_topic(rats_client_t client, const char* topic);
180
- RATS_API rats_error_t rats_unsubscribe_from_topic(rats_client_t client, const char* topic);
181
- RATS_API int rats_is_subscribed_to_topic(rats_client_t client, const char* topic);
182
- RATS_API char** rats_get_subscribed_topics(rats_client_t client, int* count); // caller must free array and strings
183
- RATS_API rats_error_t rats_publish_to_topic(rats_client_t client, const char* topic, const char* message);
184
- RATS_API rats_error_t rats_publish_json_to_topic(rats_client_t client, const char* topic, const char* json_str);
185
- RATS_API char** rats_get_topic_peers(rats_client_t client, const char* topic, int* count); // caller must free array and strings
186
- RATS_API char** rats_get_topic_mesh_peers(rats_client_t client, const char* topic, int* count); // caller must free array and strings
187
- RATS_API char* rats_get_gossipsub_statistics_json(rats_client_t client); // caller must free
188
-
189
- // GossipSub callbacks
190
- typedef void (*rats_topic_message_cb)(void* user_data, const char* peer_id, const char* topic, const char* message);
191
- typedef void (*rats_topic_json_message_cb)(void* user_data, const char* peer_id, const char* topic, const char* json_str);
192
- typedef void (*rats_topic_peer_joined_cb)(void* user_data, const char* peer_id, const char* topic);
193
- typedef void (*rats_topic_peer_left_cb)(void* user_data, const char* peer_id, const char* topic);
194
-
195
- RATS_API void rats_set_topic_message_callback(rats_client_t client, const char* topic, rats_topic_message_cb cb, void* user_data);
196
- RATS_API void rats_set_topic_json_message_callback(rats_client_t client, const char* topic, rats_topic_json_message_cb cb, void* user_data);
197
- RATS_API void rats_set_topic_peer_joined_callback(rats_client_t client, const char* topic, rats_topic_peer_joined_cb cb, void* user_data);
198
- RATS_API void rats_set_topic_peer_left_callback(rats_client_t client, const char* topic, rats_topic_peer_left_cb cb, void* user_data);
199
- RATS_API void rats_clear_topic_callbacks(rats_client_t client, const char* topic);
200
-
201
- // Address blocking
202
- RATS_API void rats_add_ignored_address(rats_client_t client, const char* ip_address);
203
-
204
- // Configuration persistence
205
- RATS_API rats_error_t rats_load_configuration(rats_client_t client);
206
- RATS_API rats_error_t rats_save_configuration(rats_client_t client);
207
- RATS_API rats_error_t rats_set_data_directory(rats_client_t client, const char* directory_path);
208
- RATS_API char* rats_get_data_directory(rats_client_t client); // caller must free
209
- RATS_API int rats_load_and_reconnect_peers(rats_client_t client);
210
- RATS_API int rats_load_historical_peers(rats_client_t client);
211
- RATS_API int rats_save_historical_peers(rats_client_t client);
212
- RATS_API void rats_clear_historical_peers(rats_client_t client);
213
- RATS_API char** rats_get_historical_peer_ids(rats_client_t client, int* count); // caller must free array and strings
214
-
215
- // ===================== ENHANCED ENCRYPTION API =====================
216
-
217
- // Initialize encryption system
218
- RATS_API rats_error_t rats_initialize_encryption(rats_client_t client, int enable);
219
-
220
- // Check if a specific peer connection is encrypted
221
- RATS_API int rats_is_peer_encrypted(rats_client_t client, const char* peer_id);
222
-
223
- // Set custom Noise Protocol static keypair (32-byte private key as hex string)
224
- RATS_API rats_error_t rats_set_noise_static_keypair(rats_client_t client, const char* private_key_hex);
225
-
226
- // Get our Noise Protocol static public key (returns 64-char hex string, caller must free)
227
- RATS_API char* rats_get_noise_static_public_key(rats_client_t client);
228
-
229
- // Get remote peer's Noise static public key (returns 64-char hex string, caller must free)
230
- RATS_API char* rats_get_peer_noise_public_key(rats_client_t client, const char* peer_id);
231
-
232
- // Get handshake hash for channel binding (returns 64-char hex string, caller must free)
233
- RATS_API char* rats_get_peer_handshake_hash(rats_client_t client, const char* peer_id);
234
-
235
- // ===================== ICE (NAT TRAVERSAL) API =====================
236
-
237
- // ICE connection states
238
- typedef enum {
239
- RATS_ICE_STATE_NEW = 0,
240
- RATS_ICE_STATE_GATHERING = 1,
241
- RATS_ICE_STATE_CHECKING = 2,
242
- RATS_ICE_STATE_CONNECTED = 3,
243
- RATS_ICE_STATE_COMPLETED = 4,
244
- RATS_ICE_STATE_FAILED = 5,
245
- RATS_ICE_STATE_DISCONNECTED = 6,
246
- RATS_ICE_STATE_CLOSED = 7
247
- } rats_ice_connection_state_t;
248
-
249
- // ICE gathering states
250
- typedef enum {
251
- RATS_ICE_GATHERING_NEW = 0,
252
- RATS_ICE_GATHERING_GATHERING = 1,
253
- RATS_ICE_GATHERING_COMPLETE = 2
254
- } rats_ice_gathering_state_t;
255
-
256
- // ICE candidate types
257
- typedef enum {
258
- RATS_ICE_CANDIDATE_HOST = 0,
259
- RATS_ICE_CANDIDATE_SRFLX = 1,
260
- RATS_ICE_CANDIDATE_PRFLX = 2,
261
- RATS_ICE_CANDIDATE_RELAY = 3
262
- } rats_ice_candidate_type_t;
263
-
264
- // ICE callbacks
265
- typedef void (*rats_ice_candidates_cb)(void* user_data, const char* candidates_json);
266
- typedef void (*rats_ice_new_candidate_cb)(void* user_data, const char* candidate_sdp);
267
- typedef void (*rats_ice_gathering_state_cb)(void* user_data, rats_ice_gathering_state_t state);
268
- typedef void (*rats_ice_connection_state_cb)(void* user_data, rats_ice_connection_state_t state);
269
- typedef void (*rats_ice_selected_pair_cb)(void* user_data, const char* local_candidate_json, const char* remote_candidate_json);
270
-
271
- // Check if ICE is available
272
- RATS_API int rats_is_ice_available(rats_client_t client);
273
-
274
- // Server configuration
275
- RATS_API void rats_add_stun_server(rats_client_t client, const char* host, uint16_t port);
276
- RATS_API void rats_add_turn_server(rats_client_t client, const char* host, uint16_t port,
277
- const char* username, const char* password);
278
- RATS_API void rats_clear_ice_servers(rats_client_t client);
279
-
280
- // Candidate gathering
281
- RATS_API int rats_gather_ice_candidates(rats_client_t client);
282
- RATS_API char* rats_get_ice_candidates_json(rats_client_t client); // caller must free
283
- RATS_API int rats_is_ice_gathering_complete(rats_client_t client);
284
-
285
- // Public address discovery
286
- RATS_API char* rats_get_public_address(rats_client_t client); // returns "ip:port" string, caller must free
287
- RATS_API char* rats_discover_public_address(rats_client_t client, const char* stun_server,
288
- uint16_t port, int timeout_ms); // caller must free
289
-
290
- // Remote candidates
291
- RATS_API void rats_add_remote_ice_candidate(rats_client_t client, const char* candidate_sdp);
292
- RATS_API void rats_add_remote_ice_candidates_from_sdp(rats_client_t client,
293
- const char** sdp_lines, int count);
294
- RATS_API void rats_end_of_remote_ice_candidates(rats_client_t client);
295
-
296
- // Connectivity
297
- RATS_API void rats_start_ice_checks(rats_client_t client);
298
- RATS_API rats_ice_connection_state_t rats_get_ice_connection_state(rats_client_t client);
299
- RATS_API rats_ice_gathering_state_t rats_get_ice_gathering_state(rats_client_t client);
300
- RATS_API int rats_is_ice_connected(rats_client_t client);
301
- RATS_API char* rats_get_ice_selected_pair_json(rats_client_t client); // caller must free
302
-
303
- // ICE callbacks
304
- RATS_API void rats_set_ice_candidates_gathered_callback(rats_client_t client,
305
- rats_ice_candidates_cb cb, void* user_data);
306
- RATS_API void rats_set_ice_new_candidate_callback(rats_client_t client,
307
- rats_ice_new_candidate_cb cb, void* user_data);
308
- RATS_API void rats_set_ice_gathering_state_callback(rats_client_t client,
309
- rats_ice_gathering_state_cb cb, void* user_data);
310
- RATS_API void rats_set_ice_connection_state_callback(rats_client_t client,
311
- rats_ice_connection_state_cb cb, void* user_data);
312
- RATS_API void rats_set_ice_selected_pair_callback(rats_client_t client,
313
- rats_ice_selected_pair_cb cb, void* user_data);
314
-
315
- // ICE lifecycle
316
- RATS_API void rats_close_ice(rats_client_t client);
317
- RATS_API void rats_restart_ice(rats_client_t client);
318
-
319
- #ifdef __cplusplus
320
- } // extern "C"
321
- #endif
322
-
323
-