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