@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.
- package/LICENSE.txt +20 -0
- package/README.md +636 -0
- package/binding.gyp +154 -0
- package/deps/librdkafka/.clang-format +136 -0
- package/deps/librdkafka/.clang-format-cpp +103 -0
- package/deps/librdkafka/.dir-locals.el +10 -0
- package/deps/librdkafka/.formatignore +33 -0
- package/deps/librdkafka/.gdbmacros +19 -0
- package/deps/librdkafka/.github/CODEOWNERS +1 -0
- package/deps/librdkafka/.github/ISSUE_TEMPLATE +34 -0
- package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
- package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
- package/deps/librdkafka/.semaphore/semaphore.yml +378 -0
- package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
- package/deps/librdkafka/CHANGELOG.md +2208 -0
- package/deps/librdkafka/CMakeLists.txt +291 -0
- package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
- package/deps/librdkafka/CONFIGURATION.md +209 -0
- package/deps/librdkafka/CONTRIBUTING.md +431 -0
- package/deps/librdkafka/Doxyfile +2375 -0
- package/deps/librdkafka/INTRODUCTION.md +2481 -0
- package/deps/librdkafka/LICENSE +26 -0
- package/deps/librdkafka/LICENSE.cjson +22 -0
- package/deps/librdkafka/LICENSE.crc32c +28 -0
- package/deps/librdkafka/LICENSE.fnv1a +18 -0
- package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
- package/deps/librdkafka/LICENSE.lz4 +26 -0
- package/deps/librdkafka/LICENSE.murmur2 +25 -0
- package/deps/librdkafka/LICENSE.nanopb +22 -0
- package/deps/librdkafka/LICENSE.opentelemetry +203 -0
- package/deps/librdkafka/LICENSE.pycrc +23 -0
- package/deps/librdkafka/LICENSE.queue +31 -0
- package/deps/librdkafka/LICENSE.regexp +5 -0
- package/deps/librdkafka/LICENSE.snappy +36 -0
- package/deps/librdkafka/LICENSE.tinycthread +26 -0
- package/deps/librdkafka/LICENSE.wingetopt +49 -0
- package/deps/librdkafka/LICENSES.txt +625 -0
- package/deps/librdkafka/Makefile +125 -0
- package/deps/librdkafka/README.md +199 -0
- package/deps/librdkafka/README.win32 +26 -0
- package/deps/librdkafka/STATISTICS.md +624 -0
- package/deps/librdkafka/configure +214 -0
- package/deps/librdkafka/configure.self +331 -0
- package/deps/librdkafka/debian/changelog +111 -0
- package/deps/librdkafka/debian/compat +1 -0
- package/deps/librdkafka/debian/control +71 -0
- package/deps/librdkafka/debian/copyright +99 -0
- package/deps/librdkafka/debian/gbp.conf +9 -0
- package/deps/librdkafka/debian/librdkafka++1.install +1 -0
- package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
- package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
- package/deps/librdkafka/debian/librdkafka1.docs +5 -0
- package/deps/librdkafka/debian/librdkafka1.install +1 -0
- package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
- package/deps/librdkafka/debian/rules +19 -0
- package/deps/librdkafka/debian/source/format +1 -0
- package/deps/librdkafka/debian/watch +2 -0
- package/deps/librdkafka/dev-conf.sh +123 -0
- package/deps/librdkafka/examples/CMakeLists.txt +79 -0
- package/deps/librdkafka/examples/Makefile +167 -0
- package/deps/librdkafka/examples/README.md +42 -0
- package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
- package/deps/librdkafka/examples/consumer.c +271 -0
- package/deps/librdkafka/examples/delete_records.c +233 -0
- package/deps/librdkafka/examples/describe_cluster.c +322 -0
- package/deps/librdkafka/examples/describe_consumer_groups.c +455 -0
- package/deps/librdkafka/examples/describe_topics.c +427 -0
- package/deps/librdkafka/examples/elect_leaders.c +317 -0
- package/deps/librdkafka/examples/globals.json +11 -0
- package/deps/librdkafka/examples/idempotent_producer.c +344 -0
- package/deps/librdkafka/examples/incremental_alter_configs.c +347 -0
- package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +945 -0
- package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
- package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
- package/deps/librdkafka/examples/list_offsets.c +327 -0
- package/deps/librdkafka/examples/misc.c +287 -0
- package/deps/librdkafka/examples/openssl_engine_example.cpp +248 -0
- package/deps/librdkafka/examples/producer.c +251 -0
- package/deps/librdkafka/examples/producer.cpp +228 -0
- package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
- package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
- package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
- package/deps/librdkafka/examples/rdkafka_example.c +853 -0
- package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
- package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
- package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
- package/deps/librdkafka/examples/transactions.c +665 -0
- package/deps/librdkafka/examples/user_scram.c +491 -0
- package/deps/librdkafka/examples/win_ssl_cert_store.cpp +396 -0
- package/deps/librdkafka/lds-gen.py +73 -0
- package/deps/librdkafka/mainpage.doxy +40 -0
- package/deps/librdkafka/mklove/Makefile.base +329 -0
- package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
- package/deps/librdkafka/mklove/modules/configure.base +2484 -0
- package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
- package/deps/librdkafka/mklove/modules/configure.cc +186 -0
- package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
- package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
- package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
- package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
- package/deps/librdkafka/mklove/modules/configure.host +132 -0
- package/deps/librdkafka/mklove/modules/configure.lib +49 -0
- package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
- package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
- package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
- package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
- package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
- package/deps/librdkafka/mklove/modules/configure.pic +16 -0
- package/deps/librdkafka/mklove/modules/configure.socket +20 -0
- package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
- package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
- package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
- package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
- package/deps/librdkafka/packaging/RELEASE.md +319 -0
- package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
- package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
- package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
- package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
- package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
- package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
- package/deps/librdkafka/packaging/cmake/README.md +38 -0
- package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
- package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
- package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
- package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
- package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
- package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
- package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
- package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
- package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
- package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
- package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
- package/deps/librdkafka/packaging/cp/README.md +16 -0
- package/deps/librdkafka/packaging/cp/check_features.c +72 -0
- package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
- package/deps/librdkafka/packaging/cp/verify-packages.sh +69 -0
- package/deps/librdkafka/packaging/cp/verify-rpm.sh +32 -0
- package/deps/librdkafka/packaging/debian/changelog +66 -0
- package/deps/librdkafka/packaging/debian/compat +1 -0
- package/deps/librdkafka/packaging/debian/control +49 -0
- package/deps/librdkafka/packaging/debian/copyright +84 -0
- package/deps/librdkafka/packaging/debian/docs +5 -0
- package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
- package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
- package/deps/librdkafka/packaging/debian/rules +19 -0
- package/deps/librdkafka/packaging/debian/source/format +1 -0
- package/deps/librdkafka/packaging/debian/watch +2 -0
- package/deps/librdkafka/packaging/get_version.py +21 -0
- package/deps/librdkafka/packaging/homebrew/README.md +15 -0
- package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
- package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
- package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
- package/deps/librdkafka/packaging/mingw-w64/export-variables.sh +13 -0
- package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
- package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
- package/deps/librdkafka/packaging/nuget/README.md +84 -0
- package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
- package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
- package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
- package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
- package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
- package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
- package/deps/librdkafka/packaging/nuget/release.py +167 -0
- package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
- package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
- package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
- package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
- package/deps/librdkafka/packaging/rpm/Makefile +92 -0
- package/deps/librdkafka/packaging/rpm/README.md +23 -0
- package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
- package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
- package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
- package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
- package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
- package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
- package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
- package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
- package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
- package/deps/librdkafka/packaging/tools/Dockerfile +31 -0
- package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +12 -0
- package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
- package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
- package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
- package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
- package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
- package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
- package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
- package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
- package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
- package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
- package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
- package/deps/librdkafka/packaging/tools/style-format.sh +149 -0
- package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
- package/deps/librdkafka/service.yml +172 -0
- package/deps/librdkafka/src/CMakeLists.txt +374 -0
- package/deps/librdkafka/src/Makefile +103 -0
- package/deps/librdkafka/src/README.lz4.md +30 -0
- package/deps/librdkafka/src/cJSON.c +2834 -0
- package/deps/librdkafka/src/cJSON.h +398 -0
- package/deps/librdkafka/src/crc32c.c +430 -0
- package/deps/librdkafka/src/crc32c.h +38 -0
- package/deps/librdkafka/src/generate_proto.sh +66 -0
- package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
- package/deps/librdkafka/src/lz4.c +2727 -0
- package/deps/librdkafka/src/lz4.h +842 -0
- package/deps/librdkafka/src/lz4frame.c +2078 -0
- package/deps/librdkafka/src/lz4frame.h +692 -0
- package/deps/librdkafka/src/lz4frame_static.h +47 -0
- package/deps/librdkafka/src/lz4hc.c +1631 -0
- package/deps/librdkafka/src/lz4hc.h +413 -0
- package/deps/librdkafka/src/nanopb/pb.h +917 -0
- package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
- package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
- package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
- package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
- package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
- package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
- package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
- package/deps/librdkafka/src/queue.h +850 -0
- package/deps/librdkafka/src/rd.h +584 -0
- package/deps/librdkafka/src/rdaddr.c +255 -0
- package/deps/librdkafka/src/rdaddr.h +202 -0
- package/deps/librdkafka/src/rdatomic.h +230 -0
- package/deps/librdkafka/src/rdavg.h +260 -0
- package/deps/librdkafka/src/rdavl.c +210 -0
- package/deps/librdkafka/src/rdavl.h +250 -0
- package/deps/librdkafka/src/rdbase64.c +200 -0
- package/deps/librdkafka/src/rdbase64.h +43 -0
- package/deps/librdkafka/src/rdbuf.c +1884 -0
- package/deps/librdkafka/src/rdbuf.h +375 -0
- package/deps/librdkafka/src/rdcrc32.c +114 -0
- package/deps/librdkafka/src/rdcrc32.h +170 -0
- package/deps/librdkafka/src/rddl.c +179 -0
- package/deps/librdkafka/src/rddl.h +43 -0
- package/deps/librdkafka/src/rdendian.h +175 -0
- package/deps/librdkafka/src/rdfloat.h +67 -0
- package/deps/librdkafka/src/rdfnv1a.c +113 -0
- package/deps/librdkafka/src/rdfnv1a.h +35 -0
- package/deps/librdkafka/src/rdgz.c +120 -0
- package/deps/librdkafka/src/rdgz.h +46 -0
- package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
- package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
- package/deps/librdkafka/src/rdhttp.c +830 -0
- package/deps/librdkafka/src/rdhttp.h +101 -0
- package/deps/librdkafka/src/rdinterval.h +177 -0
- package/deps/librdkafka/src/rdkafka.c +5505 -0
- package/deps/librdkafka/src/rdkafka.h +10686 -0
- package/deps/librdkafka/src/rdkafka_admin.c +9794 -0
- package/deps/librdkafka/src/rdkafka_admin.h +661 -0
- package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
- package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
- package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
- package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
- package/deps/librdkafka/src/rdkafka_aux.c +409 -0
- package/deps/librdkafka/src/rdkafka_aux.h +174 -0
- package/deps/librdkafka/src/rdkafka_background.c +221 -0
- package/deps/librdkafka/src/rdkafka_broker.c +6337 -0
- package/deps/librdkafka/src/rdkafka_broker.h +744 -0
- package/deps/librdkafka/src/rdkafka_buf.c +543 -0
- package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
- package/deps/librdkafka/src/rdkafka_cert.c +576 -0
- package/deps/librdkafka/src/rdkafka_cert.h +62 -0
- package/deps/librdkafka/src/rdkafka_cgrp.c +7587 -0
- package/deps/librdkafka/src/rdkafka_cgrp.h +477 -0
- package/deps/librdkafka/src/rdkafka_conf.c +4880 -0
- package/deps/librdkafka/src/rdkafka_conf.h +732 -0
- package/deps/librdkafka/src/rdkafka_confval.h +97 -0
- package/deps/librdkafka/src/rdkafka_coord.c +623 -0
- package/deps/librdkafka/src/rdkafka_coord.h +132 -0
- package/deps/librdkafka/src/rdkafka_error.c +228 -0
- package/deps/librdkafka/src/rdkafka_error.h +80 -0
- package/deps/librdkafka/src/rdkafka_event.c +502 -0
- package/deps/librdkafka/src/rdkafka_event.h +126 -0
- package/deps/librdkafka/src/rdkafka_feature.c +898 -0
- package/deps/librdkafka/src/rdkafka_feature.h +104 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +1422 -0
- package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
- package/deps/librdkafka/src/rdkafka_header.c +220 -0
- package/deps/librdkafka/src/rdkafka_header.h +76 -0
- package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
- package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
- package/deps/librdkafka/src/rdkafka_int.h +1260 -0
- package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
- package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
- package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
- package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
- package/deps/librdkafka/src/rdkafka_metadata.c +2209 -0
- package/deps/librdkafka/src/rdkafka_metadata.h +345 -0
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
- package/deps/librdkafka/src/rdkafka_mock.c +3661 -0
- package/deps/librdkafka/src/rdkafka_mock.h +610 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1876 -0
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +3113 -0
- package/deps/librdkafka/src/rdkafka_mock_int.h +710 -0
- package/deps/librdkafka/src/rdkafka_msg.c +2589 -0
- package/deps/librdkafka/src/rdkafka_msg.h +614 -0
- package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
- package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
- package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
- package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
- package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
- package/deps/librdkafka/src/rdkafka_offset.h +150 -0
- package/deps/librdkafka/src/rdkafka_op.c +997 -0
- package/deps/librdkafka/src/rdkafka_op.h +858 -0
- package/deps/librdkafka/src/rdkafka_partition.c +4896 -0
- package/deps/librdkafka/src/rdkafka_partition.h +1182 -0
- package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
- package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
- package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
- package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
- package/deps/librdkafka/src/rdkafka_proto.h +736 -0
- package/deps/librdkafka/src/rdkafka_protocol.h +128 -0
- package/deps/librdkafka/src/rdkafka_queue.c +1230 -0
- package/deps/librdkafka/src/rdkafka_queue.h +1220 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
- package/deps/librdkafka/src/rdkafka_request.c +7089 -0
- package/deps/librdkafka/src/rdkafka_request.h +732 -0
- package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
- package/deps/librdkafka/src/rdkafka_sasl.c +530 -0
- package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
- package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
- package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1666 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +47 -0
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
- package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
- package/deps/librdkafka/src/rdkafka_ssl.c +2129 -0
- package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
- package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +760 -0
- package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +997 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
- package/deps/librdkafka/src/rdkafka_timer.c +402 -0
- package/deps/librdkafka/src/rdkafka_timer.h +117 -0
- package/deps/librdkafka/src/rdkafka_topic.c +2161 -0
- package/deps/librdkafka/src/rdkafka_topic.h +334 -0
- package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
- package/deps/librdkafka/src/rdkafka_transport.h +99 -0
- package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
- package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
- package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
- package/deps/librdkafka/src/rdlist.c +576 -0
- package/deps/librdkafka/src/rdlist.h +434 -0
- package/deps/librdkafka/src/rdlog.c +89 -0
- package/deps/librdkafka/src/rdlog.h +41 -0
- package/deps/librdkafka/src/rdmap.c +508 -0
- package/deps/librdkafka/src/rdmap.h +492 -0
- package/deps/librdkafka/src/rdmurmur2.c +167 -0
- package/deps/librdkafka/src/rdmurmur2.h +35 -0
- package/deps/librdkafka/src/rdports.c +61 -0
- package/deps/librdkafka/src/rdports.h +38 -0
- package/deps/librdkafka/src/rdposix.h +250 -0
- package/deps/librdkafka/src/rdrand.c +80 -0
- package/deps/librdkafka/src/rdrand.h +43 -0
- package/deps/librdkafka/src/rdregex.c +156 -0
- package/deps/librdkafka/src/rdregex.h +43 -0
- package/deps/librdkafka/src/rdsignal.h +57 -0
- package/deps/librdkafka/src/rdstring.c +645 -0
- package/deps/librdkafka/src/rdstring.h +98 -0
- package/deps/librdkafka/src/rdsysqueue.h +404 -0
- package/deps/librdkafka/src/rdtime.h +356 -0
- package/deps/librdkafka/src/rdtypes.h +86 -0
- package/deps/librdkafka/src/rdunittest.c +549 -0
- package/deps/librdkafka/src/rdunittest.h +232 -0
- package/deps/librdkafka/src/rdvarint.c +134 -0
- package/deps/librdkafka/src/rdvarint.h +165 -0
- package/deps/librdkafka/src/rdwin32.h +382 -0
- package/deps/librdkafka/src/rdxxhash.c +1030 -0
- package/deps/librdkafka/src/rdxxhash.h +328 -0
- package/deps/librdkafka/src/regexp.c +1352 -0
- package/deps/librdkafka/src/regexp.h +41 -0
- package/deps/librdkafka/src/snappy.c +1866 -0
- package/deps/librdkafka/src/snappy.h +62 -0
- package/deps/librdkafka/src/snappy_compat.h +138 -0
- package/deps/librdkafka/src/statistics_schema.json +444 -0
- package/deps/librdkafka/src/tinycthread.c +932 -0
- package/deps/librdkafka/src/tinycthread.h +503 -0
- package/deps/librdkafka/src/tinycthread_extra.c +199 -0
- package/deps/librdkafka/src/tinycthread_extra.h +212 -0
- package/deps/librdkafka/src/win32_config.h +58 -0
- package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
- package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
- package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
- package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
- package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
- package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
- package/deps/librdkafka/src-cpp/Makefile +55 -0
- package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
- package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
- package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
- package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
- package/deps/librdkafka/src-cpp/README.md +16 -0
- package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
- package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
- package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
- package/deps/librdkafka/tests/0000-unittests.c +72 -0
- package/deps/librdkafka/tests/0001-multiobj.c +102 -0
- package/deps/librdkafka/tests/0002-unkpart.c +244 -0
- package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
- package/deps/librdkafka/tests/0004-conf.c +934 -0
- package/deps/librdkafka/tests/0005-order.c +133 -0
- package/deps/librdkafka/tests/0006-symbols.c +163 -0
- package/deps/librdkafka/tests/0007-autotopic.c +136 -0
- package/deps/librdkafka/tests/0008-reqacks.c +179 -0
- package/deps/librdkafka/tests/0009-mock_cluster.c +97 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
- package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
- package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
- package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
- package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
- package/deps/librdkafka/tests/0016-client_swname.c +181 -0
- package/deps/librdkafka/tests/0017-compression.c +140 -0
- package/deps/librdkafka/tests/0018-cgrp_term.c +338 -0
- package/deps/librdkafka/tests/0019-list_groups.c +289 -0
- package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
- package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +279 -0
- package/deps/librdkafka/tests/0025-timers.c +147 -0
- package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
- package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
- package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
- package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
- package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
- package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
- package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
- package/deps/librdkafka/tests/0035-api_version.c +73 -0
- package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
- package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
- package/deps/librdkafka/tests/0038-performance.c +121 -0
- package/deps/librdkafka/tests/0039-event.c +284 -0
- package/deps/librdkafka/tests/0040-io_event.c +257 -0
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
- package/deps/librdkafka/tests/0042-many_topics.c +252 -0
- package/deps/librdkafka/tests/0043-no_connection.c +77 -0
- package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
- package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
- package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
- package/deps/librdkafka/tests/0048-partitioner.c +283 -0
- package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
- package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
- package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
- package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
- package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
- package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
- package/deps/librdkafka/tests/0058-log.cpp +123 -0
- package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
- package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
- package/deps/librdkafka/tests/0062-stats_event.c +126 -0
- package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
- package/deps/librdkafka/tests/0064-interceptors.c +481 -0
- package/deps/librdkafka/tests/0065-yield.cpp +140 -0
- package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
- package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
- package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
- package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
- package/deps/librdkafka/tests/0073-headers.c +381 -0
- package/deps/librdkafka/tests/0074-producev.c +87 -0
- package/deps/librdkafka/tests/0075-retry.c +290 -0
- package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
- package/deps/librdkafka/tests/0077-compaction.c +363 -0
- package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
- package/deps/librdkafka/tests/0079-fork.c +93 -0
- package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
- package/deps/librdkafka/tests/0081-admin.c +5633 -0
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
- package/deps/librdkafka/tests/0083-cb_event.c +233 -0
- package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
- package/deps/librdkafka/tests/0085-headers.cpp +392 -0
- package/deps/librdkafka/tests/0086-purge.c +368 -0
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
- package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
- package/deps/librdkafka/tests/0090-idempotence.c +171 -0
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
- package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
- package/deps/librdkafka/tests/0093-holb.c +200 -0
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
- package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +658 -0
- package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
- package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
- package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
- package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
- package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
- package/deps/librdkafka/tests/0103-transactions.c +1383 -0
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
- package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
- package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
- package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
- package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
- package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
- package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
- package/deps/librdkafka/tests/0121-clusterid.c +115 -0
- package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
- package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
- package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
- package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
- package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +528 -0
- package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
- package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
- package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
- package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
- package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
- package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
- package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
- package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
- package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
- package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +619 -0
- package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
- package/deps/librdkafka/tests/0142-reauthentication.c +515 -0
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
- package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
- package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
- package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
- package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
- package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
- package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
- package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
- package/deps/librdkafka/tests/0153-memberid.c +128 -0
- package/deps/librdkafka/tests/1000-unktopic.c +164 -0
- package/deps/librdkafka/tests/8000-idle.cpp +60 -0
- package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
- package/deps/librdkafka/tests/CMakeLists.txt +170 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
- package/deps/librdkafka/tests/Makefile +182 -0
- package/deps/librdkafka/tests/README.md +509 -0
- package/deps/librdkafka/tests/autotest.sh +33 -0
- package/deps/librdkafka/tests/backtrace.gdb +30 -0
- package/deps/librdkafka/tests/broker_version_tests.py +315 -0
- package/deps/librdkafka/tests/buildbox.sh +17 -0
- package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
- package/deps/librdkafka/tests/cluster_testing.py +191 -0
- package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
- package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
- package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
- package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
- package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
- package/deps/librdkafka/tests/fuzzers/README.md +31 -0
- package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
- package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
- package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
- package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
- package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
- package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
- package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
- package/deps/librdkafka/tests/java/Makefile +13 -0
- package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
- package/deps/librdkafka/tests/java/README.md +14 -0
- package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
- package/deps/librdkafka/tests/java/run-class.sh +11 -0
- package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
- package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
- package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
- package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
- package/deps/librdkafka/tests/performance_plot.py +115 -0
- package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
- package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
- package/deps/librdkafka/tests/requirements.txt +2 -0
- package/deps/librdkafka/tests/run-all-tests.sh +79 -0
- package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-test-batches.py +157 -0
- package/deps/librdkafka/tests/run-test.sh +140 -0
- package/deps/librdkafka/tests/rusage.c +249 -0
- package/deps/librdkafka/tests/sasl_test.py +289 -0
- package/deps/librdkafka/tests/scenarios/README.md +6 -0
- package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
- package/deps/librdkafka/tests/scenarios/default.json +5 -0
- package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
- package/deps/librdkafka/tests/sockem.c +801 -0
- package/deps/librdkafka/tests/sockem.h +85 -0
- package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
- package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
- package/deps/librdkafka/tests/test.c +7778 -0
- package/deps/librdkafka/tests/test.conf.example +27 -0
- package/deps/librdkafka/tests/test.h +1028 -0
- package/deps/librdkafka/tests/testcpp.cpp +131 -0
- package/deps/librdkafka/tests/testcpp.h +388 -0
- package/deps/librdkafka/tests/testshared.h +416 -0
- package/deps/librdkafka/tests/tools/README.md +4 -0
- package/deps/librdkafka/tests/tools/stats/README.md +21 -0
- package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
- package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
- package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
- package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
- package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
- package/deps/librdkafka/tests/until-fail.sh +87 -0
- package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
- package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
- package/deps/librdkafka/vcpkg.json +23 -0
- package/deps/librdkafka/win32/README.md +5 -0
- package/deps/librdkafka/win32/build-package.bat +3 -0
- package/deps/librdkafka/win32/build.bat +19 -0
- package/deps/librdkafka/win32/common.vcxproj +84 -0
- package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
- package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
- package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
- package/deps/librdkafka/win32/librdkafka.sln +226 -0
- package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
- package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
- package/deps/librdkafka/win32/msbuild.ps1 +15 -0
- package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
- package/deps/librdkafka/win32/package-zip.ps1 +46 -0
- package/deps/librdkafka/win32/packages/repositories.config +4 -0
- package/deps/librdkafka/win32/push-package.bat +4 -0
- package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
- package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
- package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
- package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
- package/deps/librdkafka/win32/tests/test.conf.example +25 -0
- package/deps/librdkafka/win32/tests/tests.vcxproj +253 -0
- package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
- package/deps/librdkafka/win32/wingetopt.c +564 -0
- package/deps/librdkafka/win32/wingetopt.h +101 -0
- package/deps/librdkafka/win32/wintime.h +33 -0
- package/deps/librdkafka.gyp +62 -0
- package/lib/admin.js +233 -0
- package/lib/client.js +573 -0
- package/lib/error.js +500 -0
- package/lib/index.js +34 -0
- package/lib/kafka-consumer-stream.js +397 -0
- package/lib/kafka-consumer.js +698 -0
- package/lib/producer/high-level-producer.js +323 -0
- package/lib/producer-stream.js +307 -0
- package/lib/producer.js +375 -0
- package/lib/tools/ref-counter.js +52 -0
- package/lib/topic-partition.js +88 -0
- package/lib/topic.js +42 -0
- package/lib/util.js +29 -0
- package/package.json +61 -0
- package/prebuilds/darwin-arm64/@point3+node-rdkafka.node +0 -0
- package/prebuilds/linux-x64/@point3+node-rdkafka.node +0 -0
- package/util/configure.js +30 -0
- package/util/get-env.js +6 -0
- package/util/test-compile.js +11 -0
- package/util/test-producer-delivery.js +100 -0
|
@@ -0,0 +1,1000 @@
|
|
|
1
|
+
/* pb_encode.c -- encode a protobuf using minimal resources
|
|
2
|
+
*
|
|
3
|
+
* 2011 Petteri Aimonen <jpa@kapsi.fi>
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "nanopb/pb.h"
|
|
7
|
+
#include "nanopb/pb_encode.h"
|
|
8
|
+
#include "nanopb/pb_common.h"
|
|
9
|
+
|
|
10
|
+
/* Use the GCC warn_unused_result attribute to check that all return values
|
|
11
|
+
* are propagated correctly. On other compilers and gcc before 3.4.0 just
|
|
12
|
+
* ignore the annotation.
|
|
13
|
+
*/
|
|
14
|
+
#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
|
|
15
|
+
#define checkreturn
|
|
16
|
+
#else
|
|
17
|
+
#define checkreturn __attribute__((warn_unused_result))
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
/**************************************
|
|
21
|
+
* Declarations internal to this file *
|
|
22
|
+
**************************************/
|
|
23
|
+
static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
|
|
24
|
+
static bool checkreturn encode_array(pb_ostream_t *stream, pb_field_iter_t *field);
|
|
25
|
+
static bool checkreturn pb_check_proto3_default_value(const pb_field_iter_t *field);
|
|
26
|
+
static bool checkreturn encode_basic_field(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
27
|
+
static bool checkreturn encode_callback_field(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
28
|
+
static bool checkreturn encode_field(pb_ostream_t *stream, pb_field_iter_t *field);
|
|
29
|
+
static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
30
|
+
static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension);
|
|
31
|
+
static bool checkreturn pb_encode_varint_32(pb_ostream_t *stream, uint32_t low, uint32_t high);
|
|
32
|
+
static bool checkreturn pb_enc_bool(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
33
|
+
static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
34
|
+
static bool checkreturn pb_enc_fixed(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
35
|
+
static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
36
|
+
static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
37
|
+
static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
38
|
+
static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_iter_t *field);
|
|
39
|
+
|
|
40
|
+
#ifdef PB_WITHOUT_64BIT
|
|
41
|
+
#define pb_int64_t int32_t
|
|
42
|
+
#define pb_uint64_t uint32_t
|
|
43
|
+
#else
|
|
44
|
+
#define pb_int64_t int64_t
|
|
45
|
+
#define pb_uint64_t uint64_t
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
/*******************************
|
|
49
|
+
* pb_ostream_t implementation *
|
|
50
|
+
*******************************/
|
|
51
|
+
|
|
52
|
+
static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count)
|
|
53
|
+
{
|
|
54
|
+
pb_byte_t *dest = (pb_byte_t*)stream->state;
|
|
55
|
+
stream->state = dest + count;
|
|
56
|
+
|
|
57
|
+
memcpy(dest, buf, count * sizeof(pb_byte_t));
|
|
58
|
+
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize)
|
|
63
|
+
{
|
|
64
|
+
pb_ostream_t stream;
|
|
65
|
+
#ifdef PB_BUFFER_ONLY
|
|
66
|
+
/* In PB_BUFFER_ONLY configuration the callback pointer is just int*.
|
|
67
|
+
* NULL pointer marks a sizing field, so put a non-NULL value to mark a buffer stream.
|
|
68
|
+
*/
|
|
69
|
+
static const int marker = 0;
|
|
70
|
+
stream.callback = ▮
|
|
71
|
+
#else
|
|
72
|
+
stream.callback = &buf_write;
|
|
73
|
+
#endif
|
|
74
|
+
stream.state = buf;
|
|
75
|
+
stream.max_size = bufsize;
|
|
76
|
+
stream.bytes_written = 0;
|
|
77
|
+
#ifndef PB_NO_ERRMSG
|
|
78
|
+
stream.errmsg = NULL;
|
|
79
|
+
#endif
|
|
80
|
+
return stream;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
bool checkreturn pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count)
|
|
84
|
+
{
|
|
85
|
+
if (count > 0 && stream->callback != NULL)
|
|
86
|
+
{
|
|
87
|
+
if (stream->bytes_written + count < stream->bytes_written ||
|
|
88
|
+
stream->bytes_written + count > stream->max_size)
|
|
89
|
+
{
|
|
90
|
+
PB_RETURN_ERROR(stream, "stream full");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
#ifdef PB_BUFFER_ONLY
|
|
94
|
+
if (!buf_write(stream, buf, count))
|
|
95
|
+
PB_RETURN_ERROR(stream, "io error");
|
|
96
|
+
#else
|
|
97
|
+
if (!stream->callback(stream, buf, count))
|
|
98
|
+
PB_RETURN_ERROR(stream, "io error");
|
|
99
|
+
#endif
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
stream->bytes_written += count;
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*************************
|
|
107
|
+
* Encode a single field *
|
|
108
|
+
*************************/
|
|
109
|
+
|
|
110
|
+
/* Read a bool value without causing undefined behavior even if the value
|
|
111
|
+
* is invalid. See issue #434 and
|
|
112
|
+
* https://stackoverflow.com/questions/27661768/weird-results-for-conditional
|
|
113
|
+
*/
|
|
114
|
+
static bool safe_read_bool(const void *pSize)
|
|
115
|
+
{
|
|
116
|
+
const char *p = (const char *)pSize;
|
|
117
|
+
size_t i;
|
|
118
|
+
for (i = 0; i < sizeof(bool); i++)
|
|
119
|
+
{
|
|
120
|
+
if (p[i] != 0)
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Encode a static array. Handles the size calculations and possible packing. */
|
|
127
|
+
static bool checkreturn encode_array(pb_ostream_t *stream, pb_field_iter_t *field)
|
|
128
|
+
{
|
|
129
|
+
pb_size_t i;
|
|
130
|
+
pb_size_t count;
|
|
131
|
+
#ifndef PB_ENCODE_ARRAYS_UNPACKED
|
|
132
|
+
size_t size;
|
|
133
|
+
#endif
|
|
134
|
+
|
|
135
|
+
count = *(pb_size_t*)field->pSize;
|
|
136
|
+
|
|
137
|
+
if (count == 0)
|
|
138
|
+
return true;
|
|
139
|
+
|
|
140
|
+
if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size)
|
|
141
|
+
PB_RETURN_ERROR(stream, "array max size exceeded");
|
|
142
|
+
|
|
143
|
+
#ifndef PB_ENCODE_ARRAYS_UNPACKED
|
|
144
|
+
/* We always pack arrays if the datatype allows it. */
|
|
145
|
+
if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE)
|
|
146
|
+
{
|
|
147
|
+
if (!pb_encode_tag(stream, PB_WT_STRING, field->tag))
|
|
148
|
+
return false;
|
|
149
|
+
|
|
150
|
+
/* Determine the total size of packed array. */
|
|
151
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32)
|
|
152
|
+
{
|
|
153
|
+
size = 4 * (size_t)count;
|
|
154
|
+
}
|
|
155
|
+
else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64)
|
|
156
|
+
{
|
|
157
|
+
size = 8 * (size_t)count;
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
{
|
|
161
|
+
pb_ostream_t sizestream = PB_OSTREAM_SIZING;
|
|
162
|
+
void *pData_orig = field->pData;
|
|
163
|
+
for (i = 0; i < count; i++)
|
|
164
|
+
{
|
|
165
|
+
if (!pb_enc_varint(&sizestream, field))
|
|
166
|
+
PB_RETURN_ERROR(stream, PB_GET_ERROR(&sizestream));
|
|
167
|
+
field->pData = (char*)field->pData + field->data_size;
|
|
168
|
+
}
|
|
169
|
+
field->pData = pData_orig;
|
|
170
|
+
size = sizestream.bytes_written;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!pb_encode_varint(stream, (pb_uint64_t)size))
|
|
174
|
+
return false;
|
|
175
|
+
|
|
176
|
+
if (stream->callback == NULL)
|
|
177
|
+
return pb_write(stream, NULL, size); /* Just sizing.. */
|
|
178
|
+
|
|
179
|
+
/* Write the data */
|
|
180
|
+
for (i = 0; i < count; i++)
|
|
181
|
+
{
|
|
182
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32 || PB_LTYPE(field->type) == PB_LTYPE_FIXED64)
|
|
183
|
+
{
|
|
184
|
+
if (!pb_enc_fixed(stream, field))
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
else
|
|
188
|
+
{
|
|
189
|
+
if (!pb_enc_varint(stream, field))
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
field->pData = (char*)field->pData + field->data_size;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else /* Unpacked fields */
|
|
197
|
+
#endif
|
|
198
|
+
{
|
|
199
|
+
for (i = 0; i < count; i++)
|
|
200
|
+
{
|
|
201
|
+
/* Normally the data is stored directly in the array entries, but
|
|
202
|
+
* for pointer-type string and bytes fields, the array entries are
|
|
203
|
+
* actually pointers themselves also. So we have to dereference once
|
|
204
|
+
* more to get to the actual data. */
|
|
205
|
+
if (PB_ATYPE(field->type) == PB_ATYPE_POINTER &&
|
|
206
|
+
(PB_LTYPE(field->type) == PB_LTYPE_STRING ||
|
|
207
|
+
PB_LTYPE(field->type) == PB_LTYPE_BYTES))
|
|
208
|
+
{
|
|
209
|
+
bool status;
|
|
210
|
+
void *pData_orig = field->pData;
|
|
211
|
+
field->pData = *(void* const*)field->pData;
|
|
212
|
+
|
|
213
|
+
if (!field->pData)
|
|
214
|
+
{
|
|
215
|
+
/* Null pointer in array is treated as empty string / bytes */
|
|
216
|
+
status = pb_encode_tag_for_field(stream, field) &&
|
|
217
|
+
pb_encode_varint(stream, 0);
|
|
218
|
+
}
|
|
219
|
+
else
|
|
220
|
+
{
|
|
221
|
+
status = encode_basic_field(stream, field);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
field->pData = pData_orig;
|
|
225
|
+
|
|
226
|
+
if (!status)
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
else
|
|
230
|
+
{
|
|
231
|
+
if (!encode_basic_field(stream, field))
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
field->pData = (char*)field->pData + field->data_size;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* In proto3, all fields are optional and are only encoded if their value is "non-zero".
|
|
242
|
+
* This function implements the check for the zero value. */
|
|
243
|
+
static bool checkreturn pb_check_proto3_default_value(const pb_field_iter_t *field)
|
|
244
|
+
{
|
|
245
|
+
pb_type_t type = field->type;
|
|
246
|
+
|
|
247
|
+
if (PB_ATYPE(type) == PB_ATYPE_STATIC)
|
|
248
|
+
{
|
|
249
|
+
if (PB_HTYPE(type) == PB_HTYPE_REQUIRED)
|
|
250
|
+
{
|
|
251
|
+
/* Required proto2 fields inside proto3 submessage, pretty rare case */
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
else if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
|
|
255
|
+
{
|
|
256
|
+
/* Repeated fields inside proto3 submessage: present if count != 0 */
|
|
257
|
+
return *(const pb_size_t*)field->pSize == 0;
|
|
258
|
+
}
|
|
259
|
+
else if (PB_HTYPE(type) == PB_HTYPE_ONEOF)
|
|
260
|
+
{
|
|
261
|
+
/* Oneof fields */
|
|
262
|
+
return *(const pb_size_t*)field->pSize == 0;
|
|
263
|
+
}
|
|
264
|
+
else if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->pSize != NULL)
|
|
265
|
+
{
|
|
266
|
+
/* Proto2 optional fields inside proto3 message, or proto3
|
|
267
|
+
* submessage fields. */
|
|
268
|
+
return safe_read_bool(field->pSize) == false;
|
|
269
|
+
}
|
|
270
|
+
else if (field->descriptor->default_value)
|
|
271
|
+
{
|
|
272
|
+
/* Proto3 messages do not have default values, but proto2 messages
|
|
273
|
+
* can contain optional fields without has_fields (generator option 'proto3').
|
|
274
|
+
* In this case they must always be encoded, to make sure that the
|
|
275
|
+
* non-zero default value is overwritten.
|
|
276
|
+
*/
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* Rest is proto3 singular fields */
|
|
281
|
+
if (PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE)
|
|
282
|
+
{
|
|
283
|
+
/* Simple integer / float fields */
|
|
284
|
+
pb_size_t i;
|
|
285
|
+
const char *p = (const char*)field->pData;
|
|
286
|
+
for (i = 0; i < field->data_size; i++)
|
|
287
|
+
{
|
|
288
|
+
if (p[i] != 0)
|
|
289
|
+
{
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
else if (PB_LTYPE(type) == PB_LTYPE_BYTES)
|
|
297
|
+
{
|
|
298
|
+
const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)field->pData;
|
|
299
|
+
return bytes->size == 0;
|
|
300
|
+
}
|
|
301
|
+
else if (PB_LTYPE(type) == PB_LTYPE_STRING)
|
|
302
|
+
{
|
|
303
|
+
return *(const char*)field->pData == '\0';
|
|
304
|
+
}
|
|
305
|
+
else if (PB_LTYPE(type) == PB_LTYPE_FIXED_LENGTH_BYTES)
|
|
306
|
+
{
|
|
307
|
+
/* Fixed length bytes is only empty if its length is fixed
|
|
308
|
+
* as 0. Which would be pretty strange, but we can check
|
|
309
|
+
* it anyway. */
|
|
310
|
+
return field->data_size == 0;
|
|
311
|
+
}
|
|
312
|
+
else if (PB_LTYPE_IS_SUBMSG(type))
|
|
313
|
+
{
|
|
314
|
+
/* Check all fields in the submessage to find if any of them
|
|
315
|
+
* are non-zero. The comparison cannot be done byte-per-byte
|
|
316
|
+
* because the C struct may contain padding bytes that must
|
|
317
|
+
* be skipped. Note that usually proto3 submessages have
|
|
318
|
+
* a separate has_field that is checked earlier in this if.
|
|
319
|
+
*/
|
|
320
|
+
pb_field_iter_t iter;
|
|
321
|
+
if (pb_field_iter_begin(&iter, field->submsg_desc, field->pData))
|
|
322
|
+
{
|
|
323
|
+
do
|
|
324
|
+
{
|
|
325
|
+
if (!pb_check_proto3_default_value(&iter))
|
|
326
|
+
{
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
} while (pb_field_iter_next(&iter));
|
|
330
|
+
}
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else if (PB_ATYPE(type) == PB_ATYPE_POINTER)
|
|
335
|
+
{
|
|
336
|
+
return field->pData == NULL;
|
|
337
|
+
}
|
|
338
|
+
else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK)
|
|
339
|
+
{
|
|
340
|
+
if (PB_LTYPE(type) == PB_LTYPE_EXTENSION)
|
|
341
|
+
{
|
|
342
|
+
const pb_extension_t *extension = *(const pb_extension_t* const *)field->pData;
|
|
343
|
+
return extension == NULL;
|
|
344
|
+
}
|
|
345
|
+
else if (field->descriptor->field_callback == pb_default_field_callback)
|
|
346
|
+
{
|
|
347
|
+
pb_callback_t *pCallback = (pb_callback_t*)field->pData;
|
|
348
|
+
return pCallback->funcs.encode == NULL;
|
|
349
|
+
}
|
|
350
|
+
else
|
|
351
|
+
{
|
|
352
|
+
return field->descriptor->field_callback == NULL;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return false; /* Not typically reached, safe default for weird special cases. */
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* Encode a field with static or pointer allocation, i.e. one whose data
|
|
360
|
+
* is available to the encoder directly. */
|
|
361
|
+
static bool checkreturn encode_basic_field(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
362
|
+
{
|
|
363
|
+
if (!field->pData)
|
|
364
|
+
{
|
|
365
|
+
/* Missing pointer field */
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (!pb_encode_tag_for_field(stream, field))
|
|
370
|
+
return false;
|
|
371
|
+
|
|
372
|
+
switch (PB_LTYPE(field->type))
|
|
373
|
+
{
|
|
374
|
+
case PB_LTYPE_BOOL:
|
|
375
|
+
return pb_enc_bool(stream, field);
|
|
376
|
+
|
|
377
|
+
case PB_LTYPE_VARINT:
|
|
378
|
+
case PB_LTYPE_UVARINT:
|
|
379
|
+
case PB_LTYPE_SVARINT:
|
|
380
|
+
return pb_enc_varint(stream, field);
|
|
381
|
+
|
|
382
|
+
case PB_LTYPE_FIXED32:
|
|
383
|
+
case PB_LTYPE_FIXED64:
|
|
384
|
+
return pb_enc_fixed(stream, field);
|
|
385
|
+
|
|
386
|
+
case PB_LTYPE_BYTES:
|
|
387
|
+
return pb_enc_bytes(stream, field);
|
|
388
|
+
|
|
389
|
+
case PB_LTYPE_STRING:
|
|
390
|
+
return pb_enc_string(stream, field);
|
|
391
|
+
|
|
392
|
+
case PB_LTYPE_SUBMESSAGE:
|
|
393
|
+
case PB_LTYPE_SUBMSG_W_CB:
|
|
394
|
+
return pb_enc_submessage(stream, field);
|
|
395
|
+
|
|
396
|
+
case PB_LTYPE_FIXED_LENGTH_BYTES:
|
|
397
|
+
return pb_enc_fixed_length_bytes(stream, field);
|
|
398
|
+
|
|
399
|
+
default:
|
|
400
|
+
PB_RETURN_ERROR(stream, "invalid field type");
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/* Encode a field with callback semantics. This means that a user function is
|
|
405
|
+
* called to provide and encode the actual data. */
|
|
406
|
+
static bool checkreturn encode_callback_field(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
407
|
+
{
|
|
408
|
+
if (field->descriptor->field_callback != NULL)
|
|
409
|
+
{
|
|
410
|
+
if (!field->descriptor->field_callback(NULL, stream, field))
|
|
411
|
+
PB_RETURN_ERROR(stream, "callback error");
|
|
412
|
+
}
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/* Encode a single field of any callback, pointer or static type. */
|
|
417
|
+
static bool checkreturn encode_field(pb_ostream_t *stream, pb_field_iter_t *field)
|
|
418
|
+
{
|
|
419
|
+
/* Check field presence */
|
|
420
|
+
if (PB_HTYPE(field->type) == PB_HTYPE_ONEOF)
|
|
421
|
+
{
|
|
422
|
+
if (*(const pb_size_t*)field->pSize != field->tag)
|
|
423
|
+
{
|
|
424
|
+
/* Different type oneof field */
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL)
|
|
429
|
+
{
|
|
430
|
+
if (field->pSize)
|
|
431
|
+
{
|
|
432
|
+
if (safe_read_bool(field->pSize) == false)
|
|
433
|
+
{
|
|
434
|
+
/* Missing optional field */
|
|
435
|
+
return true;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else if (PB_ATYPE(field->type) == PB_ATYPE_STATIC)
|
|
439
|
+
{
|
|
440
|
+
/* Proto3 singular field */
|
|
441
|
+
if (pb_check_proto3_default_value(field))
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if (!field->pData)
|
|
447
|
+
{
|
|
448
|
+
if (PB_HTYPE(field->type) == PB_HTYPE_REQUIRED)
|
|
449
|
+
PB_RETURN_ERROR(stream, "missing required field");
|
|
450
|
+
|
|
451
|
+
/* Pointer field set to NULL */
|
|
452
|
+
return true;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* Then encode field contents */
|
|
456
|
+
if (PB_ATYPE(field->type) == PB_ATYPE_CALLBACK)
|
|
457
|
+
{
|
|
458
|
+
return encode_callback_field(stream, field);
|
|
459
|
+
}
|
|
460
|
+
else if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED)
|
|
461
|
+
{
|
|
462
|
+
return encode_array(stream, field);
|
|
463
|
+
}
|
|
464
|
+
else
|
|
465
|
+
{
|
|
466
|
+
return encode_basic_field(stream, field);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/* Default handler for extension fields. Expects to have a pb_msgdesc_t
|
|
471
|
+
* pointer in the extension->type->arg field, pointing to a message with
|
|
472
|
+
* only one field in it. */
|
|
473
|
+
static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension)
|
|
474
|
+
{
|
|
475
|
+
pb_field_iter_t iter;
|
|
476
|
+
|
|
477
|
+
if (!pb_field_iter_begin_extension_const(&iter, extension))
|
|
478
|
+
PB_RETURN_ERROR(stream, "invalid extension");
|
|
479
|
+
|
|
480
|
+
return encode_field(stream, &iter);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
/* Walk through all the registered extensions and give them a chance
|
|
485
|
+
* to encode themselves. */
|
|
486
|
+
static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
487
|
+
{
|
|
488
|
+
const pb_extension_t *extension = *(const pb_extension_t* const *)field->pData;
|
|
489
|
+
|
|
490
|
+
while (extension)
|
|
491
|
+
{
|
|
492
|
+
bool status;
|
|
493
|
+
if (extension->type->encode)
|
|
494
|
+
status = extension->type->encode(stream, extension);
|
|
495
|
+
else
|
|
496
|
+
status = default_extension_encoder(stream, extension);
|
|
497
|
+
|
|
498
|
+
if (!status)
|
|
499
|
+
return false;
|
|
500
|
+
|
|
501
|
+
extension = extension->next;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/*********************
|
|
508
|
+
* Encode all fields *
|
|
509
|
+
*********************/
|
|
510
|
+
|
|
511
|
+
bool checkreturn pb_encode(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct)
|
|
512
|
+
{
|
|
513
|
+
pb_field_iter_t iter;
|
|
514
|
+
if (!pb_field_iter_begin_const(&iter, fields, src_struct))
|
|
515
|
+
return true; /* Empty message type */
|
|
516
|
+
|
|
517
|
+
do {
|
|
518
|
+
if (PB_LTYPE(iter.type) == PB_LTYPE_EXTENSION)
|
|
519
|
+
{
|
|
520
|
+
/* Special case for the extension field placeholder */
|
|
521
|
+
if (!encode_extension_field(stream, &iter))
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
524
|
+
else
|
|
525
|
+
{
|
|
526
|
+
/* Regular field */
|
|
527
|
+
if (!encode_field(stream, &iter))
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
} while (pb_field_iter_next(&iter));
|
|
531
|
+
|
|
532
|
+
return true;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
bool checkreturn pb_encode_ex(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct, unsigned int flags)
|
|
536
|
+
{
|
|
537
|
+
if ((flags & PB_ENCODE_DELIMITED) != 0)
|
|
538
|
+
{
|
|
539
|
+
return pb_encode_submessage(stream, fields, src_struct);
|
|
540
|
+
}
|
|
541
|
+
else if ((flags & PB_ENCODE_NULLTERMINATED) != 0)
|
|
542
|
+
{
|
|
543
|
+
const pb_byte_t zero = 0;
|
|
544
|
+
|
|
545
|
+
if (!pb_encode(stream, fields, src_struct))
|
|
546
|
+
return false;
|
|
547
|
+
|
|
548
|
+
return pb_write(stream, &zero, 1);
|
|
549
|
+
}
|
|
550
|
+
else
|
|
551
|
+
{
|
|
552
|
+
return pb_encode(stream, fields, src_struct);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
bool pb_get_encoded_size(size_t *size, const pb_msgdesc_t *fields, const void *src_struct)
|
|
557
|
+
{
|
|
558
|
+
pb_ostream_t stream = PB_OSTREAM_SIZING;
|
|
559
|
+
|
|
560
|
+
if (!pb_encode(&stream, fields, src_struct))
|
|
561
|
+
return false;
|
|
562
|
+
|
|
563
|
+
*size = stream.bytes_written;
|
|
564
|
+
return true;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/********************
|
|
568
|
+
* Helper functions *
|
|
569
|
+
********************/
|
|
570
|
+
|
|
571
|
+
/* This function avoids 64-bit shifts as they are quite slow on many platforms. */
|
|
572
|
+
static bool checkreturn pb_encode_varint_32(pb_ostream_t *stream, uint32_t low, uint32_t high)
|
|
573
|
+
{
|
|
574
|
+
size_t i = 0;
|
|
575
|
+
pb_byte_t buffer[10];
|
|
576
|
+
pb_byte_t byte = (pb_byte_t)(low & 0x7F);
|
|
577
|
+
low >>= 7;
|
|
578
|
+
|
|
579
|
+
while (i < 4 && (low != 0 || high != 0))
|
|
580
|
+
{
|
|
581
|
+
byte |= 0x80;
|
|
582
|
+
buffer[i++] = byte;
|
|
583
|
+
byte = (pb_byte_t)(low & 0x7F);
|
|
584
|
+
low >>= 7;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if (high)
|
|
588
|
+
{
|
|
589
|
+
byte = (pb_byte_t)(byte | ((high & 0x07) << 4));
|
|
590
|
+
high >>= 3;
|
|
591
|
+
|
|
592
|
+
while (high)
|
|
593
|
+
{
|
|
594
|
+
byte |= 0x80;
|
|
595
|
+
buffer[i++] = byte;
|
|
596
|
+
byte = (pb_byte_t)(high & 0x7F);
|
|
597
|
+
high >>= 7;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
buffer[i++] = byte;
|
|
602
|
+
|
|
603
|
+
return pb_write(stream, buffer, i);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
bool checkreturn pb_encode_varint(pb_ostream_t *stream, pb_uint64_t value)
|
|
607
|
+
{
|
|
608
|
+
if (value <= 0x7F)
|
|
609
|
+
{
|
|
610
|
+
/* Fast path: single byte */
|
|
611
|
+
pb_byte_t byte = (pb_byte_t)value;
|
|
612
|
+
return pb_write(stream, &byte, 1);
|
|
613
|
+
}
|
|
614
|
+
else
|
|
615
|
+
{
|
|
616
|
+
#ifdef PB_WITHOUT_64BIT
|
|
617
|
+
return pb_encode_varint_32(stream, value, 0);
|
|
618
|
+
#else
|
|
619
|
+
return pb_encode_varint_32(stream, (uint32_t)value, (uint32_t)(value >> 32));
|
|
620
|
+
#endif
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
bool checkreturn pb_encode_svarint(pb_ostream_t *stream, pb_int64_t value)
|
|
625
|
+
{
|
|
626
|
+
pb_uint64_t zigzagged;
|
|
627
|
+
pb_uint64_t mask = ((pb_uint64_t)-1) >> 1; /* Satisfy clang -fsanitize=integer */
|
|
628
|
+
if (value < 0)
|
|
629
|
+
zigzagged = ~(((pb_uint64_t)value & mask) << 1);
|
|
630
|
+
else
|
|
631
|
+
zigzagged = (pb_uint64_t)value << 1;
|
|
632
|
+
|
|
633
|
+
return pb_encode_varint(stream, zigzagged);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value)
|
|
637
|
+
{
|
|
638
|
+
#if defined(PB_LITTLE_ENDIAN_8BIT) && PB_LITTLE_ENDIAN_8BIT == 1
|
|
639
|
+
/* Fast path if we know that we're on little endian */
|
|
640
|
+
return pb_write(stream, (const pb_byte_t*)value, 4);
|
|
641
|
+
#else
|
|
642
|
+
uint32_t val = *(const uint32_t*)value;
|
|
643
|
+
pb_byte_t bytes[4];
|
|
644
|
+
bytes[0] = (pb_byte_t)(val & 0xFF);
|
|
645
|
+
bytes[1] = (pb_byte_t)((val >> 8) & 0xFF);
|
|
646
|
+
bytes[2] = (pb_byte_t)((val >> 16) & 0xFF);
|
|
647
|
+
bytes[3] = (pb_byte_t)((val >> 24) & 0xFF);
|
|
648
|
+
return pb_write(stream, bytes, 4);
|
|
649
|
+
#endif
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
#ifndef PB_WITHOUT_64BIT
|
|
653
|
+
bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value)
|
|
654
|
+
{
|
|
655
|
+
#if defined(PB_LITTLE_ENDIAN_8BIT) && PB_LITTLE_ENDIAN_8BIT == 1
|
|
656
|
+
/* Fast path if we know that we're on little endian */
|
|
657
|
+
return pb_write(stream, (const pb_byte_t*)value, 8);
|
|
658
|
+
#else
|
|
659
|
+
uint64_t val = *(const uint64_t*)value;
|
|
660
|
+
pb_byte_t bytes[8];
|
|
661
|
+
bytes[0] = (pb_byte_t)(val & 0xFF);
|
|
662
|
+
bytes[1] = (pb_byte_t)((val >> 8) & 0xFF);
|
|
663
|
+
bytes[2] = (pb_byte_t)((val >> 16) & 0xFF);
|
|
664
|
+
bytes[3] = (pb_byte_t)((val >> 24) & 0xFF);
|
|
665
|
+
bytes[4] = (pb_byte_t)((val >> 32) & 0xFF);
|
|
666
|
+
bytes[5] = (pb_byte_t)((val >> 40) & 0xFF);
|
|
667
|
+
bytes[6] = (pb_byte_t)((val >> 48) & 0xFF);
|
|
668
|
+
bytes[7] = (pb_byte_t)((val >> 56) & 0xFF);
|
|
669
|
+
return pb_write(stream, bytes, 8);
|
|
670
|
+
#endif
|
|
671
|
+
}
|
|
672
|
+
#endif
|
|
673
|
+
|
|
674
|
+
bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number)
|
|
675
|
+
{
|
|
676
|
+
pb_uint64_t tag = ((pb_uint64_t)field_number << 3) | wiretype;
|
|
677
|
+
return pb_encode_varint(stream, tag);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
bool pb_encode_tag_for_field ( pb_ostream_t* stream, const pb_field_iter_t* field )
|
|
681
|
+
{
|
|
682
|
+
pb_wire_type_t wiretype;
|
|
683
|
+
switch (PB_LTYPE(field->type))
|
|
684
|
+
{
|
|
685
|
+
case PB_LTYPE_BOOL:
|
|
686
|
+
case PB_LTYPE_VARINT:
|
|
687
|
+
case PB_LTYPE_UVARINT:
|
|
688
|
+
case PB_LTYPE_SVARINT:
|
|
689
|
+
wiretype = PB_WT_VARINT;
|
|
690
|
+
break;
|
|
691
|
+
|
|
692
|
+
case PB_LTYPE_FIXED32:
|
|
693
|
+
wiretype = PB_WT_32BIT;
|
|
694
|
+
break;
|
|
695
|
+
|
|
696
|
+
case PB_LTYPE_FIXED64:
|
|
697
|
+
wiretype = PB_WT_64BIT;
|
|
698
|
+
break;
|
|
699
|
+
|
|
700
|
+
case PB_LTYPE_BYTES:
|
|
701
|
+
case PB_LTYPE_STRING:
|
|
702
|
+
case PB_LTYPE_SUBMESSAGE:
|
|
703
|
+
case PB_LTYPE_SUBMSG_W_CB:
|
|
704
|
+
case PB_LTYPE_FIXED_LENGTH_BYTES:
|
|
705
|
+
wiretype = PB_WT_STRING;
|
|
706
|
+
break;
|
|
707
|
+
|
|
708
|
+
default:
|
|
709
|
+
PB_RETURN_ERROR(stream, "invalid field type");
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
return pb_encode_tag(stream, wiretype, field->tag);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
bool checkreturn pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size)
|
|
716
|
+
{
|
|
717
|
+
if (!pb_encode_varint(stream, (pb_uint64_t)size))
|
|
718
|
+
return false;
|
|
719
|
+
|
|
720
|
+
return pb_write(stream, buffer, size);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct)
|
|
724
|
+
{
|
|
725
|
+
/* First calculate the message size using a non-writing substream. */
|
|
726
|
+
pb_ostream_t substream = PB_OSTREAM_SIZING;
|
|
727
|
+
size_t size;
|
|
728
|
+
bool status;
|
|
729
|
+
|
|
730
|
+
if (!pb_encode(&substream, fields, src_struct))
|
|
731
|
+
{
|
|
732
|
+
#ifndef PB_NO_ERRMSG
|
|
733
|
+
stream->errmsg = substream.errmsg;
|
|
734
|
+
#endif
|
|
735
|
+
return false;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
size = substream.bytes_written;
|
|
739
|
+
|
|
740
|
+
if (!pb_encode_varint(stream, (pb_uint64_t)size))
|
|
741
|
+
return false;
|
|
742
|
+
|
|
743
|
+
if (stream->callback == NULL)
|
|
744
|
+
return pb_write(stream, NULL, size); /* Just sizing */
|
|
745
|
+
|
|
746
|
+
if (stream->bytes_written + size > stream->max_size)
|
|
747
|
+
PB_RETURN_ERROR(stream, "stream full");
|
|
748
|
+
|
|
749
|
+
/* Use a substream to verify that a callback doesn't write more than
|
|
750
|
+
* what it did the first time. */
|
|
751
|
+
substream.callback = stream->callback;
|
|
752
|
+
substream.state = stream->state;
|
|
753
|
+
substream.max_size = size;
|
|
754
|
+
substream.bytes_written = 0;
|
|
755
|
+
#ifndef PB_NO_ERRMSG
|
|
756
|
+
substream.errmsg = NULL;
|
|
757
|
+
#endif
|
|
758
|
+
|
|
759
|
+
status = pb_encode(&substream, fields, src_struct);
|
|
760
|
+
|
|
761
|
+
stream->bytes_written += substream.bytes_written;
|
|
762
|
+
stream->state = substream.state;
|
|
763
|
+
#ifndef PB_NO_ERRMSG
|
|
764
|
+
stream->errmsg = substream.errmsg;
|
|
765
|
+
#endif
|
|
766
|
+
|
|
767
|
+
if (substream.bytes_written != size)
|
|
768
|
+
PB_RETURN_ERROR(stream, "submsg size changed");
|
|
769
|
+
|
|
770
|
+
return status;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/* Field encoders */
|
|
774
|
+
|
|
775
|
+
static bool checkreturn pb_enc_bool(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
776
|
+
{
|
|
777
|
+
uint32_t value = safe_read_bool(field->pData) ? 1 : 0;
|
|
778
|
+
PB_UNUSED(field);
|
|
779
|
+
return pb_encode_varint(stream, value);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
783
|
+
{
|
|
784
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_UVARINT)
|
|
785
|
+
{
|
|
786
|
+
/* Perform unsigned integer extension */
|
|
787
|
+
pb_uint64_t value = 0;
|
|
788
|
+
|
|
789
|
+
if (field->data_size == sizeof(uint_least8_t))
|
|
790
|
+
value = *(const uint_least8_t*)field->pData;
|
|
791
|
+
else if (field->data_size == sizeof(uint_least16_t))
|
|
792
|
+
value = *(const uint_least16_t*)field->pData;
|
|
793
|
+
else if (field->data_size == sizeof(uint32_t))
|
|
794
|
+
value = *(const uint32_t*)field->pData;
|
|
795
|
+
else if (field->data_size == sizeof(pb_uint64_t))
|
|
796
|
+
value = *(const pb_uint64_t*)field->pData;
|
|
797
|
+
else
|
|
798
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
|
799
|
+
|
|
800
|
+
return pb_encode_varint(stream, value);
|
|
801
|
+
}
|
|
802
|
+
else
|
|
803
|
+
{
|
|
804
|
+
/* Perform signed integer extension */
|
|
805
|
+
pb_int64_t value = 0;
|
|
806
|
+
|
|
807
|
+
if (field->data_size == sizeof(int_least8_t))
|
|
808
|
+
value = *(const int_least8_t*)field->pData;
|
|
809
|
+
else if (field->data_size == sizeof(int_least16_t))
|
|
810
|
+
value = *(const int_least16_t*)field->pData;
|
|
811
|
+
else if (field->data_size == sizeof(int32_t))
|
|
812
|
+
value = *(const int32_t*)field->pData;
|
|
813
|
+
else if (field->data_size == sizeof(pb_int64_t))
|
|
814
|
+
value = *(const pb_int64_t*)field->pData;
|
|
815
|
+
else
|
|
816
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
|
817
|
+
|
|
818
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_SVARINT)
|
|
819
|
+
return pb_encode_svarint(stream, value);
|
|
820
|
+
#ifdef PB_WITHOUT_64BIT
|
|
821
|
+
else if (value < 0)
|
|
822
|
+
return pb_encode_varint_32(stream, (uint32_t)value, (uint32_t)-1);
|
|
823
|
+
#endif
|
|
824
|
+
else
|
|
825
|
+
return pb_encode_varint(stream, (pb_uint64_t)value);
|
|
826
|
+
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
static bool checkreturn pb_enc_fixed(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
831
|
+
{
|
|
832
|
+
#ifdef PB_CONVERT_DOUBLE_FLOAT
|
|
833
|
+
if (field->data_size == sizeof(float) && PB_LTYPE(field->type) == PB_LTYPE_FIXED64)
|
|
834
|
+
{
|
|
835
|
+
return pb_encode_float_as_double(stream, *(float*)field->pData);
|
|
836
|
+
}
|
|
837
|
+
#endif
|
|
838
|
+
|
|
839
|
+
if (field->data_size == sizeof(uint32_t))
|
|
840
|
+
{
|
|
841
|
+
return pb_encode_fixed32(stream, field->pData);
|
|
842
|
+
}
|
|
843
|
+
#ifndef PB_WITHOUT_64BIT
|
|
844
|
+
else if (field->data_size == sizeof(uint64_t))
|
|
845
|
+
{
|
|
846
|
+
return pb_encode_fixed64(stream, field->pData);
|
|
847
|
+
}
|
|
848
|
+
#endif
|
|
849
|
+
else
|
|
850
|
+
{
|
|
851
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
856
|
+
{
|
|
857
|
+
const pb_bytes_array_t *bytes = NULL;
|
|
858
|
+
|
|
859
|
+
bytes = (const pb_bytes_array_t*)field->pData;
|
|
860
|
+
|
|
861
|
+
if (bytes == NULL)
|
|
862
|
+
{
|
|
863
|
+
/* Treat null pointer as an empty bytes field */
|
|
864
|
+
return pb_encode_string(stream, NULL, 0);
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
if (PB_ATYPE(field->type) == PB_ATYPE_STATIC &&
|
|
868
|
+
bytes->size > field->data_size - offsetof(pb_bytes_array_t, bytes))
|
|
869
|
+
{
|
|
870
|
+
PB_RETURN_ERROR(stream, "bytes size exceeded");
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
return pb_encode_string(stream, bytes->bytes, (size_t)bytes->size);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
877
|
+
{
|
|
878
|
+
size_t size = 0;
|
|
879
|
+
size_t max_size = (size_t)field->data_size;
|
|
880
|
+
const char *str = (const char*)field->pData;
|
|
881
|
+
|
|
882
|
+
if (PB_ATYPE(field->type) == PB_ATYPE_POINTER)
|
|
883
|
+
{
|
|
884
|
+
max_size = (size_t)-1;
|
|
885
|
+
}
|
|
886
|
+
else
|
|
887
|
+
{
|
|
888
|
+
/* pb_dec_string() assumes string fields end with a null
|
|
889
|
+
* terminator when the type isn't PB_ATYPE_POINTER, so we
|
|
890
|
+
* shouldn't allow more than max-1 bytes to be written to
|
|
891
|
+
* allow space for the null terminator.
|
|
892
|
+
*/
|
|
893
|
+
if (max_size == 0)
|
|
894
|
+
PB_RETURN_ERROR(stream, "zero-length string");
|
|
895
|
+
|
|
896
|
+
max_size -= 1;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
if (str == NULL)
|
|
901
|
+
{
|
|
902
|
+
size = 0; /* Treat null pointer as an empty string */
|
|
903
|
+
}
|
|
904
|
+
else
|
|
905
|
+
{
|
|
906
|
+
const char *p = str;
|
|
907
|
+
|
|
908
|
+
/* strnlen() is not always available, so just use a loop */
|
|
909
|
+
while (size < max_size && *p != '\0')
|
|
910
|
+
{
|
|
911
|
+
size++;
|
|
912
|
+
p++;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
if (*p != '\0')
|
|
916
|
+
{
|
|
917
|
+
PB_RETURN_ERROR(stream, "unterminated string");
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
#ifdef PB_VALIDATE_UTF8
|
|
922
|
+
if (!pb_validate_utf8(str))
|
|
923
|
+
PB_RETURN_ERROR(stream, "invalid utf8");
|
|
924
|
+
#endif
|
|
925
|
+
|
|
926
|
+
return pb_encode_string(stream, (const pb_byte_t*)str, size);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
930
|
+
{
|
|
931
|
+
if (field->submsg_desc == NULL)
|
|
932
|
+
PB_RETURN_ERROR(stream, "invalid field descriptor");
|
|
933
|
+
|
|
934
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_SUBMSG_W_CB && field->pSize != NULL)
|
|
935
|
+
{
|
|
936
|
+
/* Message callback is stored right before pSize. */
|
|
937
|
+
pb_callback_t *callback = (pb_callback_t*)field->pSize - 1;
|
|
938
|
+
if (callback->funcs.encode)
|
|
939
|
+
{
|
|
940
|
+
if (!callback->funcs.encode(stream, field, &callback->arg))
|
|
941
|
+
return false;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
return pb_encode_submessage(stream, field->submsg_desc, field->pData);
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_iter_t *field)
|
|
949
|
+
{
|
|
950
|
+
return pb_encode_string(stream, (const pb_byte_t*)field->pData, (size_t)field->data_size);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
#ifdef PB_CONVERT_DOUBLE_FLOAT
|
|
954
|
+
bool pb_encode_float_as_double(pb_ostream_t *stream, float value)
|
|
955
|
+
{
|
|
956
|
+
union { float f; uint32_t i; } in;
|
|
957
|
+
uint_least8_t sign;
|
|
958
|
+
int exponent;
|
|
959
|
+
uint64_t mantissa;
|
|
960
|
+
|
|
961
|
+
in.f = value;
|
|
962
|
+
|
|
963
|
+
/* Decompose input value */
|
|
964
|
+
sign = (uint_least8_t)((in.i >> 31) & 1);
|
|
965
|
+
exponent = (int)((in.i >> 23) & 0xFF) - 127;
|
|
966
|
+
mantissa = in.i & 0x7FFFFF;
|
|
967
|
+
|
|
968
|
+
if (exponent == 128)
|
|
969
|
+
{
|
|
970
|
+
/* Special value (NaN etc.) */
|
|
971
|
+
exponent = 1024;
|
|
972
|
+
}
|
|
973
|
+
else if (exponent == -127)
|
|
974
|
+
{
|
|
975
|
+
if (!mantissa)
|
|
976
|
+
{
|
|
977
|
+
/* Zero */
|
|
978
|
+
exponent = -1023;
|
|
979
|
+
}
|
|
980
|
+
else
|
|
981
|
+
{
|
|
982
|
+
/* Denormalized */
|
|
983
|
+
mantissa <<= 1;
|
|
984
|
+
while (!(mantissa & 0x800000))
|
|
985
|
+
{
|
|
986
|
+
mantissa <<= 1;
|
|
987
|
+
exponent--;
|
|
988
|
+
}
|
|
989
|
+
mantissa &= 0x7FFFFF;
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
/* Combine fields */
|
|
994
|
+
mantissa <<= 29;
|
|
995
|
+
mantissa |= (uint64_t)(exponent + 1023) << 52;
|
|
996
|
+
mantissa |= (uint64_t)sign << 63;
|
|
997
|
+
|
|
998
|
+
return pb_encode_fixed64(stream, &mantissa);
|
|
999
|
+
}
|
|
1000
|
+
#endif
|