@point3/node-rdkafka 3.6.0-1

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 (707) hide show
  1. package/LICENSE.txt +20 -0
  2. package/README.md +636 -0
  3. package/binding.gyp +154 -0
  4. package/deps/librdkafka/.clang-format +136 -0
  5. package/deps/librdkafka/.clang-format-cpp +103 -0
  6. package/deps/librdkafka/.dir-locals.el +10 -0
  7. package/deps/librdkafka/.formatignore +33 -0
  8. package/deps/librdkafka/.gdbmacros +19 -0
  9. package/deps/librdkafka/.github/CODEOWNERS +1 -0
  10. package/deps/librdkafka/.github/ISSUE_TEMPLATE +34 -0
  11. package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
  12. package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
  13. package/deps/librdkafka/.semaphore/semaphore.yml +378 -0
  14. package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
  15. package/deps/librdkafka/CHANGELOG.md +2208 -0
  16. package/deps/librdkafka/CMakeLists.txt +291 -0
  17. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  18. package/deps/librdkafka/CONFIGURATION.md +209 -0
  19. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  20. package/deps/librdkafka/Doxyfile +2375 -0
  21. package/deps/librdkafka/INTRODUCTION.md +2481 -0
  22. package/deps/librdkafka/LICENSE +26 -0
  23. package/deps/librdkafka/LICENSE.cjson +22 -0
  24. package/deps/librdkafka/LICENSE.crc32c +28 -0
  25. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  26. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  27. package/deps/librdkafka/LICENSE.lz4 +26 -0
  28. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  29. package/deps/librdkafka/LICENSE.nanopb +22 -0
  30. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  31. package/deps/librdkafka/LICENSE.pycrc +23 -0
  32. package/deps/librdkafka/LICENSE.queue +31 -0
  33. package/deps/librdkafka/LICENSE.regexp +5 -0
  34. package/deps/librdkafka/LICENSE.snappy +36 -0
  35. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  36. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  37. package/deps/librdkafka/LICENSES.txt +625 -0
  38. package/deps/librdkafka/Makefile +125 -0
  39. package/deps/librdkafka/README.md +199 -0
  40. package/deps/librdkafka/README.win32 +26 -0
  41. package/deps/librdkafka/STATISTICS.md +624 -0
  42. package/deps/librdkafka/configure +214 -0
  43. package/deps/librdkafka/configure.self +331 -0
  44. package/deps/librdkafka/debian/changelog +111 -0
  45. package/deps/librdkafka/debian/compat +1 -0
  46. package/deps/librdkafka/debian/control +71 -0
  47. package/deps/librdkafka/debian/copyright +99 -0
  48. package/deps/librdkafka/debian/gbp.conf +9 -0
  49. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  50. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  51. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  52. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  53. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  54. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  55. package/deps/librdkafka/debian/rules +19 -0
  56. package/deps/librdkafka/debian/source/format +1 -0
  57. package/deps/librdkafka/debian/watch +2 -0
  58. package/deps/librdkafka/dev-conf.sh +123 -0
  59. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  60. package/deps/librdkafka/examples/Makefile +167 -0
  61. package/deps/librdkafka/examples/README.md +42 -0
  62. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  63. package/deps/librdkafka/examples/consumer.c +271 -0
  64. package/deps/librdkafka/examples/delete_records.c +233 -0
  65. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  66. package/deps/librdkafka/examples/describe_consumer_groups.c +455 -0
  67. package/deps/librdkafka/examples/describe_topics.c +427 -0
  68. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  69. package/deps/librdkafka/examples/globals.json +11 -0
  70. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  71. package/deps/librdkafka/examples/incremental_alter_configs.c +347 -0
  72. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +945 -0
  73. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  74. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  75. package/deps/librdkafka/examples/list_offsets.c +327 -0
  76. package/deps/librdkafka/examples/misc.c +287 -0
  77. package/deps/librdkafka/examples/openssl_engine_example.cpp +248 -0
  78. package/deps/librdkafka/examples/producer.c +251 -0
  79. package/deps/librdkafka/examples/producer.cpp +228 -0
  80. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  81. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  82. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  83. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  84. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  85. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  86. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  87. package/deps/librdkafka/examples/transactions.c +665 -0
  88. package/deps/librdkafka/examples/user_scram.c +491 -0
  89. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +396 -0
  90. package/deps/librdkafka/lds-gen.py +73 -0
  91. package/deps/librdkafka/mainpage.doxy +40 -0
  92. package/deps/librdkafka/mklove/Makefile.base +329 -0
  93. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  94. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  95. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  96. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  97. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  98. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  99. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  100. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  101. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  102. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  103. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  104. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  105. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  106. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  107. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  108. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  109. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  110. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  111. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  112. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  113. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  114. package/deps/librdkafka/packaging/RELEASE.md +319 -0
  115. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  116. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  117. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  118. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  119. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  120. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  121. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  122. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  123. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  124. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  125. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  126. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  127. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  128. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  129. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  130. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  131. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  132. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  133. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  134. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  135. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  136. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  137. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  138. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  139. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  140. package/deps/librdkafka/packaging/cp/README.md +16 -0
  141. package/deps/librdkafka/packaging/cp/check_features.c +72 -0
  142. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  143. package/deps/librdkafka/packaging/cp/verify-packages.sh +69 -0
  144. package/deps/librdkafka/packaging/cp/verify-rpm.sh +32 -0
  145. package/deps/librdkafka/packaging/debian/changelog +66 -0
  146. package/deps/librdkafka/packaging/debian/compat +1 -0
  147. package/deps/librdkafka/packaging/debian/control +49 -0
  148. package/deps/librdkafka/packaging/debian/copyright +84 -0
  149. package/deps/librdkafka/packaging/debian/docs +5 -0
  150. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  151. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  152. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  153. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  154. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  155. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  156. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  157. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  158. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  159. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  160. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  161. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  162. package/deps/librdkafka/packaging/debian/rules +19 -0
  163. package/deps/librdkafka/packaging/debian/source/format +1 -0
  164. package/deps/librdkafka/packaging/debian/watch +2 -0
  165. package/deps/librdkafka/packaging/get_version.py +21 -0
  166. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  167. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  168. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  169. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  170. package/deps/librdkafka/packaging/mingw-w64/export-variables.sh +13 -0
  171. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  172. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  173. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  174. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  175. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  176. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  177. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  178. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  179. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  180. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  181. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  182. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  183. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  184. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  185. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  186. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  187. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  188. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  189. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  190. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  191. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  192. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  193. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  194. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  195. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  196. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  197. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  198. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  199. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  200. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  201. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  202. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  203. package/deps/librdkafka/packaging/tools/Dockerfile +31 -0
  204. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +12 -0
  205. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  206. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  207. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  208. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  209. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  210. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  211. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  212. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  213. package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
  214. package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
  215. package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
  216. package/deps/librdkafka/packaging/tools/style-format.sh +149 -0
  217. package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
  218. package/deps/librdkafka/service.yml +172 -0
  219. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  220. package/deps/librdkafka/src/Makefile +103 -0
  221. package/deps/librdkafka/src/README.lz4.md +30 -0
  222. package/deps/librdkafka/src/cJSON.c +2834 -0
  223. package/deps/librdkafka/src/cJSON.h +398 -0
  224. package/deps/librdkafka/src/crc32c.c +430 -0
  225. package/deps/librdkafka/src/crc32c.h +38 -0
  226. package/deps/librdkafka/src/generate_proto.sh +66 -0
  227. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  228. package/deps/librdkafka/src/lz4.c +2727 -0
  229. package/deps/librdkafka/src/lz4.h +842 -0
  230. package/deps/librdkafka/src/lz4frame.c +2078 -0
  231. package/deps/librdkafka/src/lz4frame.h +692 -0
  232. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  233. package/deps/librdkafka/src/lz4hc.c +1631 -0
  234. package/deps/librdkafka/src/lz4hc.h +413 -0
  235. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  236. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  237. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  238. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  239. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  240. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  241. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  242. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  243. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  244. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  245. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  246. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  247. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  248. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  249. package/deps/librdkafka/src/queue.h +850 -0
  250. package/deps/librdkafka/src/rd.h +584 -0
  251. package/deps/librdkafka/src/rdaddr.c +255 -0
  252. package/deps/librdkafka/src/rdaddr.h +202 -0
  253. package/deps/librdkafka/src/rdatomic.h +230 -0
  254. package/deps/librdkafka/src/rdavg.h +260 -0
  255. package/deps/librdkafka/src/rdavl.c +210 -0
  256. package/deps/librdkafka/src/rdavl.h +250 -0
  257. package/deps/librdkafka/src/rdbase64.c +200 -0
  258. package/deps/librdkafka/src/rdbase64.h +43 -0
  259. package/deps/librdkafka/src/rdbuf.c +1884 -0
  260. package/deps/librdkafka/src/rdbuf.h +375 -0
  261. package/deps/librdkafka/src/rdcrc32.c +114 -0
  262. package/deps/librdkafka/src/rdcrc32.h +170 -0
  263. package/deps/librdkafka/src/rddl.c +179 -0
  264. package/deps/librdkafka/src/rddl.h +43 -0
  265. package/deps/librdkafka/src/rdendian.h +175 -0
  266. package/deps/librdkafka/src/rdfloat.h +67 -0
  267. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  268. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  269. package/deps/librdkafka/src/rdgz.c +120 -0
  270. package/deps/librdkafka/src/rdgz.h +46 -0
  271. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  272. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  273. package/deps/librdkafka/src/rdhttp.c +830 -0
  274. package/deps/librdkafka/src/rdhttp.h +101 -0
  275. package/deps/librdkafka/src/rdinterval.h +177 -0
  276. package/deps/librdkafka/src/rdkafka.c +5505 -0
  277. package/deps/librdkafka/src/rdkafka.h +10686 -0
  278. package/deps/librdkafka/src/rdkafka_admin.c +9794 -0
  279. package/deps/librdkafka/src/rdkafka_admin.h +661 -0
  280. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  281. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  282. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  283. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  284. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  285. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  286. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  287. package/deps/librdkafka/src/rdkafka_broker.c +6337 -0
  288. package/deps/librdkafka/src/rdkafka_broker.h +744 -0
  289. package/deps/librdkafka/src/rdkafka_buf.c +543 -0
  290. package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
  291. package/deps/librdkafka/src/rdkafka_cert.c +576 -0
  292. package/deps/librdkafka/src/rdkafka_cert.h +62 -0
  293. package/deps/librdkafka/src/rdkafka_cgrp.c +7587 -0
  294. package/deps/librdkafka/src/rdkafka_cgrp.h +477 -0
  295. package/deps/librdkafka/src/rdkafka_conf.c +4880 -0
  296. package/deps/librdkafka/src/rdkafka_conf.h +732 -0
  297. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  298. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  299. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  300. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  301. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  302. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  303. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  304. package/deps/librdkafka/src/rdkafka_feature.c +898 -0
  305. package/deps/librdkafka/src/rdkafka_feature.h +104 -0
  306. package/deps/librdkafka/src/rdkafka_fetcher.c +1422 -0
  307. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  308. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  309. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  310. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  311. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  312. package/deps/librdkafka/src/rdkafka_int.h +1260 -0
  313. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  314. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  315. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  316. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  317. package/deps/librdkafka/src/rdkafka_metadata.c +2209 -0
  318. package/deps/librdkafka/src/rdkafka_metadata.h +345 -0
  319. package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
  320. package/deps/librdkafka/src/rdkafka_mock.c +3661 -0
  321. package/deps/librdkafka/src/rdkafka_mock.h +610 -0
  322. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1876 -0
  323. package/deps/librdkafka/src/rdkafka_mock_handlers.c +3113 -0
  324. package/deps/librdkafka/src/rdkafka_mock_int.h +710 -0
  325. package/deps/librdkafka/src/rdkafka_msg.c +2589 -0
  326. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  327. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  328. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  329. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  330. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
  331. package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
  332. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  333. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  334. package/deps/librdkafka/src/rdkafka_op.h +858 -0
  335. package/deps/librdkafka/src/rdkafka_partition.c +4896 -0
  336. package/deps/librdkafka/src/rdkafka_partition.h +1182 -0
  337. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  338. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  339. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  340. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  341. package/deps/librdkafka/src/rdkafka_proto.h +736 -0
  342. package/deps/librdkafka/src/rdkafka_protocol.h +128 -0
  343. package/deps/librdkafka/src/rdkafka_queue.c +1230 -0
  344. package/deps/librdkafka/src/rdkafka_queue.h +1220 -0
  345. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  346. package/deps/librdkafka/src/rdkafka_request.c +7089 -0
  347. package/deps/librdkafka/src/rdkafka_request.h +732 -0
  348. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  349. package/deps/librdkafka/src/rdkafka_sasl.c +530 -0
  350. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  351. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  352. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  353. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
  354. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  355. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1666 -0
  356. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +47 -0
  357. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  358. package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
  359. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  360. package/deps/librdkafka/src/rdkafka_ssl.c +2129 -0
  361. package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
  362. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
  363. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  364. package/deps/librdkafka/src/rdkafka_telemetry.c +760 -0
  365. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  366. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  367. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  368. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +997 -0
  369. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  370. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  371. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  372. package/deps/librdkafka/src/rdkafka_topic.c +2161 -0
  373. package/deps/librdkafka/src/rdkafka_topic.h +334 -0
  374. package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
  375. package/deps/librdkafka/src/rdkafka_transport.h +99 -0
  376. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  377. package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
  378. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  379. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  380. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  381. package/deps/librdkafka/src/rdlist.c +576 -0
  382. package/deps/librdkafka/src/rdlist.h +434 -0
  383. package/deps/librdkafka/src/rdlog.c +89 -0
  384. package/deps/librdkafka/src/rdlog.h +41 -0
  385. package/deps/librdkafka/src/rdmap.c +508 -0
  386. package/deps/librdkafka/src/rdmap.h +492 -0
  387. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  388. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  389. package/deps/librdkafka/src/rdports.c +61 -0
  390. package/deps/librdkafka/src/rdports.h +38 -0
  391. package/deps/librdkafka/src/rdposix.h +250 -0
  392. package/deps/librdkafka/src/rdrand.c +80 -0
  393. package/deps/librdkafka/src/rdrand.h +43 -0
  394. package/deps/librdkafka/src/rdregex.c +156 -0
  395. package/deps/librdkafka/src/rdregex.h +43 -0
  396. package/deps/librdkafka/src/rdsignal.h +57 -0
  397. package/deps/librdkafka/src/rdstring.c +645 -0
  398. package/deps/librdkafka/src/rdstring.h +98 -0
  399. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  400. package/deps/librdkafka/src/rdtime.h +356 -0
  401. package/deps/librdkafka/src/rdtypes.h +86 -0
  402. package/deps/librdkafka/src/rdunittest.c +549 -0
  403. package/deps/librdkafka/src/rdunittest.h +232 -0
  404. package/deps/librdkafka/src/rdvarint.c +134 -0
  405. package/deps/librdkafka/src/rdvarint.h +165 -0
  406. package/deps/librdkafka/src/rdwin32.h +382 -0
  407. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  408. package/deps/librdkafka/src/rdxxhash.h +328 -0
  409. package/deps/librdkafka/src/regexp.c +1352 -0
  410. package/deps/librdkafka/src/regexp.h +41 -0
  411. package/deps/librdkafka/src/snappy.c +1866 -0
  412. package/deps/librdkafka/src/snappy.h +62 -0
  413. package/deps/librdkafka/src/snappy_compat.h +138 -0
  414. package/deps/librdkafka/src/statistics_schema.json +444 -0
  415. package/deps/librdkafka/src/tinycthread.c +932 -0
  416. package/deps/librdkafka/src/tinycthread.h +503 -0
  417. package/deps/librdkafka/src/tinycthread_extra.c +199 -0
  418. package/deps/librdkafka/src/tinycthread_extra.h +212 -0
  419. package/deps/librdkafka/src/win32_config.h +58 -0
  420. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  421. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  422. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  423. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  424. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  425. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  426. package/deps/librdkafka/src-cpp/Makefile +55 -0
  427. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  428. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  429. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  430. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  431. package/deps/librdkafka/src-cpp/README.md +16 -0
  432. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  433. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  434. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  435. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
  436. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  437. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  438. package/deps/librdkafka/tests/0001-multiobj.c +102 -0
  439. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  440. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  441. package/deps/librdkafka/tests/0004-conf.c +934 -0
  442. package/deps/librdkafka/tests/0005-order.c +133 -0
  443. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  444. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  445. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  446. package/deps/librdkafka/tests/0009-mock_cluster.c +97 -0
  447. package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
  448. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  449. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  450. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  451. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  452. package/deps/librdkafka/tests/0016-client_swname.c +181 -0
  453. package/deps/librdkafka/tests/0017-compression.c +140 -0
  454. package/deps/librdkafka/tests/0018-cgrp_term.c +338 -0
  455. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  456. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  457. package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
  458. package/deps/librdkafka/tests/0022-consume_batch.c +279 -0
  459. package/deps/librdkafka/tests/0025-timers.c +147 -0
  460. package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
  461. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  462. package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
  463. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  464. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  465. package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
  466. package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
  467. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  468. package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
  469. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  470. package/deps/librdkafka/tests/0038-performance.c +121 -0
  471. package/deps/librdkafka/tests/0039-event.c +284 -0
  472. package/deps/librdkafka/tests/0040-io_event.c +257 -0
  473. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
  474. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  475. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  476. package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
  477. package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
  478. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  479. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
  480. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  481. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  482. package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
  483. package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
  484. package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
  485. package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
  486. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  487. package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
  488. package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
  489. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  490. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  491. package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
  492. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  493. package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
  494. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  495. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  496. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  497. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  498. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  499. package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
  500. package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
  501. package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
  502. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  503. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  504. package/deps/librdkafka/tests/0073-headers.c +381 -0
  505. package/deps/librdkafka/tests/0074-producev.c +87 -0
  506. package/deps/librdkafka/tests/0075-retry.c +290 -0
  507. package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
  508. package/deps/librdkafka/tests/0077-compaction.c +363 -0
  509. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  510. package/deps/librdkafka/tests/0079-fork.c +93 -0
  511. package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
  512. package/deps/librdkafka/tests/0081-admin.c +5633 -0
  513. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
  514. package/deps/librdkafka/tests/0083-cb_event.c +233 -0
  515. package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
  516. package/deps/librdkafka/tests/0085-headers.cpp +392 -0
  517. package/deps/librdkafka/tests/0086-purge.c +368 -0
  518. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  519. package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
  520. package/deps/librdkafka/tests/0090-idempotence.c +171 -0
  521. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
  522. package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
  523. package/deps/librdkafka/tests/0093-holb.c +200 -0
  524. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
  525. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  526. package/deps/librdkafka/tests/0097-ssl_verify.cpp +658 -0
  527. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  528. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  529. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  530. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  531. package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
  532. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  533. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
  534. package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
  535. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
  536. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  537. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
  538. package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
  539. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  540. package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
  541. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
  542. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  543. package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
  544. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
  545. package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
  546. package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
  547. package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
  548. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
  549. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  550. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  551. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  552. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  553. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  554. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +528 -0
  555. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  556. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  557. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
  558. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  559. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  560. package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
  561. package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
  562. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  563. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  564. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  565. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +619 -0
  566. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  567. package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
  568. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  569. package/deps/librdkafka/tests/0142-reauthentication.c +515 -0
  570. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
  571. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  572. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  573. package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
  574. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
  575. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
  576. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  577. package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
  578. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  579. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  580. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  581. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  582. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  583. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  584. package/deps/librdkafka/tests/CMakeLists.txt +170 -0
  585. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
  586. package/deps/librdkafka/tests/Makefile +182 -0
  587. package/deps/librdkafka/tests/README.md +509 -0
  588. package/deps/librdkafka/tests/autotest.sh +33 -0
  589. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  590. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  591. package/deps/librdkafka/tests/buildbox.sh +17 -0
  592. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  593. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  594. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  595. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  596. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  597. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  598. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +13 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-all-tests.sh +79 -0
  630. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  632. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  633. package/deps/librdkafka/tests/run-test.sh +140 -0
  634. package/deps/librdkafka/tests/rusage.c +249 -0
  635. package/deps/librdkafka/tests/sasl_test.py +289 -0
  636. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  637. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  638. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  639. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  640. package/deps/librdkafka/tests/sockem.c +801 -0
  641. package/deps/librdkafka/tests/sockem.h +85 -0
  642. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  643. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  644. package/deps/librdkafka/tests/test.c +7778 -0
  645. package/deps/librdkafka/tests/test.conf.example +27 -0
  646. package/deps/librdkafka/tests/test.h +1028 -0
  647. package/deps/librdkafka/tests/testcpp.cpp +131 -0
  648. package/deps/librdkafka/tests/testcpp.h +388 -0
  649. package/deps/librdkafka/tests/testshared.h +416 -0
  650. package/deps/librdkafka/tests/tools/README.md +4 -0
  651. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  652. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  653. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  654. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  655. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  656. package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
  657. package/deps/librdkafka/tests/until-fail.sh +87 -0
  658. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  659. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  660. package/deps/librdkafka/vcpkg.json +23 -0
  661. package/deps/librdkafka/win32/README.md +5 -0
  662. package/deps/librdkafka/win32/build-package.bat +3 -0
  663. package/deps/librdkafka/win32/build.bat +19 -0
  664. package/deps/librdkafka/win32/common.vcxproj +84 -0
  665. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  666. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  667. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  668. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  669. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  670. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  671. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  672. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  673. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  674. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  675. package/deps/librdkafka/win32/push-package.bat +4 -0
  676. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  677. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  678. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  679. package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
  680. package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
  681. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  682. package/deps/librdkafka/win32/tests/tests.vcxproj +253 -0
  683. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  684. package/deps/librdkafka/win32/wingetopt.c +564 -0
  685. package/deps/librdkafka/win32/wingetopt.h +101 -0
  686. package/deps/librdkafka/win32/wintime.h +33 -0
  687. package/deps/librdkafka.gyp +62 -0
  688. package/lib/admin.js +233 -0
  689. package/lib/client.js +573 -0
  690. package/lib/error.js +500 -0
  691. package/lib/index.js +34 -0
  692. package/lib/kafka-consumer-stream.js +397 -0
  693. package/lib/kafka-consumer.js +698 -0
  694. package/lib/producer/high-level-producer.js +323 -0
  695. package/lib/producer-stream.js +307 -0
  696. package/lib/producer.js +375 -0
  697. package/lib/tools/ref-counter.js +52 -0
  698. package/lib/topic-partition.js +88 -0
  699. package/lib/topic.js +42 -0
  700. package/lib/util.js +29 -0
  701. package/package.json +61 -0
  702. package/prebuilds/darwin-arm64/@point3+node-rdkafka.node +0 -0
  703. package/prebuilds/linux-x64/@point3+node-rdkafka.node +0 -0
  704. package/util/configure.js +30 -0
  705. package/util/get-env.js +6 -0
  706. package/util/test-compile.js +11 -0
  707. package/util/test-producer-delivery.js +100 -0
@@ -0,0 +1,801 @@
1
+ /*
2
+ * sockem - socket-level network emulation
3
+ *
4
+ * Copyright (c) 2016-2022, Magnus Edenhill, Andreas Smas
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ *
10
+ * 1. Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ * this list of conditions and the following disclaimer in the documentation
14
+ * and/or other materials provided with the distribution.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ * POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ #define _GNU_SOURCE /* for strdupa() and RTLD_NEXT */
30
+ #include <errno.h>
31
+ #include <unistd.h>
32
+ #include <stdlib.h>
33
+ #include <string.h>
34
+ #include <stdarg.h>
35
+ #include <stdio.h>
36
+ #include <poll.h>
37
+ #include <assert.h>
38
+ #include <netinet/in.h>
39
+ #include <dlfcn.h>
40
+
41
+ #include "sockem.h"
42
+
43
+ #include <sys/queue.h>
44
+
45
+ #ifdef __APPLE__
46
+ #include <sys/time.h> /* for gettimeofday() */
47
+ #endif
48
+
49
+ #ifdef _WIN32
50
+ #define socket_errno() WSAGetLastError()
51
+ #else
52
+ #define socket_errno() errno
53
+ #define SOCKET_ERROR -1
54
+ #endif
55
+
56
+ #ifndef strdupa
57
+ #define strdupa(s) \
58
+ ({ \
59
+ const char *_s = (s); \
60
+ size_t _len = strlen(_s) + 1; \
61
+ char *_d = (char *)alloca(_len); \
62
+ (char *)memcpy(_d, _s, _len); \
63
+ })
64
+ #endif
65
+
66
+ #include <pthread.h>
67
+ typedef pthread_mutex_t mtx_t;
68
+ #define mtx_init(M) pthread_mutex_init(M, NULL)
69
+ #define mtx_destroy(M) pthread_mutex_destroy(M)
70
+ #define mtx_lock(M) pthread_mutex_lock(M)
71
+ #define mtx_unlock(M) pthread_mutex_unlock(M)
72
+
73
+ typedef pthread_t thrd_t;
74
+ #define thrd_create(THRD, START_ROUTINE, ARG) \
75
+ pthread_create(THRD, NULL, START_ROUTINE, ARG)
76
+ #define thrd_join0(THRD) pthread_join(THRD, NULL)
77
+
78
+
79
+ static mtx_t sockem_lock;
80
+ static LIST_HEAD(, sockem_s) sockems;
81
+
82
+ static pthread_once_t sockem_once = PTHREAD_ONCE_INIT;
83
+ static char *sockem_conf_str = "";
84
+
85
+ typedef int64_t sockem_ts_t;
86
+
87
+
88
+ #ifdef LIBSOCKEM_PRELOAD
89
+ static int (*sockem_orig_connect)(int, const struct sockaddr *, socklen_t);
90
+ static int (*sockem_orig_close)(int);
91
+
92
+ #define sockem_close0(S) (sockem_orig_close(S))
93
+ #define sockem_connect0(S, A, AL) (sockem_orig_connect(S, A, AL))
94
+ #else
95
+ #define sockem_close0(S) close(S)
96
+ #define sockem_connect0(S, A, AL) connect(S, A, AL)
97
+ #endif
98
+
99
+
100
+ struct sockem_conf {
101
+ /* FIXME: these needs to be implemented */
102
+ int tx_thruput; /* app->peer bytes/second */
103
+ int rx_thruput; /* peer->app bytes/second */
104
+ int delay; /* latency in ms */
105
+ int jitter; /* latency variation in ms */
106
+ int debug; /* enable sockem printf debugging */
107
+ size_t recv_bufsz; /* recv chunk/buffer size */
108
+ int direct; /* direct forward, no delay or rate-limiting */
109
+ };
110
+
111
+
112
+ typedef struct sockem_buf_s {
113
+ TAILQ_ENTRY(sockem_buf_s) sb_link;
114
+ size_t sb_size;
115
+ size_t sb_of;
116
+ char *sb_data;
117
+ int64_t sb_at; /* Transmit at this absolute time. */
118
+ } sockem_buf_t;
119
+
120
+
121
+ struct sockem_s {
122
+ LIST_ENTRY(sockem_s) link;
123
+
124
+ enum {
125
+ /* Forwarder thread run states */
126
+ SOCKEM_INIT,
127
+ SOCKEM_START,
128
+ SOCKEM_RUN,
129
+ SOCKEM_TERM
130
+ } run;
131
+
132
+ int as; /* application's socket. */
133
+ int ls; /* internal application listen socket */
134
+ int ps; /* internal peer socket connecting sockem to the peer.*/
135
+
136
+ void *recv_buf; /* Receive buffer */
137
+ size_t recv_bufsz; /* .. size */
138
+
139
+ int linked; /* On sockems list */
140
+
141
+ thrd_t thrd; /* Forwarder thread */
142
+
143
+ mtx_t lock;
144
+
145
+ struct sockem_conf conf; /* application-set config.
146
+ * protected by .lock */
147
+
148
+ struct sockem_conf use; /* last copy of .conf
149
+ * local to skm thread */
150
+
151
+ TAILQ_HEAD(, sockem_buf_s)
152
+ bufs; /* Buffers in queue waiting for
153
+ * transmission (delayed) */
154
+
155
+ size_t bufs_size; /* Total number of bytes currently enqueued
156
+ * for transmission */
157
+ size_t bufs_size_max; /* Soft max threshold for bufs_size,
158
+ * when this value is exceeded the app fd
159
+ * is removed from the poll set until
160
+ * bufs_size falls below the threshold again. */
161
+ int poll_fd_cnt;
162
+ int64_t ts_last_fwd; /* For rate-limiter: timestamp of last forward */
163
+ };
164
+
165
+
166
+ static int sockem_vset(sockem_t *skm, va_list ap);
167
+
168
+
169
+ /**
170
+ * A microsecond monotonic clock
171
+ */
172
+ static __attribute__((unused)) __inline int64_t sockem_clock(void) {
173
+ #ifdef __APPLE__
174
+ /* No monotonic clock on Darwin */
175
+ struct timeval tv;
176
+ gettimeofday(&tv, NULL);
177
+ return ((int64_t)tv.tv_sec * 1000000LLU) + (int64_t)tv.tv_usec;
178
+ #elif defined(_WIN32)
179
+ return (int64_t)GetTickCount64() * 1000LLU;
180
+ #else
181
+ struct timespec ts;
182
+ clock_gettime(CLOCK_MONOTONIC, &ts);
183
+ return ((int64_t)ts.tv_sec * 1000000LLU) +
184
+ ((int64_t)ts.tv_nsec / 1000LLU);
185
+ #endif
186
+ }
187
+
188
+ /**
189
+ * @brief Initialize libsockem once.
190
+ */
191
+ static void sockem_init(void) {
192
+ mtx_init(&sockem_lock);
193
+ sockem_conf_str = getenv("SOCKEM_CONF");
194
+ if (!sockem_conf_str)
195
+ sockem_conf_str = "";
196
+ if (strstr(sockem_conf_str, "debug"))
197
+ fprintf(stderr, "%% libsockem pre-loaded (%s)\n",
198
+ sockem_conf_str);
199
+ #ifdef LIBSOCKEM_PRELOAD
200
+ sockem_orig_connect = dlsym(RTLD_NEXT, "connect");
201
+ sockem_orig_close = dlsym(RTLD_NEXT, "close");
202
+ #endif
203
+ }
204
+
205
+
206
+ /**
207
+ * @returns the maximum waittime in ms for poll(), at most 1000 ms.
208
+ * @remark lock must be held
209
+ */
210
+ static int sockem_calc_waittime(sockem_t *skm, int64_t now) {
211
+ const sockem_buf_t *sb;
212
+ int64_t r;
213
+
214
+ if (!(sb = TAILQ_FIRST(&skm->bufs)))
215
+ return 1000;
216
+ else if (now >= sb->sb_at || skm->use.direct)
217
+ return 0;
218
+ else if ((r = (sb->sb_at - now)) < 1000000) {
219
+ if (r < 1000)
220
+ return 1; /* Ceil to 1 to avoid busy-loop during
221
+ * last millisecond. */
222
+ else
223
+ return (int)(r / 1000);
224
+ } else
225
+ return 1000;
226
+ }
227
+
228
+
229
+ /**
230
+ * @brief Unlink and destroy a buffer
231
+ */
232
+ static void sockem_buf_destroy(sockem_t *skm, sockem_buf_t *sb) {
233
+ skm->bufs_size -= sb->sb_size - sb->sb_of;
234
+ TAILQ_REMOVE(&skm->bufs, sb, sb_link);
235
+ free(sb);
236
+ }
237
+
238
+ /**
239
+ * @brief Add delayed buffer to transmit.
240
+ */
241
+ static sockem_buf_t *
242
+ sockem_buf_add(sockem_t *skm, size_t size, const void *data) {
243
+ sockem_buf_t *sb;
244
+
245
+ skm->bufs_size += size;
246
+ if (skm->bufs_size > skm->bufs_size_max) {
247
+ /* No more buffer space, halt recv fd until
248
+ * queued buffers drop below threshold. */
249
+ skm->poll_fd_cnt = 1;
250
+ }
251
+
252
+ sb = malloc(sizeof(*sb) + size);
253
+
254
+ sb->sb_of = 0;
255
+ sb->sb_size = size;
256
+ sb->sb_data = (char *)(sb + 1);
257
+ sb->sb_at = sockem_clock() +
258
+ ((skm->use.delay + (skm->use.jitter / 2) /*FIXME*/) * 1000);
259
+ memcpy(sb->sb_data, data, size);
260
+
261
+ TAILQ_INSERT_TAIL(&skm->bufs, sb, sb_link);
262
+
263
+ return sb;
264
+ }
265
+
266
+
267
+ /**
268
+ * @brief Forward any delayed buffers that have passed their deadline
269
+ * @remark lock must be held but will be released momentarily while
270
+ * performing send syscall.
271
+ */
272
+ static int sockem_fwd_bufs(sockem_t *skm, int ofd) {
273
+ sockem_buf_t *sb;
274
+ int64_t now = sockem_clock();
275
+ size_t to_write;
276
+ int64_t elapsed;
277
+
278
+
279
+ if (skm->use.direct)
280
+ to_write = 1024 * 1024 * 100;
281
+ else if ((elapsed = now - skm->ts_last_fwd)) {
282
+ /* Calculate how many bytes to send to adhere to rate-limit */
283
+ to_write = (size_t)((double)skm->use.tx_thruput *
284
+ ((double)elapsed / 1000000.0));
285
+ } else
286
+ return 0;
287
+
288
+ while (to_write > 0 && (sb = TAILQ_FIRST(&skm->bufs)) &&
289
+ (skm->use.direct || sb->sb_at <= now)) {
290
+ ssize_t r;
291
+ size_t remain = sb->sb_size - sb->sb_of;
292
+ size_t wr = to_write < remain ? to_write : remain;
293
+
294
+ if (wr == 0)
295
+ break;
296
+
297
+ mtx_unlock(&skm->lock);
298
+
299
+ r = send(ofd, sb->sb_data + sb->sb_of, wr, 0);
300
+
301
+ mtx_lock(&skm->lock);
302
+
303
+ if (r == -1) {
304
+ if (errno == ENOBUFS || errno == EAGAIN ||
305
+ errno == EWOULDBLOCK)
306
+ return 0;
307
+ return -1;
308
+ }
309
+
310
+ skm->ts_last_fwd = now;
311
+
312
+ sb->sb_of += r;
313
+ to_write -= r;
314
+
315
+ if (sb->sb_of < sb->sb_size)
316
+ break;
317
+
318
+ sockem_buf_destroy(skm, sb);
319
+
320
+ now = sockem_clock();
321
+ }
322
+
323
+ /* Re-enable app fd poll if queued buffers are below threshold */
324
+ if (skm->bufs_size < skm->bufs_size_max)
325
+ skm->poll_fd_cnt = 2;
326
+
327
+ return 0;
328
+ }
329
+
330
+
331
+ /**
332
+ * @brief read from \p ifd, write to \p ofd in a blocking fashion.
333
+ *
334
+ * @returns the number of bytes forwarded, or -1 on error.
335
+ */
336
+ static int sockem_recv_fwd(sockem_t *skm, int ifd, int ofd, int direct) {
337
+ ssize_t r, wr;
338
+
339
+ r = recv(ifd, skm->recv_buf, skm->recv_bufsz, MSG_DONTWAIT);
340
+ if (r == -1) {
341
+ int serr = socket_errno();
342
+ if (serr == EAGAIN || serr == EWOULDBLOCK)
343
+ return 0;
344
+ return -1;
345
+
346
+ } else if (r == 0) {
347
+ /* Socket closed */
348
+ return -1;
349
+ }
350
+
351
+ if (direct) {
352
+ /* No delay, rate limit, or buffered data: send right away */
353
+ wr = send(ofd, skm->recv_buf, r, 0);
354
+ if (wr < r)
355
+ return -1;
356
+
357
+ return wr;
358
+ } else {
359
+ sockem_buf_add(skm, r, skm->recv_buf);
360
+ return r;
361
+ }
362
+ }
363
+
364
+
365
+ /**
366
+ * @brief Close all sockets and unsets ->run.
367
+ * @remark Preserves caller's errno.
368
+ * @remark lock must be held.
369
+ */
370
+ static void sockem_close_all(sockem_t *skm) {
371
+ int serr = socket_errno();
372
+
373
+ if (skm->ls != -1) {
374
+ sockem_close0(skm->ls);
375
+ skm->ls = -1;
376
+ }
377
+
378
+ if (skm->ps != -1) {
379
+ sockem_close0(skm->ps);
380
+ skm->ps = -1;
381
+ }
382
+
383
+ skm->run = SOCKEM_TERM;
384
+
385
+ errno = serr;
386
+ }
387
+
388
+
389
+ /**
390
+ * @brief Copy desired (app) config to internally use(d) configuration.
391
+ * @remark lock must be held
392
+ */
393
+ static __inline void sockem_conf_use(sockem_t *skm) {
394
+ skm->use = skm->conf;
395
+ /* Figure out if direct forward is to be used */
396
+ skm->use.direct = !(skm->use.delay || skm->use.jitter ||
397
+ (skm->use.tx_thruput < (1 << 30)));
398
+ }
399
+
400
+ /**
401
+ * @brief sockem internal per-socket forwarder thread
402
+ */
403
+ static void *sockem_run(void *arg) {
404
+ sockem_t *skm = arg;
405
+ int cs = -1;
406
+ int ls;
407
+ struct pollfd pfd[2];
408
+
409
+ mtx_lock(&skm->lock);
410
+ if (skm->run == SOCKEM_START)
411
+ skm->run = SOCKEM_RUN;
412
+ sockem_conf_use(skm);
413
+ ls = skm->ls;
414
+ mtx_unlock(&skm->lock);
415
+
416
+ skm->recv_bufsz = skm->use.recv_bufsz;
417
+ skm->recv_buf = malloc(skm->recv_bufsz);
418
+
419
+ /* Accept connection from sockfd in sockem_connect() */
420
+ cs = accept(ls, NULL, 0);
421
+ if (cs == -1) {
422
+ mtx_lock(&skm->lock);
423
+ if (skm->run == SOCKEM_TERM) {
424
+ /* App socket was closed. */
425
+ goto done;
426
+ }
427
+ fprintf(stderr, "%% sockem: accept(%d) failed: %s\n", ls,
428
+ strerror(socket_errno()));
429
+ mtx_unlock(&skm->lock);
430
+ assert(cs != -1);
431
+ }
432
+
433
+ /* Set up poll (blocking IO) */
434
+ memset(pfd, 0, sizeof(pfd));
435
+ pfd[1].fd = cs;
436
+ pfd[1].events = POLLIN;
437
+
438
+ mtx_lock(&skm->lock);
439
+ pfd[0].fd = skm->ps;
440
+ mtx_unlock(&skm->lock);
441
+ pfd[0].events = POLLIN;
442
+
443
+ skm->poll_fd_cnt = 2;
444
+
445
+ mtx_lock(&skm->lock);
446
+ while (skm->run == SOCKEM_RUN) {
447
+ int r;
448
+ int i;
449
+ int waittime = sockem_calc_waittime(skm, sockem_clock());
450
+
451
+ mtx_unlock(&skm->lock);
452
+ r = poll(pfd, skm->poll_fd_cnt, waittime);
453
+ if (r == -1)
454
+ break;
455
+
456
+ /* Send/forward delayed buffers */
457
+ mtx_lock(&skm->lock);
458
+ sockem_conf_use(skm);
459
+
460
+ if (sockem_fwd_bufs(skm, skm->ps) == -1) {
461
+ mtx_unlock(&skm->lock);
462
+ skm->run = SOCKEM_TERM;
463
+ break;
464
+ }
465
+ mtx_unlock(&skm->lock);
466
+
467
+ for (i = 0; r > 0 && i < 2; i++) {
468
+ if (pfd[i].revents & (POLLHUP | POLLERR)) {
469
+ skm->run = SOCKEM_TERM;
470
+
471
+ } else if (pfd[i].revents & POLLIN) {
472
+ if (sockem_recv_fwd(
473
+ skm, pfd[i].fd, pfd[i ^ 1].fd,
474
+ /* direct mode for app socket
475
+ * without delay, and always for
476
+ * peer socket (receive channel) */
477
+ i == 0 || (skm->use.direct &&
478
+ skm->bufs_size == 0)) ==
479
+ -1) {
480
+ skm->run = SOCKEM_TERM;
481
+ break;
482
+ }
483
+ }
484
+ }
485
+
486
+ mtx_lock(&skm->lock);
487
+ }
488
+ done:
489
+ if (cs != -1)
490
+ sockem_close0(cs);
491
+ sockem_close_all(skm);
492
+
493
+ mtx_unlock(&skm->lock);
494
+ free(skm->recv_buf);
495
+
496
+
497
+ return NULL;
498
+ }
499
+
500
+
501
+
502
+ /**
503
+ * @brief Connect socket \p s to \p addr
504
+ */
505
+ static int
506
+ sockem_do_connect(int s, const struct sockaddr *addr, socklen_t addrlen) {
507
+ int r;
508
+
509
+ r = sockem_connect0(s, addr, addrlen);
510
+ if (r == SOCKET_ERROR) {
511
+ int serr = socket_errno();
512
+ if (serr != EINPROGRESS
513
+ #ifdef _WIN32
514
+ && serr != WSAEWOULDBLOCK
515
+ #endif
516
+ ) {
517
+ #ifndef _WIN32
518
+ errno = serr;
519
+ #endif
520
+ return -1;
521
+ }
522
+ }
523
+
524
+ return 0;
525
+ }
526
+
527
+
528
+ sockem_t *sockem_connect(int sockfd,
529
+ const struct sockaddr *addr,
530
+ socklen_t addrlen,
531
+ ...) {
532
+ sockem_t *skm;
533
+ int ls, ps;
534
+ struct sockaddr_in6 sin6 = {.sin6_family = addr->sa_family};
535
+ socklen_t addrlen2 = addrlen;
536
+ va_list ap;
537
+
538
+ pthread_once(&sockem_once, sockem_init);
539
+
540
+ /* Create internal app listener socket */
541
+ ls = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
542
+ if (ls == -1)
543
+ return NULL;
544
+
545
+ if (bind(ls, (struct sockaddr *)&sin6, addrlen) == -1) {
546
+ sockem_close0(ls);
547
+ return NULL;
548
+ }
549
+
550
+ /* Get bound address */
551
+ if (getsockname(ls, (struct sockaddr *)&sin6, &addrlen2) == -1) {
552
+ sockem_close0(ls);
553
+ return NULL;
554
+ }
555
+
556
+ if (listen(ls, 1) == -1) {
557
+ sockem_close0(ls);
558
+ return NULL;
559
+ }
560
+
561
+ /* Create internal peer socket */
562
+ ps = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
563
+ if (ps == -1) {
564
+ sockem_close0(ls);
565
+ return NULL;
566
+ }
567
+
568
+ /* Connect to peer */
569
+ if (sockem_do_connect(ps, addr, addrlen) == -1) {
570
+ sockem_close0(ls);
571
+ sockem_close0(ps);
572
+ return NULL;
573
+ }
574
+
575
+ /* Create sockem handle */
576
+ skm = calloc(1, sizeof(*skm));
577
+ skm->as = sockfd;
578
+ skm->ls = ls;
579
+ skm->ps = ps;
580
+ skm->bufs_size_max = 16 * 1024 * 1024; /* 16kb of queue buffer */
581
+ TAILQ_INIT(&skm->bufs);
582
+ mtx_init(&skm->lock);
583
+
584
+ /* Default config */
585
+ skm->conf.rx_thruput = 1 << 30;
586
+ skm->conf.tx_thruput = 1 << 30;
587
+ skm->conf.delay = 0;
588
+ skm->conf.jitter = 0;
589
+ skm->conf.recv_bufsz = 1024 * 1024;
590
+ skm->conf.direct = 1;
591
+
592
+ /* Apply passed configuration */
593
+ va_start(ap, addrlen);
594
+ if (sockem_vset(skm, ap) == -1) {
595
+ va_end(ap);
596
+ sockem_close(skm);
597
+ return NULL;
598
+ }
599
+ va_end(ap);
600
+
601
+ mtx_lock(&skm->lock);
602
+ skm->run = SOCKEM_START;
603
+
604
+ /* Create pipe thread */
605
+ if (thrd_create(&skm->thrd, sockem_run, skm) != 0) {
606
+ mtx_unlock(&skm->lock);
607
+ sockem_close(skm);
608
+ return NULL;
609
+ }
610
+ mtx_unlock(&skm->lock);
611
+
612
+ /* Connect application socket to listen socket */
613
+ if (sockem_do_connect(sockfd, (struct sockaddr *)&sin6, addrlen2) ==
614
+ -1) {
615
+ sockem_close(skm);
616
+ return NULL;
617
+ }
618
+
619
+ mtx_lock(&sockem_lock);
620
+ LIST_INSERT_HEAD(&sockems, skm, link);
621
+ mtx_lock(&skm->lock);
622
+ skm->linked = 1;
623
+ mtx_unlock(&skm->lock);
624
+ mtx_unlock(&sockem_lock);
625
+
626
+ return skm;
627
+ }
628
+
629
+
630
+ /**
631
+ * @brief Purge/drop all queued buffers
632
+ */
633
+ static void sockem_bufs_purge(sockem_t *skm) {
634
+ sockem_buf_t *sb;
635
+
636
+ while ((sb = TAILQ_FIRST(&skm->bufs)))
637
+ sockem_buf_destroy(skm, sb);
638
+ }
639
+
640
+
641
+ void sockem_close(sockem_t *skm) {
642
+ mtx_lock(&sockem_lock);
643
+ mtx_lock(&skm->lock);
644
+ if (skm->linked)
645
+ LIST_REMOVE(skm, link);
646
+ mtx_unlock(&sockem_lock);
647
+
648
+ /* If thread is running let it close the sockets
649
+ * to avoid race condition. */
650
+ if (skm->run == SOCKEM_START || skm->run == SOCKEM_RUN)
651
+ skm->run = SOCKEM_TERM;
652
+ else
653
+ sockem_close_all(skm);
654
+
655
+ mtx_unlock(&skm->lock);
656
+
657
+ thrd_join0(skm->thrd);
658
+
659
+ sockem_bufs_purge(skm);
660
+
661
+ mtx_destroy(&skm->lock);
662
+
663
+
664
+ free(skm);
665
+ }
666
+
667
+
668
+ /**
669
+ * @brief Set single conf key.
670
+ * @remark lock must be held.
671
+ * @returns 0 on success or -1 if key is unknown
672
+ */
673
+ static int sockem_set0(sockem_t *skm, const char *key, int val) {
674
+ if (!strcmp(key, "rx.thruput") || !strcmp(key, "rx.throughput"))
675
+ skm->conf.rx_thruput = val;
676
+ else if (!strcmp(key, "tx.thruput") || !strcmp(key, "tx.throughput"))
677
+ skm->conf.tx_thruput = val;
678
+ else if (!strcmp(key, "delay"))
679
+ skm->conf.delay = val;
680
+ else if (!strcmp(key, "jitter"))
681
+ skm->conf.jitter = val;
682
+ else if (!strcmp(key, "rx.bufsz"))
683
+ skm->conf.recv_bufsz = val;
684
+ else if (!strcmp(key, "debug"))
685
+ skm->conf.debug = val;
686
+ else if (!strcmp(key, "true"))
687
+ ; /* dummy key for allowing non-empty but default config */
688
+ else if (!strchr(key, ',')) {
689
+ char *s = strdupa(key);
690
+ while (*s) {
691
+ char *t = strchr(s, ',');
692
+ char *d = strchr(s, '=');
693
+ if (t)
694
+ *t = '\0';
695
+ if (!d)
696
+ return -1;
697
+ *(d++) = '\0';
698
+
699
+ if (sockem_set0(skm, s, atoi(d)) == -1)
700
+ return -1;
701
+
702
+ if (!t)
703
+ break;
704
+ s += 1;
705
+ }
706
+ } else
707
+ return -1;
708
+
709
+ return 0;
710
+ }
711
+
712
+
713
+ /**
714
+ * @brief Set sockem config parameters
715
+ */
716
+ static int sockem_vset(sockem_t *skm, va_list ap) {
717
+ const char *key;
718
+ int val;
719
+
720
+ mtx_lock(&skm->lock);
721
+ while ((key = va_arg(ap, const char *))) {
722
+ val = va_arg(ap, int);
723
+ if (sockem_set0(skm, key, val) == -1) {
724
+ mtx_unlock(&skm->lock);
725
+ return -1;
726
+ }
727
+ }
728
+ mtx_unlock(&skm->lock);
729
+
730
+ return 0;
731
+ }
732
+
733
+ int sockem_set(sockem_t *skm, ...) {
734
+ va_list ap;
735
+ int r;
736
+
737
+ va_start(ap, skm);
738
+ r = sockem_vset(skm, ap);
739
+ va_end(ap);
740
+
741
+ return r;
742
+ }
743
+
744
+
745
+ sockem_t *sockem_find(int sockfd) {
746
+ sockem_t *skm;
747
+
748
+ pthread_once(&sockem_once, sockem_init);
749
+
750
+ mtx_lock(&sockem_lock);
751
+ LIST_FOREACH(skm, &sockems, link)
752
+ if (skm->as == sockfd)
753
+ break;
754
+ mtx_unlock(&sockem_lock);
755
+
756
+ return skm;
757
+ }
758
+
759
+
760
+ #ifdef LIBSOCKEM_PRELOAD
761
+ /**
762
+ * Provide overloading socket APIs and conf bootstrapping from env vars.
763
+ *
764
+ */
765
+
766
+
767
+
768
+ /**
769
+ * @brief connect(2) overload
770
+ */
771
+ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
772
+ sockem_t *skm;
773
+
774
+ pthread_once(&sockem_once, sockem_init);
775
+
776
+ skm = sockem_connect(sockfd, addr, addrlen, sockem_conf_str, 0, NULL);
777
+ if (!skm)
778
+ return -1;
779
+
780
+ return 0;
781
+ }
782
+
783
+ /**
784
+ * @brief close(2) overload
785
+ */
786
+ int close(int fd) {
787
+ sockem_t *skm;
788
+
789
+ pthread_once(&sockem_once, sockem_init);
790
+
791
+ mtx_lock(&sockem_lock);
792
+ skm = sockem_find(fd);
793
+
794
+ if (skm)
795
+ sockem_close(skm);
796
+ mtx_unlock(&sockem_lock);
797
+
798
+ return sockem_close0(fd);
799
+ }
800
+
801
+ #endif