From 3bea81d6564fe33d507a8d2f9c31f31a0b4c57eb Mon Sep 17 00:00:00 2001 From: Arseniy Romenskiy Date: Thu, 12 Feb 2026 22:09:59 +0300 Subject: [PATCH] update spec to new build 1.16.0 --- zerotier-one/.clangd | 11 + zerotier-one/.drone.jsonnet | 256 - zerotier-one/.drone.yml | 465 -- zerotier-one/.github/workflows/build.yml | 70 +- zerotier-one/.github/workflows/validate.yml | 5 +- zerotier-one/.gitignore | 15 +- zerotier-one/.kick | 14 - zerotier-one/AUTHORS.md | 75 - zerotier-one/COPYING | 12 - zerotier-one/Dockerfile.release | 6 +- zerotier-one/LICENSE-MPL.txt | 373 ++ zerotier-one/LICENSE.txt | 150 +- zerotier-one/Makefile | 3 + zerotier-one/OFFICIAL-RELEASE-STEPS.md | 3 +- zerotier-one/README.docker.md | 1 + zerotier-one/README.md | 30 +- zerotier-one/RELEASE-NOTES.md | 292 +- zerotier-one/SECURITY.md | 17 +- zerotier-one/attic/WinUI/APIHandler.cs | 459 -- zerotier-one/attic/WinUI/AboutView.xaml | 35 - zerotier-one/attic/WinUI/AboutView.xaml.cs | 35 - zerotier-one/attic/WinUI/App.config | 6 - zerotier-one/attic/WinUI/App.xaml | 14 - zerotier-one/attic/WinUI/App.xaml.cs | 25 - zerotier-one/attic/WinUI/CentralAPI.cs | 256 - zerotier-one/attic/WinUI/CentralLogin.cs | 30 - zerotier-one/attic/WinUI/CentralNetwork.cs | 48 - zerotier-one/attic/WinUI/CentralServer.cs | 23 - zerotier-one/attic/WinUI/CentralToken.cs | 21 - zerotier-one/attic/WinUI/CentralUser.cs | 51 - zerotier-one/attic/WinUI/Fonts/segoeui.ttf | Bin 910308 -> 0 bytes zerotier-one/attic/WinUI/Fonts/segoeuib.ttf | Bin 898564 -> 0 bytes zerotier-one/attic/WinUI/Fonts/segoeuii.ttf | Bin 508344 -> 0 bytes zerotier-one/attic/WinUI/Fonts/segoeuiz.ttf | Bin 522076 -> 0 bytes zerotier-one/attic/WinUI/ISwitchable.cs | 13 - zerotier-one/attic/WinUI/JoinNetworkView.xaml | 17 - .../attic/WinUI/JoinNetworkView.xaml.cs | 127 - zerotier-one/attic/WinUI/MainWindow.xaml.cs | 233 - zerotier-one/attic/WinUI/NetworkInfoView.xaml | 88 - .../attic/WinUI/NetworkInfoView.xaml.cs | 183 - zerotier-one/attic/WinUI/NetworkListView.xaml | 88 - .../attic/WinUI/NetworkListView.xaml.cs | 85 - zerotier-one/attic/WinUI/NetworkMonitor.cs | 203 - .../attic/WinUI/NetworkNameGenerator.cs | 201 - zerotier-one/attic/WinUI/NetworkRoute.cs | 42 - zerotier-one/attic/WinUI/NetworksPage.xaml | 13 - zerotier-one/attic/WinUI/NetworksPage.xaml.cs | 99 - zerotier-one/attic/WinUI/PeersPage.xaml | 26 - zerotier-one/attic/WinUI/PeersPage.xaml.cs | 54 - zerotier-one/attic/WinUI/PreferencesView.xaml | 30 - .../attic/WinUI/PreferencesView.xaml.cs | 74 - .../attic/WinUI/Properties/AssemblyInfo.cs | 56 - .../WinUI/Properties/Resources.Designer.cs | 73 - .../attic/WinUI/Properties/Resources.resx | 124 - .../WinUI/Properties/Settings.Designer.cs | 30 - .../attic/WinUI/Properties/Settings.settings | 7 - .../attic/WinUI/Resources/ZeroTierIcon.ico | Bin 45451 -> 0 bytes zerotier-one/attic/WinUI/Simple Styles.xaml | 1128 ---- zerotier-one/attic/WinUI/Themes/Generic.xaml | 6 - zerotier-one/attic/WinUI/ToolbarItem.xaml | 65 - zerotier-one/attic/WinUI/ToolbarItem.xaml.cs | 353 -- zerotier-one/attic/WinUI/WinUI.csproj | 273 - zerotier-one/attic/WinUI/ZeroTierIcon.ico | Bin 370070 -> 0 bytes zerotier-one/attic/WinUI/ZeroTierNetwork.cs | 516 -- zerotier-one/attic/WinUI/ZeroTierPeer.cs | 116 - .../attic/WinUI/ZeroTierPeerPhysicalPath.cs | 27 - zerotier-one/attic/WinUI/ZeroTierStatus.cs | 39 - zerotier-one/attic/WinUI/app.manifest | 55 - zerotier-one/attic/WinUI/packages.config | 5 - .../ZeroTier One.xcodeproj/project.pbxproj | 391 -- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../macui/ZeroTier One/AboutViewController.h | 33 - .../macui/ZeroTier One/AboutViewController.m | 57 - .../ZeroTier One/AboutViewController.xib | 31 - .../attic/macui/ZeroTier One/AppDelegate.h | 61 - .../attic/macui/ZeroTier One/AppDelegate.m | 379 -- .../AppIcon.appiconset/Contents.json | 59 - .../ZeroTierIcon512x512.png | Bin 51309 -> 0 bytes .../Assets.xcassets/Contents.json | 6 - .../MenuBarIconMac.imageset/Contents.json | 21 - .../MenuBarIconMac.imageset/MenuBar@2x.png | Bin 22973 -> 0 bytes .../MenuBarIconMac.imageset/Menubar.png | Bin 17234 -> 0 bytes .../Contents.json | 21 - .../MenubarWhite.png | Bin 17234 -> 0 bytes .../MenubarWhite@2x.png | Bin 22973 -> 0 bytes .../attic/macui/ZeroTier One/AuthtokenCopy.h | 26 - .../attic/macui/ZeroTier One/AuthtokenCopy.m | 97 - .../ZeroTier One/Base.lproj/MainMenu.xib | 680 --- .../attic/macui/ZeroTier One/Info.plist | 41 - .../ZeroTier One/JoinNetworkViewController.h | 41 - .../ZeroTier One/JoinNetworkViewController.m | 186 - .../JoinNetworkViewController.xib | 91 - .../attic/macui/ZeroTier One/Network.h | 69 - .../attic/macui/ZeroTier One/Network.m | 352 -- .../macui/ZeroTier One/NetworkInfoCell.h | 51 - .../macui/ZeroTier One/NetworkInfoCell.m | 86 - .../attic/macui/ZeroTier One/NetworkMonitor.h | 45 - .../attic/macui/ZeroTier One/NetworkMonitor.m | 253 - .../attic/macui/ZeroTier One/NodeStatus.h | 35 - .../attic/macui/ZeroTier One/NodeStatus.m | 40 - .../ZeroTier One/PreferencesViewController.h | 31 - .../ZeroTier One/PreferencesViewController.m | 112 - .../PreferencesViewController.xib | 33 - .../attic/macui/ZeroTier One/ServiceCom.h | 40 - .../attic/macui/ZeroTier One/ServiceCom.m | 522 -- .../ZeroTier One/ShowNetworksViewController.h | 36 - .../ZeroTier One/ShowNetworksViewController.m | 184 - .../ShowNetworksViewController.xib | 394 -- .../ZeroTier One/ZeroTier One.entitlements | 5 - .../macui/ZeroTier One/ZeroTierIcon.icns | Bin 125598 -> 0 bytes .../attic/macui/ZeroTier One/about.html | 58 - zerotier-one/attic/macui/ZeroTier One/main.m | 23 - zerotier-one/attic/world/README.md | 7 - zerotier-one/attic/world/build.sh | 3 - zerotier-one/attic/world/mkworld.cpp | 173 - zerotier-one/attic/world/world.bin | Bin 570 -> 0 bytes zerotier-one/attic/world/world.c | 3 - zerotier-one/controller/ConnectionPool.hpp | 175 - zerotier-one/controller/DB.cpp | 404 -- zerotier-one/controller/DB.hpp | 197 - zerotier-one/controller/DBMirrorSet.cpp | 246 - zerotier-one/controller/DBMirrorSet.hpp | 73 - .../controller/EmbeddedNetworkController.cpp | 2046 ------- .../controller/EmbeddedNetworkController.hpp | 183 - zerotier-one/controller/FileDB.cpp | 167 - zerotier-one/controller/FileDB.hpp | 47 - zerotier-one/controller/LFDB.cpp | 406 -- zerotier-one/controller/LFDB.hpp | 89 - zerotier-one/controller/PostgreSQL.hpp | 187 - zerotier-one/controller/Redis.hpp | 15 - zerotier-one/debian/changelog | 24 + zerotier-one/debian/copyright | 2 +- zerotier-one/doc/README.md | 2 +- zerotier-one/entrypoint.sh.release | 10 +- .../ext/central-controller-docker/Dockerfile | 12 +- .../Dockerfile.builder | 19 +- .../Dockerfile.run_base | 13 +- .../ext/central-controller-docker/Makefile | 4 +- .../ext/central-controller-docker/main.sh | 43 +- .../migrations/0001_init.down.sql | 3 + .../migrations/0001_init.up.sql | 47 + .../migrations/0002_os_arch.down.sql | 3 + .../migrations/0002_os_arch.up.sql | 3 + zerotier-one/ext/cpp-httplib/httplib.h | 1758 ++++-- zerotier-one/ext/ed25519-amd64-asm/sign.c | 2 +- .../ext/installfiles/mac/ZeroTier One.pkgproj | 182 +- .../ext/installfiles/windows/ZeroTier One.aip | 67 +- .../ext/opentelemetry-cpp-1.21.0/.bazelignore | 3 + .../ext/opentelemetry-cpp-1.21.0/.bazelrc | 41 + .../opentelemetry-cpp-1.21.0/.bazelversion | 1 + .../opentelemetry-cpp-1.21.0/.clang-format | 73 + .../ext/opentelemetry-cpp-1.21.0/.clang-tidy | 42 + .../opentelemetry-cpp-1.21.0/.cmake-format.py | 7 + .../.copyright-ignore | 52 + .../.devcontainer/Dockerfile.conan | 55 + .../.devcontainer/Dockerfile.dev | 58 + .../.devcontainer/README.md | 65 + .../.devcontainer/customize_container.sh | 39 + .../.devcontainer/devcontainer.json | 35 + .../opentelemetry-cpp-1.21.0/.gitattributes | 47 + .../.github/.codecov.yaml | 50 + .../.github/CODEOWNERS | 8 + .../.github/ISSUE_TEMPLATE/bug_report.md | 19 + .../.github/ISSUE_TEMPLATE/feature_request.md | 19 + .../.github/dependabot.yml | 13 + .../.github/pull_request_template.md | 11 + .../.github/repository-settings.md | 38 + .../.github/workflows/benchmark.yml | 82 + .../.github/workflows/ci.yml | 1247 ++++ .../.github/workflows/clang-tidy.yaml | 89 + .../.github/workflows/cmake_install.yml | 372 ++ .../.github/workflows/codeql-analysis.yml | 48 + .../.github/workflows/cppcheck.yml | 77 + .../.github/workflows/dependencies_image.yml | 54 + .../.github/workflows/fossa.yml | 25 + .../.github/workflows/iwyu.yml | 92 + .../.github/workflows/ossf-scorecard.yml | 52 + .../workflows/project_management_comment.yml | 28 + .../project_management_issue_open.yml | 29 + .../.github/workflows/stale.yml | 21 + .../ext/opentelemetry-cpp-1.21.0/.gitignore | 84 + .../ext/opentelemetry-cpp-1.21.0/.gitmodules | 39 + .../ext/opentelemetry-cpp-1.21.0/.iwyu.imp | 31 + .../.markdownlint.json | 8 + .../.markdownlintignore | 3 + .../ext/opentelemetry-cpp-1.21.0/CHANGELOG.md | 2816 +++++++++ .../opentelemetry-cpp-1.21.0/CMakeLists.txt | 927 +++ .../CMakeSettings.json | 126 + .../CODE_OF_CONDUCT.md | 3 + .../opentelemetry-cpp-1.21.0/CONTRIBUTING.md | 322 ++ .../opentelemetry-cpp-1.21.0/DEPRECATED.md | 139 + .../ext/opentelemetry-cpp-1.21.0/INSTALL.md | 452 ++ .../ext/opentelemetry-cpp-1.21.0/LICENSE | 201 + .../ext/opentelemetry-cpp-1.21.0/MODULE.bazel | 25 + .../ext/opentelemetry-cpp-1.21.0/README.md | 127 + .../ext/opentelemetry-cpp-1.21.0/RELEASING.md | 96 + .../opentelemetry-cpp-1.21.0/Versioning.md | 107 + .../ext/opentelemetry-cpp-1.21.0/WORKSPACE | 23 + .../opentelemetry-cpp-1.21.0/WORKSPACE.bzlmod | 4 + .../ext/opentelemetry-cpp-1.21.0/api/BUILD | 81 + .../api/CMakeLists.txt | 140 + .../include/opentelemetry/baggage/baggage.h | 299 + .../opentelemetry/baggage/baggage_context.h | 36 + .../baggage/propagation/baggage_propagator.h | 60 + .../opentelemetry/common/attribute_value.h | 82 + .../opentelemetry/common/key_value_iterable.h | 64 + .../common/key_value_iterable_view.h | 146 + .../opentelemetry/common/kv_properties.h | 272 + .../api/include/opentelemetry/common/macros.h | 523 ++ .../opentelemetry/common/spin_lock_mutex.h | 133 + .../opentelemetry/common/string_util.h | 42 + .../include/opentelemetry/common/timestamp.h | 206 + .../api/include/opentelemetry/config.h | 19 + .../include/opentelemetry/context/context.h | 171 + .../opentelemetry/context/context_value.h | 35 + .../propagation/composite_propagator.h | 93 + .../context/propagation/global_propagator.h | 57 + .../context/propagation/noop_propagator.h | 40 + .../context/propagation/text_map_propagator.h | 59 + .../opentelemetry/context/runtime_context.h | 340 ++ .../opentelemetry/detail/preprocessor.h | 25 + .../api/include/opentelemetry/logs/event_id.h | 37 + .../include/opentelemetry/logs/event_logger.h | 82 + .../logs/event_logger_provider.h | 37 + .../include/opentelemetry/logs/log_record.h | 92 + .../api/include/opentelemetry/logs/logger.h | 492 ++ .../opentelemetry/logs/logger_provider.h | 71 + .../opentelemetry/logs/logger_type_traits.h | 204 + .../api/include/opentelemetry/logs/noop.h | 131 + .../api/include/opentelemetry/logs/provider.h | 100 + .../api/include/opentelemetry/logs/severity.h | 67 + .../opentelemetry/metrics/async_instruments.h | 33 + .../api/include/opentelemetry/metrics/meter.h | 174 + .../opentelemetry/metrics/meter_provider.h | 148 + .../api/include/opentelemetry/metrics/noop.h | 271 + .../opentelemetry/metrics/observer_result.h | 54 + .../include/opentelemetry/metrics/provider.h | 60 + .../opentelemetry/metrics/sync_instruments.h | 328 ++ .../include/opentelemetry/nostd/detail/all.h | 21 + .../opentelemetry/nostd/detail/decay.h | 16 + .../nostd/detail/dependent_type.h | 20 + .../opentelemetry/nostd/detail/functional.h | 66 + .../opentelemetry/nostd/detail/invoke.h | 163 + .../opentelemetry/nostd/detail/trait.h | 75 + .../nostd/detail/type_pack_element.h | 53 + .../opentelemetry/nostd/detail/valueless.h | 14 + .../nostd/detail/variant_alternative.h | 40 + .../opentelemetry/nostd/detail/variant_fwd.h | 14 + .../opentelemetry/nostd/detail/variant_size.h | 33 + .../include/opentelemetry/nostd/detail/void.h | 28 + .../opentelemetry/nostd/function_ref.h | 94 + .../nostd/internal/absl/.clang-format | 3 + .../nostd/internal/absl/README.md | 4 + .../nostd/internal/absl/base/attributes.h | 621 ++ .../nostd/internal/absl/base/config.h | 671 +++ .../internal/absl/base/internal/identity.h | 37 + .../absl/base/internal/inline_variable.h | 107 + .../internal/absl/base/internal/invoke.h | 188 + .../nostd/internal/absl/base/macros.h | 220 + .../nostd/internal/absl/base/optimization.h | 181 + .../nostd/internal/absl/base/options.h | 216 + .../nostd/internal/absl/base/policy_checks.h | 115 + .../nostd/internal/absl/base/port.h | 26 + .../nostd/internal/absl/meta/type_traits.h | 779 +++ .../internal/absl/types/bad_variant_access.h | 94 + .../internal/absl/types/internal/variant.h | 1649 ++++++ .../nostd/internal/absl/types/variant.h | 866 +++ .../nostd/internal/absl/utility/utility.h | 350 ++ .../include/opentelemetry/nostd/shared_ptr.h | 210 + .../api/include/opentelemetry/nostd/span.h | 274 + .../include/opentelemetry/nostd/string_view.h | 226 + .../include/opentelemetry/nostd/type_traits.h | 172 + .../include/opentelemetry/nostd/unique_ptr.h | 180 + .../api/include/opentelemetry/nostd/utility.h | 160 + .../api/include/opentelemetry/nostd/variant.h | 85 + .../plugin/detail/dynamic_library_handle.h | 20 + .../plugin/detail/dynamic_load_unix.h | 73 + .../plugin/detail/dynamic_load_windows.h | 96 + .../opentelemetry/plugin/detail/loader_info.h | 24 + .../plugin/detail/tracer_handle.h | 27 + .../opentelemetry/plugin/detail/utility.h | 36 + .../opentelemetry/plugin/dynamic_load.h | 30 + .../include/opentelemetry/plugin/factory.h | 65 + .../api/include/opentelemetry/plugin/hook.h | 51 + .../api/include/opentelemetry/plugin/tracer.h | 133 + .../opentelemetry/semconv/azure_metrics.h | 97 + .../opentelemetry/semconv/cicd_metrics.h | 213 + .../opentelemetry/semconv/client_attributes.h | 41 + .../opentelemetry/semconv/code_attributes.h | 81 + .../opentelemetry/semconv/container_metrics.h | 266 + .../opentelemetry/semconv/cpu_metrics.h | 141 + .../opentelemetry/semconv/db_attributes.h | 349 ++ .../opentelemetry/semconv/db_metrics.h | 53 + .../opentelemetry/semconv/dns_metrics.h | 49 + .../opentelemetry/semconv/error_attributes.h | 57 + .../semconv/exception_attributes.h | 50 + .../opentelemetry/semconv/faas_metrics.h | 287 + .../opentelemetry/semconv/gen_ai_metrics.h | 157 + .../opentelemetry/semconv/http_attributes.h | 164 + .../opentelemetry/semconv/http_metrics.h | 77 + .../opentelemetry/semconv/hw_metrics.h | 344 ++ .../semconv/incubating/app_attributes.h | 76 + .../semconv/incubating/artifact_attributes.h | 79 + .../semconv/incubating/aws_attributes.h | 425 ++ .../semconv/incubating/az_attributes.h | 37 + .../semconv/incubating/azure_attributes.h | 110 + .../semconv/incubating/azure_metrics.h | 97 + .../semconv/incubating/browser_attributes.h | 65 + .../semconv/incubating/cassandra_attributes.h | 116 + .../semconv/incubating/cicd_attributes.h | 258 + .../semconv/incubating/cicd_metrics.h | 213 + .../semconv/incubating/client_attributes.h | 41 + .../semconv/incubating/cloud_attributes.h | 287 + .../incubating/cloudevents_attributes.h | 58 + .../incubating/cloudfoundry_attributes.h | 133 + .../semconv/incubating/code_attributes.h | 126 + .../semconv/incubating/container_attributes.h | 159 + .../semconv/incubating/container_metrics.h | 266 + .../semconv/incubating/cpu_attributes.h | 78 + .../semconv/incubating/cpu_metrics.h | 141 + .../semconv/incubating/cpython_attributes.h | 48 + .../semconv/incubating/cpython_metrics.h | 154 + .../semconv/incubating/db_attributes.h | 1212 ++++ .../semconv/incubating/db_metrics.h | 861 +++ .../incubating/deployment_attributes.h | 77 + .../incubating/destination_attributes.h | 37 + .../semconv/incubating/device_attributes.h | 72 + .../semconv/incubating/disk_attributes.h | 43 + .../semconv/incubating/dns_attributes.h | 34 + .../semconv/incubating/dns_metrics.h | 49 + .../incubating/elasticsearch_attributes.h | 29 + .../semconv/incubating/enduser_attributes.h | 57 + .../semconv/incubating/error_attributes.h | 69 + .../semconv/incubating/event_attributes.h | 32 + .../semconv/incubating/exception_attributes.h | 50 + .../semconv/incubating/faas_attributes.h | 231 + .../semconv/incubating/faas_metrics.h | 287 + .../incubating/feature_flag_attributes.h | 209 + .../semconv/incubating/file_attributes.h | 143 + .../semconv/incubating/gcp_attributes.h | 221 + .../semconv/incubating/gen_ai_attributes.h | 494 ++ .../semconv/incubating/gen_ai_metrics.h | 157 + .../semconv/incubating/geo_attributes.h | 102 + .../semconv/incubating/graphql_attributes.h | 60 + .../semconv/incubating/heroku_attributes.h | 39 + .../semconv/incubating/host_attributes.h | 159 + .../semconv/incubating/http_attributes.h | 375 ++ .../semconv/incubating/http_metrics.h | 346 ++ .../semconv/incubating/hw_attributes.h | 148 + .../semconv/incubating/hw_metrics.h | 345 ++ .../semconv/incubating/k8s_attributes.h | 443 ++ .../semconv/incubating/k8s_metrics.h | 1723 ++++++ .../semconv/incubating/linux_attributes.h | 43 + .../semconv/incubating/log_attributes.h | 82 + .../semconv/incubating/message_attributes.h | 76 + .../semconv/incubating/messaging_attributes.h | 522 ++ .../semconv/incubating/messaging_metrics.h | 413 ++ .../semconv/incubating/net_attributes.h | 208 + .../semconv/incubating/network_attributes.h | 379 ++ .../semconv/incubating/oci_attributes.h | 36 + .../incubating/opentracing_attributes.h | 45 + .../semconv/incubating/os_attributes.h | 110 + .../semconv/incubating/otel_attributes.h | 202 + .../semconv/incubating/otel_metrics.h | 976 ++++ .../semconv/incubating/other_attributes.h | 47 + .../semconv/incubating/peer_attributes.h | 31 + .../semconv/incubating/pool_attributes.h | 33 + .../semconv/incubating/process_attributes.h | 297 + .../semconv/incubating/process_metrics.h | 458 ++ .../semconv/incubating/profile_attributes.h | 98 + .../semconv/incubating/rpc_attributes.h | 368 ++ .../semconv/incubating/rpc_metrics.h | 310 + .../incubating/security_rule_attributes.h | 69 + .../semconv/incubating/server_attributes.h | 41 + .../semconv/incubating/service_attributes.h | 84 + .../semconv/incubating/session_attributes.h | 34 + .../semconv/incubating/source_attributes.h | 37 + .../semconv/incubating/system_attributes.h | 383 ++ .../semconv/incubating/system_metrics.h | 1338 +++++ .../semconv/incubating/telemetry_attributes.h | 125 + .../semconv/incubating/test_attributes.h | 93 + .../semconv/incubating/thread_attributes.h | 34 + .../semconv/incubating/tls_attributes.h | 222 + .../semconv/incubating/url_attributes.h | 173 + .../incubating/user_agent_attributes.h | 92 + .../semconv/incubating/user_attributes.h | 57 + .../semconv/incubating/vcs_attributes.h | 348 ++ .../semconv/incubating/vcs_metrics.h | 435 ++ .../semconv/incubating/webengine_attributes.h | 39 + .../opentelemetry/semconv/k8s_metrics.h | 1735 ++++++ .../opentelemetry/semconv/messaging_metrics.h | 414 ++ .../semconv/network_attributes.h | 119 + .../opentelemetry/semconv/otel_attributes.h | 59 + .../opentelemetry/semconv/otel_metrics.h | 337 ++ .../opentelemetry/semconv/process_metrics.h | 458 ++ .../opentelemetry/semconv/rpc_metrics.h | 310 + .../opentelemetry/semconv/schema_url.h | 24 + .../opentelemetry/semconv/server_attributes.h | 41 + .../semconv/service_attributes.h | 41 + .../opentelemetry/semconv/system_metrics.h | 1339 +++++ .../semconv/telemetry_attributes.h | 111 + .../opentelemetry/semconv/url_attributes.h | 102 + .../semconv/user_agent_attributes.h | 30 + .../opentelemetry/semconv/vcs_metrics.h | 435 ++ .../include/opentelemetry/std/shared_ptr.h | 22 + .../api/include/opentelemetry/std/span.h | 71 + .../include/opentelemetry/std/string_view.h | 21 + .../include/opentelemetry/std/type_traits.h | 10 + .../include/opentelemetry/std/unique_ptr.h | 22 + .../api/include/opentelemetry/std/utility.h | 71 + .../api/include/opentelemetry/std/variant.h | 230 + .../api/include/opentelemetry/trace/context.h | 44 + .../opentelemetry/trace/default_span.h | 77 + .../api/include/opentelemetry/trace/noop.h | 159 + .../trace/propagation/b3_propagator.h | 198 + .../trace/propagation/detail/hex.h | 83 + .../trace/propagation/detail/string.h | 63 + .../trace/propagation/http_trace_context.h | 201 + .../opentelemetry/trace/propagation/jaeger.h | 127 + .../include/opentelemetry/trace/provider.h | 60 + .../api/include/opentelemetry/trace/scope.h | 42 + .../trace/semantic_conventions.h | 5111 ++++++++++++++++ .../api/include/opentelemetry/trace/span.h | 259 + .../opentelemetry/trace/span_context.h | 98 + .../trace/span_context_kv_iterable.h | 54 + .../trace/span_context_kv_iterable_view.h | 119 + .../api/include/opentelemetry/trace/span_id.h | 67 + .../opentelemetry/trace/span_metadata.h | 45 + .../opentelemetry/trace/span_startoptions.h | 71 + .../include/opentelemetry/trace/trace_flags.h | 66 + .../include/opentelemetry/trace/trace_id.h | 72 + .../include/opentelemetry/trace/trace_state.h | 323 ++ .../api/include/opentelemetry/trace/tracer.h | 244 + .../opentelemetry/trace/tracer_provider.h | 127 + .../api/include/opentelemetry/version.h | 29 + .../api/test/CMakeLists.txt | 16 + .../api/test/baggage/BUILD | 30 + .../api/test/baggage/CMakeLists.txt | 21 + .../api/test/baggage/baggage_benchmark.cc | 122 + .../api/test/baggage/baggage_test.cc | 222 + .../api/test/baggage/propagation/BUILD | 19 + .../test/baggage/propagation/CMakeLists.txt | 12 + .../propagation/baggage_propagator_test.cc | 123 + .../api/test/common/BUILD | 45 + .../api/test/common/CMakeLists.txt | 20 + .../api/test/common/kv_properties_test.cc | 238 + .../api/test/common/spinlock_benchmark.cc | 169 + .../api/test/common/string_util_test.cc | 51 + .../api/test/context/BUILD | 34 + .../api/test/context/CMakeLists.txt | 16 + .../api/test/context/context_test.cc | 154 + .../api/test/context/propagation/BUILD | 19 + .../test/context/propagation/CMakeLists.txt | 12 + .../propagation/composite_propagator_test.cc | 152 + .../api/test/context/runtime_context_test.cc | 149 + .../api/test/core/BUILD | 32 + .../api/test/core/CMakeLists.txt | 20 + .../api/test/core/timestamp_test.cc | 70 + .../api/test/core/version_test.cc | 18 + .../api/test/logs/BUILD | 36 + .../api/test/logs/CMakeLists.txt | 18 + .../api/test/logs/logger_benchmark.cc | 253 + .../api/test/logs/logger_test.cc | 237 + .../api/test/logs/provider_test.cc | 118 + .../api/test/metrics/BUILD | 34 + .../api/test/metrics/CMakeLists.txt | 12 + .../api/test/metrics/meter_provider_test.cc | 36 + .../test/metrics/noop_sync_instrument_test.cc | 54 + .../api/test/nostd/BUILD | 107 + .../api/test/nostd/CMakeLists.txt | 22 + .../api/test/nostd/function_ref_test.cc | 38 + .../api/test/nostd/shared_ptr_test.cc | 191 + .../api/test/nostd/span_test.cc | 175 + .../api/test/nostd/string_view_test.cc | 128 + .../api/test/nostd/unique_ptr_test.cc | 171 + .../api/test/nostd/utility_test.cc | 57 + .../api/test/nostd/variant_test.cc | 117 + .../api/test/plugin/BUILD | 20 + .../api/test/plugin/CMakeLists.txt | 13 + .../api/test/plugin/dynamic_load_test.cc | 16 + .../api/test/singleton/BUILD | 201 + .../api/test/singleton/CMakeLists.txt | 55 + .../api/test/singleton/component_a.cc | 39 + .../api/test/singleton/component_a.h | 4 + .../api/test/singleton/component_b.cc | 39 + .../api/test/singleton/component_b.h | 4 + .../api/test/singleton/component_c.cc | 41 + .../api/test/singleton/component_c.h | 15 + .../api/test/singleton/component_d.cc | 41 + .../api/test/singleton/component_d.h | 21 + .../api/test/singleton/component_e.cc | 41 + .../api/test/singleton/component_e.h | 15 + .../api/test/singleton/component_f.cc | 41 + .../api/test/singleton/component_f.h | 21 + .../api/test/singleton/component_g.cc | 45 + .../api/test/singleton/component_h.cc | 51 + .../api/test/singleton/singleton_test.cc | 463 ++ .../api/test/trace/BUILD | 204 + .../api/test/trace/CMakeLists.txt | 34 + .../api/test/trace/default_span_test.cc | 24 + .../trace/key_value_iterable_view_test.cc | 76 + .../api/test/trace/noop_test.cc | 110 + .../api/test/trace/propagation/BUILD | 55 + .../api/test/trace/propagation/CMakeLists.txt | 15 + .../trace/propagation/b3_propagation_test.cc | 221 + .../api/test/trace/propagation/detail/BUILD | 36 + .../trace/propagation/detail/CMakeLists.txt | 12 + .../test/trace/propagation/detail/hex_test.cc | 42 + .../trace/propagation/detail/string_test.cc | 64 + .../propagation/http_text_format_test.cc | 248 + .../propagation/jaeger_propagation_test.cc | 207 + .../api/test/trace/propagation/util.h | 14 + .../api/test/trace/provider_test.cc | 50 + .../api/test/trace/scope_test.cc | 56 + .../api/test/trace/span_benchmark.cc | 137 + .../api/test/trace/span_context_test.cc | 56 + .../api/test/trace/span_id_benchmark.cc | 56 + .../api/test/trace/span_id_test.cc | 57 + .../api/test/trace/trace_flags_test.cc | 43 + .../api/test/trace/trace_id_test.cc | 58 + .../api/test/trace/trace_state_test.cc | 200 + .../api/test/trace/tracer_test.cc | 43 + .../ext/opentelemetry-cpp-1.21.0/bazel/BUILD | 9 + .../opentelemetry-cpp-1.21.0/bazel/curl.BUILD | 59 + .../opentelemetry-cpp-1.21.0/bazel/curl.bzl | 190 + .../bazel/extra_deps.bzl | 13 + .../bazel/nlohmann_json.BUILD | 17 + .../bazel/opentelemetry_proto.BUILD | 152 + .../bazel/otel_cc_benchmark.bzl | 52 + .../bazel/repository.bzl | 186 + .../opentelemetry-cpp-1.21.0/bazel/zlib.BUILD | 74 + .../buildscripts/pre-commit | 82 + .../buildscripts/pre-merge-commit | 1 + .../buildscripts/pre_release.sh | 75 + .../semantic-convention/generate.sh | 120 + .../templates/registry/schema_url-h.j2 | 48 + .../registry/semantic_attributes-h.j2 | 132 + .../templates/registry/semantic_metrics-h.j2 | 228 + .../templates/registry/weaver.yaml | 156 + .../ext/opentelemetry-cpp-1.21.0/ci/README.md | 32 + .../ext/opentelemetry-cpp-1.21.0/ci/do_ci.ps1 | 562 ++ .../ext/opentelemetry-cpp-1.21.0/ci/do_ci.sh | 688 +++ .../ext/opentelemetry-cpp-1.21.0/ci/docfx.cmd | 21 + .../opentelemetry-cpp-1.21.0/ci/docfx.json | 31 + .../ci/fix-abseil-cpp-issue-1536.patch | 23 + .../ci/install_abseil.sh | 73 + .../ci/install_bazelisk.sh | 11 + .../ci/install_format_tools.sh | 27 + .../ci/install_gcc48.sh | 9 + .../ci/install_osx_bazelisk.sh | 9 + .../ci/install_protobuf.sh | 76 + .../ci/install_windows_bazelisk.ps1 | 11 + .../ci/install_windows_protobuf.ps1 | 9 + .../ci/ports/protobuf/CONTROL | 8 + .../ci/ports/protobuf/fix-android-log.patch | 28 + .../ci/ports/protobuf/fix-static-build.patch | 13 + .../ci/ports/protobuf/fix-uwp.patch | 12 + .../ci/ports/protobuf/portfile.cmake | 127 + .../opentelemetry-cpp-1.21.0/ci/run_docker.sh | 17 + .../ci/setup_ci_environment.sh | 16 + .../ci/setup_cmake.ps1 | 48 + .../ci/setup_cmake.sh | 48 + .../ci/setup_cmake_macos.sh | 51 + .../ci/setup_gcc10.sh | 10 + .../ci/setup_googletest.sh | 56 + .../opentelemetry-cpp-1.21.0/ci/setup_grpc.sh | 154 + .../ci/setup_windows_ci_environment.ps1 | 31 + .../ext/opentelemetry-cpp-1.21.0/ci/toc.yml | 2 + .../ci/valgrind-suppressions | 15 + .../ci/verify_packages.sh | 12 + .../cmake/ParseOsRelease.cmake | 25 + .../find-package-support-functions.cmake | 145 + .../cmake/nlohmann-json.cmake | 94 + ...entelemetry-build-external-component.cmake | 49 + .../cmake/opentelemetry-proto.cmake | 397 ++ .../cmake/otel-install-functions.cmake | 506 ++ .../cmake/package.cmake | 74 + .../cmake/patch-imported-config.cmake | 144 + .../cmake/pkgconfig.cmake | 55 + .../templates/component-definitions.cmake.in | 28 + .../cmake/templates/config.pc.in | 15 + .../opentelemetry-cpp-config.cmake.in | 228 + ...thirdparty-dependency-definitions.cmake.in | 20 + .../cmake/thirdparty-dependency-config.cmake | 46 + .../cmake/tools.cmake | 222 + .../docker/.gitignore | 1 + .../docker/Dockerfile | 35 + .../docker/Dockerfile.alpine.base | 18 + .../docker/Dockerfile.centos | 50 + .../docker/Dockerfile.debian.deps | 37 + .../opentelemetry-cpp-1.21.0/docker/README.md | 20 + .../opentelemetry-cpp-1.21.0/docker/build.sh | 74 + .../docker/grpc/CMakeLists.txt | 87 + .../docker/grpc/Dockerfile | 24 + .../docker/ubuntuLatest/Dockerfile | 41 + .../docs/abi-compatibility.md | 62 + .../docs/abi-policy.md | 60 + .../docs/abi-version-policy.md | 529 ++ .../docs/build-as-dll.md | 11 + .../docs/building-with-stdlib.md | 207 + .../docs/building-with-vcpkg.md | 119 + .../docs/building-with-vs2019.md | 190 + .../docs/cpp-ostream-exporter-design.md | 259 + .../docs/cpp-sdk-factory-design.md | 210 + .../docs/dependencies.md | 101 + .../docs/deprecation-process.md | 433 ++ .../docs/google-test.md | 375 ++ .../docs/library-distribution.md | 128 + .../docs/maintaining-dependencies.md | 638 ++ .../docs/public/Doxyfile | 2479 ++++++++ .../docs/public/GettingHelp.rst | 17 + .../docs/public/Makefile | 27 + .../public/_static/opentelemetry_logo.png | Bin 0 -> 14927 bytes .../docs/public/_templates/sidebar/brand.html | 8 + .../docs/public/api/GettingStarted.rst | 104 + .../docs/public/api/Overview.rst | 26 + .../docs/public/api/api.rst | 8 + .../docs/public/conf.py | 90 + .../docs/public/index.rst | 57 + .../docs/public/performance/benchmarks.rst | 6 + .../docs/public/requirements.txt | 3 + .../docs/public/resources/footer.html | 14 + .../docs/public/resources/header.html | 56 + .../docs/public/resources/stylesheet.css | 1600 ++++++ .../docs/public/sdk/GettingStarted.rst | 209 + .../docs/public/sdk/sdk.rst | 7 + .../docs/requirements.md | 23 + .../docs/testing-with-ssl.md | 351 ++ .../docs/using-clang-format.md | 53 + .../examples/CMakeLists.txt | 33 + .../examples/batch/BUILD | 16 + .../examples/batch/CMakeLists.txt | 7 + .../examples/batch/main.cc | 112 + .../examples/common/CMakeLists.txt | 7 + .../examples/common/foo_library/BUILD | 19 + .../common/foo_library/CMakeLists.txt | 15 + .../common/foo_library/foo_library.cc | 40 + .../examples/common/foo_library/foo_library.h | 6 + .../examples/common/logs_foo_library/BUILD | 19 + .../common/logs_foo_library/CMakeLists.txt | 16 + .../common/logs_foo_library/foo_library.cc | 41 + .../common/logs_foo_library/foo_library.h | 6 + .../examples/common/metrics_foo_library/BUILD | 20 + .../common/metrics_foo_library/CMakeLists.txt | 16 + .../common/metrics_foo_library/foo_library.cc | 195 + .../common/metrics_foo_library/foo_library.h | 21 + .../examples/etw_threads/BUILD | 18 + .../examples/etw_threads/CMakeLists.txt | 10 + .../examples/etw_threads/README.md | 32 + .../examples/etw_threads/main.cc | 154 + .../examples/grpc/BUILD | 66 + .../examples/grpc/CMakeLists.txt | 49 + .../examples/grpc/README.md | 107 + .../examples/grpc/client.cc | 139 + .../examples/grpc/protos/messages.proto | 18 + .../examples/grpc/server.cc | 140 + .../examples/grpc/tracer_common.h | 109 + .../examples/http/BUILD | 42 + .../examples/http/CMakeLists.txt | 15 + .../examples/http/README.md | 112 + .../examples/http/client.cc | 99 + .../examples/http/server.cc | 100 + .../examples/http/server.h | 53 + .../examples/http/tracer_common.h | 98 + .../examples/logs_simple/BUILD | 19 + .../examples/logs_simple/CMakeLists.txt | 18 + .../examples/logs_simple/README.md | 16 + .../examples/logs_simple/main.cc | 91 + .../examples/metrics_simple/BUILD | 17 + .../examples/metrics_simple/CMakeLists.txt | 18 + .../examples/metrics_simple/README.md | 117 + .../metrics_simple/metrics_ostream.cc | 226 + .../examples/multi_processor/BUILD | 20 + .../examples/multi_processor/CMakeLists.txt | 9 + .../examples/multi_processor/README.md | 15 + .../examples/multi_processor/main.cc | 112 + .../examples/multithreaded/BUILD | 15 + .../examples/multithreaded/CMakeLists.txt | 7 + .../examples/multithreaded/main.cc | 87 + .../examples/otlp/BUILD | 192 + .../examples/otlp/CMakeLists.txt | 179 + .../examples/otlp/README.md | 69 + .../examples/otlp/file_log_main.cc | 129 + .../examples/otlp/file_main.cc | 76 + .../examples/otlp/file_metric_main.cc | 126 + .../examples/otlp/grpc_log_main.cc | 121 + .../examples/otlp/grpc_main.cc | 74 + .../examples/otlp/grpc_metric_main.cc | 165 + .../examples/otlp/http_instrumented_main.cc | 360 ++ .../examples/otlp/http_log_main.cc | 168 + .../examples/otlp/http_main.cc | 105 + .../examples/otlp/http_metric_main.cc | 160 + .../config.dev.yaml | 30 + .../examples/plugin/CMakeLists.txt | 8 + .../examples/plugin/load/BUILD | 15 + .../examples/plugin/load/CMakeLists.txt | 6 + .../examples/plugin/load/main.cc | 44 + .../examples/plugin/plugin/BUILD | 15 + .../examples/plugin/plugin/CMakeLists.txt | 5 + .../examples/plugin/plugin/factory_impl.cc | 55 + .../examples/plugin/plugin/tracer.cc | 98 + .../examples/plugin/plugin/tracer.h | 36 + .../examples/prometheus/BUILD | 17 + .../examples/prometheus/CMakeLists.txt | 7 + .../examples/prometheus/README.md | 180 + .../examples/prometheus/main.cc | 139 + .../examples/prometheus/prometheus.yml | 11 + .../examples/prometheus/run.sh | 6 + .../examples/simple/BUILD | 18 + .../examples/simple/CMakeLists.txt | 16 + .../examples/simple/README.md | 12 + .../examples/simple/main.cc | 57 + .../examples/zipkin/CMakeLists.txt | 7 + .../examples/zipkin/README.md | 32 + .../examples/zipkin/main.cc | 66 + .../exporters/CMakeLists.txt | 27 + .../exporters/elasticsearch/BUILD | 47 + .../exporters/elasticsearch/CMakeLists.txt | 49 + .../elasticsearch/es_log_record_exporter.h | 142 + .../elasticsearch/es_log_recordable.h | 127 + .../src/es_log_record_exporter.cc | 484 ++ .../elasticsearch/src/es_log_recordable.cc | 208 + .../test/es_log_record_exporter_test.cc | 128 + .../exporters/etw/BUILD | 72 + .../exporters/etw/CMakeLists.txt | 91 + .../exporters/etw/README.md | 16 + .../opentelemetry/exporters/etw/LICENSE | 23 + .../exporters/etw/TraceLoggingDynamic.h | 3458 +++++++++++ .../opentelemetry/exporters/etw/etw_config.h | 244 + .../opentelemetry/exporters/etw/etw_fields.h | 146 + .../opentelemetry/exporters/etw/etw_logger.h | 432 ++ .../exporters/etw/etw_logger_exporter.h | 27 + .../exporters/etw/etw_properties.h | 459 ++ .../exporters/etw/etw_provider.h | 635 ++ .../exporters/etw/etw_random_id_generator.h | 49 + .../exporters/etw/etw_tail_sampler.h | 40 + .../exporters/etw/etw_traceloggingdynamic.h | 18 + .../opentelemetry/exporters/etw/etw_tracer.h | 1193 ++++ .../exporters/etw/etw_tracer_exporter.h | 28 + .../opentelemetry/exporters/etw/utils.h | 431 ++ .../opentelemetry/exporters/etw/uuid.h | 412 ++ .../exporters/etw/test/etw_logger_test.cc | 198 + .../exporters/etw/test/etw_perf_test.cc | 192 + .../exporters/etw/test/etw_provider_test.cc | 64 + .../exporters/etw/test/etw_tracer_test.cc | 571 ++ .../exporters/memory/BUILD | 141 + .../exporters/memory/CMakeLists.txt | 92 + .../exporters/memory/in_memory_data.h | 62 + .../exporters/memory/in_memory_metric_data.h | 68 + .../in_memory_metric_exporter_factory.h | 38 + .../exporters/memory/in_memory_span_data.h | 33 + .../memory/in_memory_span_exporter.h | 106 + .../memory/in_memory_span_exporter_factory.h | 46 + .../memory/src/in_memory_metric_data.cc | 71 + .../src/in_memory_metric_exporter_factory.cc | 101 + .../src/in_memory_span_exporter_factory.cc | 33 + .../memory/test/in_memory_metric_data_test.cc | 63 + .../test/in_memory_metric_exporter_test.cc | 64 + .../memory/test/in_memory_span_data_test.cc | 29 + .../test/in_memory_span_exporter_test.cc | 33 + .../exporters/ostream/BUILD | 112 + .../exporters/ostream/CMakeLists.txt | 90 + .../exporters/ostream/common_utils.h | 131 + .../exporters/ostream/log_record_exporter.h | 76 + .../ostream/log_record_exporter_factory.h | 37 + .../exporters/ostream/metric_exporter.h | 87 + .../ostream/metric_exporter_factory.h | 43 + .../exporters/ostream/span_exporter.h | 85 + .../exporters/ostream/span_exporter_factory.h | 37 + .../ostream/src/log_record_exporter.cc | 180 + .../src/log_record_exporter_factory.cc | 30 + .../exporters/ostream/src/metric_exporter.cc | 322 ++ .../ostream/src/metric_exporter_factory.cc | 36 + .../exporters/ostream/src/span_exporter.cc | 200 + .../ostream/src/span_exporter_factory.cc | 29 + .../exporters/ostream/test/ostream_capture.h | 60 + .../ostream/test/ostream_log_test.cc | 538 ++ .../ostream/test/ostream_metric_test.cc | 413 ++ .../ostream/test/ostream_span_test.cc | 412 ++ .../exporters/otlp/BUILD | 781 +++ .../exporters/otlp/CMakeLists.txt | 623 ++ .../exporters/otlp/README.md | 137 + .../exporters/otlp/otlp_environment.h | 173 + .../exporters/otlp/otlp_file_client.h | 92 + .../exporters/otlp/otlp_file_client_options.h | 108 + .../otlp/otlp_file_client_runtime_options.h | 31 + .../exporters/otlp/otlp_file_exporter.h | 88 + .../otlp/otlp_file_exporter_factory.h | 46 + .../otlp/otlp_file_exporter_options.h | 30 + .../otlp/otlp_file_exporter_runtime_options.h | 27 + .../otlp/otlp_file_log_record_exporter.h | 89 + .../otlp_file_log_record_exporter_factory.h | 46 + .../otlp_file_log_record_exporter_options.h | 30 + ...file_log_record_exporter_runtime_options.h | 27 + .../otlp/otlp_file_metric_exporter.h | 84 + .../otlp/otlp_file_metric_exporter_factory.h | 46 + .../otlp/otlp_file_metric_exporter_options.h | 33 + ...tlp_file_metric_exporter_runtime_options.h | 27 + .../exporters/otlp/otlp_grpc_client.h | 215 + .../exporters/otlp/otlp_grpc_client_factory.h | 37 + .../exporters/otlp/otlp_grpc_client_options.h | 81 + .../exporters/otlp/otlp_grpc_exporter.h | 134 + .../otlp/otlp_grpc_exporter_factory.h | 47 + .../otlp/otlp_grpc_exporter_options.h | 32 + .../otlp/otlp_grpc_log_record_exporter.h | 135 + .../otlp_grpc_log_record_exporter_factory.h | 45 + .../otlp_grpc_log_record_exporter_options.h | 31 + .../otlp/otlp_grpc_metric_exporter.h | 123 + .../otlp/otlp_grpc_metric_exporter_factory.h | 47 + .../otlp/otlp_grpc_metric_exporter_options.h | 36 + .../exporters/otlp/otlp_grpc_utils.h | 25 + .../opentelemetry/exporters/otlp/otlp_http.h | 33 + .../exporters/otlp/otlp_http_client.h | 321 ++ .../exporters/otlp/otlp_http_exporter.h | 96 + .../otlp/otlp_http_exporter_factory.h | 46 + .../otlp/otlp_http_exporter_options.h | 121 + .../otlp/otlp_http_exporter_runtime_options.h | 31 + .../otlp/otlp_http_log_record_exporter.h | 97 + .../otlp_http_log_record_exporter_factory.h | 46 + .../otlp_http_log_record_exporter_options.h | 121 + ...http_log_record_exporter_runtime_options.h | 31 + .../otlp/otlp_http_metric_exporter.h | 91 + .../otlp/otlp_http_metric_exporter_factory.h | 46 + .../otlp/otlp_http_metric_exporter_options.h | 124 + ...tlp_http_metric_exporter_runtime_options.h | 31 + .../exporters/otlp/otlp_log_recordable.h | 129 + .../exporters/otlp/otlp_metric_utils.h | 89 + .../otlp/otlp_populate_attribute_utils.h | 77 + .../otlp/otlp_preferred_temporality.h | 23 + .../exporters/otlp/otlp_recordable.h | 91 + .../exporters/otlp/otlp_recordable_utils.h | 60 + .../exporters/otlp/protobuf_include_prefix.h | 66 + .../exporters/otlp/protobuf_include_suffix.h | 16 + .../exporters/otlp/src/otlp_environment.cc | 1329 +++++ .../exporters/otlp/src/otlp_file_client.cc | 1704 ++++++ .../exporters/otlp/src/otlp_file_exporter.cc | 114 + .../otlp/src/otlp_file_exporter_factory.cc | 40 + .../otlp/src/otlp_file_exporter_options.cc | 34 + .../otlp/src/otlp_file_log_record_exporter.cc | 116 + .../otlp_file_log_record_exporter_factory.cc | 42 + .../otlp_file_log_record_exporter_options.cc | 34 + .../otlp/src/otlp_file_metric_exporter.cc | 122 + .../src/otlp_file_metric_exporter_factory.cc | 41 + .../src/otlp_file_metric_exporter_options.cc | 35 + .../exporters/otlp/src/otlp_grpc_client.cc | 774 +++ .../otlp/src/otlp_grpc_client_factory.cc | 27 + .../exporters/otlp/src/otlp_grpc_exporter.cc | 213 + .../otlp/src/otlp_grpc_exporter_factory.cc | 41 + .../otlp/src/otlp_grpc_exporter_options.cc | 50 + .../otlp/src/otlp_grpc_log_record_exporter.cc | 221 + .../otlp_grpc_log_record_exporter_factory.cc | 42 + .../otlp_grpc_log_record_exporter_options.cc | 48 + .../otlp/src/otlp_grpc_metric_exporter.cc | 219 + .../src/otlp_grpc_metric_exporter_factory.cc | 42 + .../src/otlp_grpc_metric_exporter_options.cc | 49 + .../exporters/otlp/src/otlp_grpc_utils.cc | 62 + .../exporters/otlp/src/otlp_http.cc | 26 + .../exporters/otlp/src/otlp_http_client.cc | 1057 ++++ .../exporters/otlp/src/otlp_http_exporter.cc | 218 + .../otlp/src/otlp_http_exporter_factory.cc | 39 + .../otlp/src/otlp_http_exporter_options.cc | 50 + .../otlp/src/otlp_http_log_record_exporter.cc | 218 + .../otlp_http_log_record_exporter_factory.cc | 41 + .../otlp_http_log_record_exporter_options.cc | 50 + .../otlp/src/otlp_http_metric_exporter.cc | 227 + .../src/otlp_http_metric_exporter_factory.cc | 40 + .../src/otlp_http_metric_exporter_options.cc | 52 + .../exporters/otlp/src/otlp_log_recordable.cc | 256 + .../exporters/otlp/src/otlp_metric_utils.cc | 412 ++ .../otlp/src/otlp_populate_attribute_utils.cc | 330 ++ .../exporters/otlp/src/otlp_recordable.cc | 233 + .../otlp/src/otlp_recordable_utils.cc | 187 + .../otlp/test/otlp_file_client_test.cc | 557 ++ .../test/otlp_file_exporter_factory_test.cc | 46 + .../otlp/test/otlp_file_exporter_test.cc | 195 + ...p_file_log_record_exporter_factory_test.cc | 46 + .../otlp_file_log_record_exporter_test.cc | 190 + .../otlp_file_metric_exporter_factory_test.cc | 46 + .../test/otlp_file_metric_exporter_test.cc | 416 ++ .../otlp/test/otlp_grpc_exporter_benchmark.cc | 279 + .../test/otlp_grpc_exporter_factory_test.cc | 70 + .../otlp/test/otlp_grpc_exporter_test.cc | 567 ++ ...p_grpc_log_record_exporter_factory_test.cc | 72 + .../otlp_grpc_log_record_exporter_test.cc | 524 ++ .../otlp_grpc_metric_exporter_factory_test.cc | 72 + .../test/otlp_grpc_metric_exporter_test.cc | 306 + .../otlp/test/otlp_grpc_target_test.cc | 37 + .../test/otlp_http_exporter_factory_test.cc | 48 + .../otlp/test/otlp_http_exporter_test.cc | 797 +++ ...p_http_log_record_exporter_factory_test.cc | 48 + .../otlp_http_log_record_exporter_test.cc | 814 +++ .../otlp_http_metric_exporter_factory_test.cc | 48 + .../test/otlp_http_metric_exporter_test.cc | 1140 ++++ .../otlp/test/otlp_log_recordable_test.cc | 234 + .../test/otlp_metrics_serialization_test.cc | 460 ++ .../otlp/test/otlp_recordable_test.cc | 510 ++ .../exporters/prometheus/BUILD | 128 + .../exporters/prometheus/CMakeLists.txt | 54 + .../exporters/prometheus/collector.h | 56 + .../exporters/prometheus/exporter.h | 66 + .../exporters/prometheus/exporter_factory.h | 34 + .../exporters/prometheus/exporter_options.h | 41 + .../exporters/prometheus/exporter_utils.h | 230 + .../exporters/prometheus/src/collector.cc | 69 + .../exporters/prometheus/src/exporter.cc | 73 + .../prometheus/src/exporter_factory.cc | 28 + .../prometheus/src/exporter_options.cc | 82 + .../prometheus/src/exporter_utils.cc | 855 +++ .../exporters/prometheus/test/CMakeLists.txt | 14 + .../prometheus/test/collector_test.cc | 86 + .../prometheus/test/exporter_test.cc | 77 + .../prometheus/test/exporter_utils_test.cc | 540 ++ .../prometheus/test/prometheus_test_helper.h | 235 + .../exporters/zipkin/BUILD | 70 + .../exporters/zipkin/CMakeLists.txt | 68 + .../exporters/zipkin/README.md | 56 + .../exporters/zipkin/recordable.h | 75 + .../exporters/zipkin/zipkin_exporter.h | 96 + .../zipkin/zipkin_exporter_factory.h | 38 + .../zipkin/zipkin_exporter_options.h | 50 + .../exporters/zipkin/src/recordable.cc | 281 + .../exporters/zipkin/src/zipkin_exporter.cc | 151 + .../zipkin/src/zipkin_exporter_factory.cc | 33 + .../zipkin/test/zipkin_exporter_test.cc | 228 + .../zipkin/test/zipkin_recordable_test.cc | 304 + .../ext/opentelemetry-cpp-1.21.0/ext/BUILD | 10 + .../ext/CMakeLists.txt | 30 + .../ext/http/client/curl/http_client_curl.h | 383 ++ .../http/client/curl/http_operation_curl.h | 353 ++ .../ext/http/client/http_client.h | 421 ++ .../ext/http/client/http_client_factory.h | 29 + .../ext/http/common/url_parser.h | 239 + .../ext/http/server/file_http_server.h | 148 + .../ext/http/server/http_server.h | 889 +++ .../ext/http/server/socket_tools.h | 851 +++ .../ext/src/CMakeLists.txt | 10 + .../ext/src/dll/CMakeLists.txt | 192 + .../ext/src/dll/dllmain.cc | 19 + .../ext/src/dll/input.src | 83 + .../ext/src/dll/make_def.ps1 | 8 + .../ext/src/dll/opentelemetry_cpp.src | 135 + .../ext/src/http/client/curl/BUILD | 31 + .../ext/src/http/client/curl/CMakeLists.txt | 71 + .../src/http/client/curl/http_client_curl.cc | 912 +++ .../client/curl/http_client_factory_curl.cc | 27 + .../http/client/curl/http_operation_curl.cc | 1434 +++++ .../ext/test/CMakeLists.txt | 7 + .../ext/test/http/BUILD | 17 + .../ext/test/http/CMakeLists.txt | 42 + .../ext/test/http/curl_http_test.cc | 821 +++ .../ext/test/http/url_parser_test.cc | 139 + .../w3c_tracecontext_http_test_server/BUILD | 26 + .../CMakeLists.txt | 13 + .../Dockerfile | 11 + .../README.md | 55 + .../w3c_tracecontext_http_test_server/main.cc | 254 + .../functional/CMakeLists.txt | 6 + .../functional/cert/ca_csr.json | 12 + .../functional/cert/ca_csr_b.json | 12 + .../functional/cert/client_csr.json | 12 + .../functional/cert/client_csr_b.json | 12 + .../functional/cert/garbage.pem | 1 + .../functional/cert/generate_cert.sh | 38 + .../functional/cert/server_csr.json | 12 + .../functional/cert/server_csr_b.json | 12 + .../functional/otlp/CMakeLists.txt | 14 + .../functional/otlp/Dockerfile | 8 + .../functional/otlp/func_grpc_main.cc | 822 +++ .../functional/otlp/func_http_main.cc | 1881 ++++++ .../functional/otlp/otel-config-http.yaml | 33 + .../otlp/otel-config-https-mtls.yaml | 40 + .../functional/otlp/otel-config-https.yaml | 40 + .../otlp/otel-docker-config-http.yaml | 32 + .../otlp/otel-docker-config-https-mtls.yaml | 39 + .../otlp/otel-docker-config-https.yaml | 39 + .../functional/otlp/run_test.sh | 185 + .../functional/otlp/run_test_mode.sh | 80 + .../install/conan/conanfile_latest.txt | 40 + .../install/conan/conanfile_stable.txt | 40 + .../install/test/cmake/CMakeLists.txt | 141 + .../cmake/component_tests/api/CMakeLists.txt | 17 + .../exporters_elasticsearch/CMakeLists.txt | 23 + .../exporters_etw/CMakeLists.txt | 20 + .../exporters_in_memory/CMakeLists.txt | 20 + .../exporters_ostream/CMakeLists.txt | 22 + .../exporters_otlp_common/CMakeLists.txt | 23 + .../exporters_otlp_file/CMakeLists.txt | 27 + .../exporters_otlp_grpc/CMakeLists.txt | 30 + .../exporters_otlp_http/CMakeLists.txt | 27 + .../exporters_prometheus/CMakeLists.txt | 22 + .../exporters_zipkin/CMakeLists.txt | 22 + .../component_tests/ext_common/CMakeLists.txt | 16 + .../component_tests/ext_dll/CMakeLists.txt | 19 + .../ext_http_curl/CMakeLists.txt | 21 + .../cmake/component_tests/sdk/CMakeLists.txt | 30 + .../shims_opentracing/CMakeLists.txt | 22 + .../cmake/fetch_content_test/CMakeLists.txt | 83 + .../test/cmake/package_test/CMakeLists.txt | 78 + .../missing_components/CMakeLists.txt | 45 + .../usage_tests/no_components/CMakeLists.txt | 37 + .../unsorted_components/CMakeLists.txt | 46 + .../unsupported_components/CMakeLists.txt | 23 + .../install/test/src/test_api.cc | 91 + .../test/src/test_exporters_elasticsearch.cc | 20 + .../install/test/src/test_exporters_etw.cc | 65 + .../test/src/test_exporters_in_memory.cc | 25 + .../test/src/test_exporters_ostream.cc | 26 + .../test/src/test_exporters_otlp_common.cc | 161 + .../test/src/test_exporters_otlp_file.cc | 34 + .../test/src/test_exporters_otlp_grpc.cc | 42 + .../test/src/test_exporters_otlp_http.cc | 34 + .../test/src/test_exporters_prometheus.cc | 14 + .../install/test/src/test_exporters_zipkin.cc | 14 + .../install/test/src/test_ext_common.cc | 12 + .../install/test/src/test_ext_dll.cc | 116 + .../install/test/src/test_ext_http_curl.cc | 13 + .../install/test/src/test_sdk.cc | 262 + .../test/src/test_shims_opentracing.cc | 23 + .../opentracing-shim/BUILD | 106 + .../opentracing-shim/CMakeLists.txt | 65 + .../opentracing-shim/README.md | 53 + .../opentracingshim/propagation.h | 94 + .../opentracingshim/shim_utils.h | 191 + .../opentracingshim/span_context_shim.h | 73 + .../opentelemetry/opentracingshim/span_shim.h | 69 + .../opentracingshim/tracer_shim.h | 91 + .../opentracing-shim/src/shim_utils.cc | 104 + .../opentracing-shim/src/span_context_shim.cc | 60 + .../opentracing-shim/src/span_shim.cc | 186 + .../opentracing-shim/src/tracer_shim.cc | 203 + .../opentracing-shim/test/propagation_test.cc | 120 + .../opentracing-shim/test/shim_mocks.h | 261 + .../opentracing-shim/test/shim_utils_test.cc | 308 + .../test/span_context_shim_test.cc | 117 + .../opentracing-shim/test/span_shim_test.cc | 250 + .../opentracing-shim/test/tracer_shim_test.cc | 344 ++ .../ext/opentelemetry-cpp-1.21.0/sdk/BUILD | 10 + .../sdk/CMakeLists.txt | 38 + .../sdk/common/atomic_shared_ptr.h | 63 + .../sdk/common/atomic_unique_ptr.h | 86 + .../sdk/common/attribute_utils.h | 303 + .../sdk/common/attributemap_hash.h | 82 + .../include/opentelemetry/sdk/common/base64.h | 35 + .../sdk/common/circular_buffer.h | 197 + .../sdk/common/circular_buffer_range.h | 92 + .../opentelemetry/sdk/common/disabled.h | 18 + .../sdk/common/empty_attributes.h | 36 + .../opentelemetry/sdk/common/env_variables.h | 73 + .../opentelemetry/sdk/common/exporter_utils.h | 34 + .../sdk/common/global_log_handler.h | 214 + .../sdk/common/thread_instrumentation.h | 92 + .../instrumentation_library.h | 21 + .../instrumentation_scope.h | 182 + .../instrumentationscope/scope_configurator.h | 145 + .../sdk/logs/batch_log_record_processor.h | 179 + .../logs/batch_log_record_processor_factory.h | 44 + .../logs/batch_log_record_processor_options.h | 41 + ...tch_log_record_processor_runtime_options.h | 30 + .../opentelemetry/sdk/logs/event_logger.h | 52 + .../sdk/logs/event_logger_provider.h | 38 + .../sdk/logs/event_logger_provider_factory.h | 35 + .../include/opentelemetry/sdk/logs/exporter.h | 68 + .../include/opentelemetry/sdk/logs/logger.h | 76 + .../opentelemetry/sdk/logs/logger_config.h | 58 + .../opentelemetry/sdk/logs/logger_context.h | 100 + .../sdk/logs/logger_context_factory.h | 62 + .../opentelemetry/sdk/logs/logger_provider.h | 130 + .../sdk/logs/logger_provider_factory.h | 78 + .../sdk/logs/multi_log_record_processor.h | 65 + .../logs/multi_log_record_processor_factory.h | 31 + .../opentelemetry/sdk/logs/multi_recordable.h | 113 + .../opentelemetry/sdk/logs/processor.h | 63 + .../include/opentelemetry/sdk/logs/provider.h | 33 + .../sdk/logs/read_write_log_record.h | 209 + .../sdk/logs/readable_log_record.h | 145 + .../opentelemetry/sdk/logs/recordable.h | 50 + .../sdk/logs/simple_log_record_processor.h | 58 + .../simple_log_record_processor_factory.h | 32 + .../sdk/metrics/aggregation/aggregation.h | 56 + .../metrics/aggregation/aggregation_config.h | 38 + .../base2_exponential_histogram_aggregation.h | 60 + .../base2_exponential_histogram_indexer.h | 46 + .../metrics/aggregation/default_aggregation.h | 203 + .../metrics/aggregation/drop_aggregation.h | 51 + .../aggregation/histogram_aggregation.h | 128 + .../aggregation/lastvalue_aggregation.h | 66 + .../sdk/metrics/aggregation/sum_aggregation.h | 67 + .../sdk/metrics/async_instruments.h | 45 + .../sdk/metrics/data/circular_buffer.h | 159 + .../sdk/metrics/data/exemplar_data.h | 84 + .../sdk/metrics/data/metric_data.h | 45 + .../sdk/metrics/data/point_data.h | 165 + ...gned_histogram_bucket_exemplar_reservoir.h | 96 + .../sdk/metrics/exemplar/filter_type.h | 46 + .../exemplar/fixed_size_exemplar_reservoir.h | 108 + .../metrics/exemplar/no_exemplar_reservoir.h | 67 + .../sdk/metrics/exemplar/reservoir.h | 90 + .../sdk/metrics/exemplar/reservoir_cell.h | 164 + .../exemplar/reservoir_cell_selector.h | 51 + .../sdk/metrics/exemplar/reservoir_utils.h | 62 + .../simple_fixed_size_exemplar_reservoir.h | 108 + .../sdk/metrics/export/metric_filter.h | 112 + .../sdk/metrics/export/metric_producer.h | 114 + .../export/periodic_exporting_metric_reader.h | 71 + ...periodic_exporting_metric_reader_factory.h | 34 + ...periodic_exporting_metric_reader_options.h | 35 + ..._exporting_metric_reader_runtime_options.h | 30 + .../metrics/instrument_metadata_validator.h | 35 + .../opentelemetry/sdk/metrics/instruments.h | 232 + .../include/opentelemetry/sdk/metrics/meter.h | 187 + .../opentelemetry/sdk/metrics/meter_config.h | 57 + .../opentelemetry/sdk/metrics/meter_context.h | 199 + .../sdk/metrics/meter_context_factory.h | 63 + .../sdk/metrics/meter_provider.h | 142 + .../sdk/metrics/meter_provider_factory.h | 44 + .../opentelemetry/sdk/metrics/metric_reader.h | 75 + .../sdk/metrics/observer_result.h | 54 + .../opentelemetry/sdk/metrics/provider.h | 33 + .../sdk/metrics/push_metric_exporter.h | 60 + .../sdk/metrics/state/async_metric_storage.h | 151 + .../sdk/metrics/state/attributes_hashmap.h | 239 + .../state/filtered_ordered_attribute_map.h | 94 + .../sdk/metrics/state/metric_collector.h | 72 + .../sdk/metrics/state/metric_storage.h | 135 + .../sdk/metrics/state/multi_metric_storage.h | 109 + .../sdk/metrics/state/observable_registry.h | 49 + .../sdk/metrics/state/sync_metric_storage.h | 189 + .../metrics/state/temporal_metric_storage.h | 62 + .../sdk/metrics/sync_instruments.h | 179 + .../sdk/metrics/view/attributes_processor.h | 106 + .../sdk/metrics/view/instrument_selector.h | 43 + .../view/instrument_selector_factory.h | 30 + .../sdk/metrics/view/meter_selector.h | 48 + .../sdk/metrics/view/meter_selector_factory.h | 28 + .../sdk/metrics/view/predicate.h | 79 + .../sdk/metrics/view/predicate_factory.h | 48 + .../opentelemetry/sdk/metrics/view/view.h | 72 + .../sdk/metrics/view/view_factory.h | 56 + .../sdk/metrics/view/view_registry.h | 112 + .../sdk/metrics/view/view_registry_factory.h | 23 + .../opentelemetry/sdk/resource/resource.h | 83 + .../sdk/resource/resource_detector.h | 44 + .../sdk/resource/semantic_conventions.h | 5114 +++++++++++++++++ .../sdk/trace/batch_span_processor.h | 180 + .../sdk/trace/batch_span_processor_factory.h | 43 + .../sdk/trace/batch_span_processor_options.h | 40 + .../batch_span_processor_runtime_options.h | 29 + .../opentelemetry/sdk/trace/exporter.h | 68 + .../opentelemetry/sdk/trace/id_generator.h | 41 + .../sdk/trace/multi_recordable.h | 168 + .../sdk/trace/multi_span_processor.h | 188 + .../opentelemetry/sdk/trace/processor.h | 78 + .../opentelemetry/sdk/trace/provider.h | 31 + .../sdk/trace/random_id_generator.h | 29 + .../sdk/trace/random_id_generator_factory.h | 31 + .../opentelemetry/sdk/trace/recordable.h | 191 + .../include/opentelemetry/sdk/trace/sampler.h | 108 + .../sdk/trace/samplers/always_off.h | 53 + .../sdk/trace/samplers/always_off_factory.h | 31 + .../sdk/trace/samplers/always_on.h | 62 + .../sdk/trace/samplers/always_on_factory.h | 31 + .../opentelemetry/sdk/trace/samplers/parent.h | 54 + .../sdk/trace/samplers/parent_factory.h | 31 + .../sdk/trace/samplers/trace_id_ratio.h | 60 + .../trace/samplers/trace_id_ratio_factory.h | 31 + .../sdk/trace/simple_processor.h | 102 + .../sdk/trace/simple_processor_factory.h | 32 + .../opentelemetry/sdk/trace/span_data.h | 328 ++ .../include/opentelemetry/sdk/trace/tracer.h | 115 + .../opentelemetry/sdk/trace/tracer_config.h | 57 + .../opentelemetry/sdk/trace/tracer_context.h | 122 + .../sdk/trace/tracer_context_factory.h | 71 + .../opentelemetry/sdk/trace/tracer_provider.h | 131 + .../sdk/trace/tracer_provider_factory.h | 93 + .../opentelemetry/sdk/version/version.h | 25 + .../sdk/include/opentelemetry/sdk_config.h | 6 + .../sdk/src/CMakeLists.txt | 9 + .../sdk/src/common/BUILD | 69 + .../sdk/src/common/CMakeLists.txt | 30 + .../sdk/src/common/base64.cc | 331 ++ .../sdk/src/common/disabled.cc | 32 + .../sdk/src/common/env_variables.cc | 278 + .../src/common/fast_random_number_generator.h | 82 + .../sdk/src/common/global_log_handler.cc | 134 + .../sdk/src/common/platform/BUILD | 23 + .../sdk/src/common/platform/fork.h | 24 + .../sdk/src/common/platform/fork_unix.cc | 23 + .../sdk/src/common/platform/fork_windows.cc | 23 + .../sdk/src/common/random.cc | 87 + .../sdk/src/common/random.h | 43 + .../sdk/src/logs/BUILD | 17 + .../sdk/src/logs/CMakeLists.txt | 42 + .../src/logs/batch_log_record_processor.cc | 399 ++ .../batch_log_record_processor_factory.cc | 41 + .../sdk/src/logs/event_logger.cc | 63 + .../sdk/src/logs/event_logger_provider.cc | 34 + .../src/logs/event_logger_provider_factory.cc | 21 + .../sdk/src/logs/exporter.cc | 24 + .../sdk/src/logs/logger.cc | 139 + .../sdk/src/logs/logger_config.cc | 41 + .../sdk/src/logs/logger_context.cc | 68 + .../sdk/src/logs/logger_context_factory.cc | 53 + .../sdk/src/logs/logger_provider.cc | 144 + .../sdk/src/logs/logger_provider_factory.cc | 89 + .../src/logs/multi_log_record_processor.cc | 155 + .../multi_log_record_processor_factory.cc | 29 + .../sdk/src/logs/multi_recordable.cc | 195 + .../sdk/src/logs/provider.cc | 31 + .../sdk/src/logs/read_write_log_record.cc | 213 + .../sdk/src/logs/readable_log_record.cc | 55 + .../src/logs/simple_log_record_processor.cc | 83 + .../simple_log_record_processor_factory.cc | 28 + .../sdk/src/metrics/BUILD | 18 + .../sdk/src/metrics/CMakeLists.txt | 51 + ...base2_exponential_histogram_aggregation.cc | 491 ++ .../base2_exponential_histogram_indexer.cc | 71 + .../aggregation/histogram_aggregation.cc | 192 + .../aggregation/lastvalue_aggregation.cc | 145 + .../metrics/aggregation/sum_aggregation.cc | 135 + .../sdk/src/metrics/async_instruments.cc | 58 + .../sdk/src/metrics/data/circular_buffer.cc | 193 + .../sdk/src/metrics/exemplar/reservoir.cc | 47 + .../periodic_exporting_metric_reader.cc | 300 + ...eriodic_exporting_metric_reader_factory.cc | 41 + .../metrics/instrument_metadata_validator.cc | 87 + .../sdk/src/metrics/meter.cc | 734 +++ .../sdk/src/metrics/meter_config.cc | 40 + .../sdk/src/metrics/meter_context.cc | 226 + .../sdk/src/metrics/meter_context_factory.cc | 57 + .../sdk/src/metrics/meter_provider.cc | 168 + .../sdk/src/metrics/meter_provider_factory.cc | 68 + .../sdk/src/metrics/metric_reader.cc | 91 + .../sdk/src/metrics/provider.cc | 30 + .../state/filtered_ordered_attribute_map.cc | 49 + .../sdk/src/metrics/state/metric_collector.cc | 146 + .../src/metrics/state/observable_registry.cc | 109 + .../src/metrics/state/sync_metric_storage.cc | 47 + .../metrics/state/temporal_metric_storage.cc | 188 + .../sdk/src/metrics/sync_instruments.cc | 574 ++ .../view/instrument_selector_factory.cc | 26 + .../metrics/view/meter_selector_factory.cc | 24 + .../sdk/src/metrics/view/view_factory.cc | 75 + .../src/metrics/view/view_registry_factory.cc | 22 + .../sdk/src/resource/BUILD | 15 + .../sdk/src/resource/CMakeLists.txt | 20 + .../sdk/src/resource/resource.cc | 83 + .../sdk/src/resource/resource_detector.cc | 73 + .../sdk/src/trace/BUILD | 19 + .../sdk/src/trace/CMakeLists.txt | 42 + .../sdk/src/trace/batch_span_processor.cc | 390 ++ .../src/trace/batch_span_processor_factory.cc | 41 + .../sdk/src/trace/exporter.cc | 23 + .../sdk/src/trace/provider.cc | 30 + .../sdk/src/trace/random_id_generator.cc | 35 + .../src/trace/random_id_generator_factory.cc | 22 + .../src/trace/samplers/always_off_factory.cc | 22 + .../src/trace/samplers/always_on_factory.cc | 22 + .../sdk/src/trace/samplers/parent.cc | 59 + .../sdk/src/trace/samplers/parent_factory.cc | 26 + .../sdk/src/trace/samplers/trace_id_ratio.cc | 108 + .../trace/samplers/trace_id_ratio_factory.cc | 22 + .../sdk/src/trace/simple_processor_factory.cc | 27 + .../sdk/src/trace/span.cc | 232 + .../sdk/src/trace/span.h | 87 + .../sdk/src/trace/tracer.cc | 191 + .../sdk/src/trace/tracer_config.cc | 41 + .../sdk/src/trace/tracer_context.cc | 84 + .../sdk/src/trace/tracer_context_factory.cc | 79 + .../sdk/src/trace/tracer_provider.cc | 149 + .../sdk/src/trace/tracer_provider_factory.cc | 141 + .../sdk/src/version/CMakeLists.txt | 21 + .../sdk/src/version/version.cc | 24 + .../sdk/test/CMakeLists.txt | 9 + .../sdk/test/common/BUILD | 213 + .../sdk/test/common/CMakeLists.txt | 55 + .../sdk/test/common/atomic_unique_ptr_test.cc | 44 + .../sdk/test/common/attribute_utils_test.cc | 193 + .../common/attributemap_hash_benchmark.cc | 24 + .../sdk/test/common/attributemap_hash_test.cc | 33 + .../sdk/test/common/base64_benchmark.cc | 49 + .../sdk/test/common/base64_test.cc | 92 + .../test/common/baseline_circular_buffer.h | 88 + .../test/common/circular_buffer_benchmark.cc | 138 + .../test/common/circular_buffer_range_test.cc | 59 + .../sdk/test/common/circular_buffer_test.cc | 171 + .../sdk/test/common/empty_attributes_test.cc | 19 + .../sdk/test/common/env_var_test.cc | 352 ++ .../fast_random_number_generator_test.cc | 25 + ...obal_log_handle_singleton_lifetime_test.cc | 107 + .../sdk/test/common/global_log_handle_test.cc | 76 + .../sdk/test/common/random_benchmark.cc | 33 + .../sdk/test/common/random_fork_test.cc | 53 + .../sdk/test/common/random_test.cc | 68 + .../sdk/test/instrumentationscope/BUILD | 15 + .../test/instrumentationscope/CMakeLists.txt | 14 + .../instrumentationscope_test.cc | 307 + .../sdk/test/logs/BUILD | 110 + .../sdk/test/logs/CMakeLists.txt | 21 + .../logs/batch_log_record_processor_test.cc | 356 ++ .../sdk/test/logs/log_record_test.cc | 321 ++ .../sdk/test/logs/logger_config_test.cc | 95 + .../sdk/test/logs/logger_provider_sdk_test.cc | 267 + .../sdk/test/logs/logger_provider_set_test.cc | 92 + .../sdk/test/logs/logger_sdk_test.cc | 546 ++ .../logs/simple_log_record_processor_test.cc | 253 + .../sdk/test/metrics/BUILD | 162 + .../sdk/test/metrics/CMakeLists.txt | 83 + .../sdk/test/metrics/aggregation_test.cc | 453 ++ .../test/metrics/async_instruments_test.cc | 40 + .../test/metrics/async_metric_storage_test.cc | 321 ++ .../metrics/attributes_hashmap_benchmark.cc | 63 + .../test/metrics/attributes_hashmap_test.cc | 160 + .../metrics/attributes_processor_benchmark.cc | 30 + .../test/metrics/attributes_processor_test.cc | 53 + ...exponential_histogram_indexer_benchmark.cc | 66 + ...ase2_exponential_histogram_indexer_test.cc | 180 + .../test/metrics/cardinality_limit_test.cc | 157 + .../metrics/circular_buffer_counter_test.cc | 151 + .../sdk/test/metrics/common.cc | 70 + .../sdk/test/metrics/common.h | 63 + .../sdk/test/metrics/exemplar/BUILD | 53 + .../sdk/test/metrics/exemplar/CMakeLists.txt | 15 + ...istogram_bucket_exemplar_reservoir_test.cc | 56 + .../exemplar/always_sample_filter_test.cc | 18 + .../exemplar/no_exemplar_reservoir_test.cc | 22 + .../metrics/exemplar/reservoir_cell_test.cc | 76 + .../exemplar/with_trace_sample_filter_test.cc | 17 + .../histogram_aggregation_benchmark.cc | 165 + .../metrics/histogram_aggregation_test.cc | 130 + .../sdk/test/metrics/histogram_test.cc | 385 ++ .../metrics/instrument_descriptor_test.cc | 163 + .../instrument_metadata_validator_test.cc | 82 + .../test/metrics/measurements_benchmark.cc | 102 + .../sdk/test/metrics/meter_config_test.cc | 95 + .../test/metrics/meter_provider_sdk_test.cc | 313 + .../test/metrics/meter_provider_set_test.cc | 69 + .../sdk/test/metrics/meter_test.cc | 853 +++ .../sdk/test/metrics/metric_collector_test.cc | 403 ++ .../sdk/test/metrics/metric_reader_test.cc | 34 + .../sdk/test/metrics/metric_test_stress.cc | 172 + .../test/metrics/multi_metric_storage_test.cc | 68 + .../test/metrics/observable_registry_test.cc | 74 + .../sdk/test/metrics/observer_result_test.cc | 40 + .../periodic_exporting_metric_reader_test.cc | 112 + .../test/metrics/sum_aggregation_benchmark.cc | 91 + .../sdk/test/metrics/sum_aggregation_test.cc | 307 + .../sdk/test/metrics/sync_instruments_test.cc | 186 + .../sync_metric_storage_counter_test.cc | 326 ++ .../metrics/sync_metric_storage_gauge_test.cc | 196 + .../sync_metric_storage_histogram_test.cc | 542 ++ ...ync_metric_storage_up_down_counter_test.cc | 341 ++ .../sdk/test/metrics/view_registry_test.cc | 94 + .../sdk/test/resource/BUILD | 15 + .../sdk/test/resource/CMakeLists.txt | 12 + .../sdk/test/resource/resource_test.cc | 294 + .../sdk/test/trace/BUILD | 190 + .../sdk/test/trace/CMakeLists.txt | 38 + .../sdk/test/trace/always_off_sampler_test.cc | 54 + .../sdk/test/trace/always_on_sampler_test.cc | 71 + .../test/trace/batch_span_processor_test.cc | 366 ++ .../sdk/test/trace/parent_sampler_test.cc | 88 + .../sdk/test/trace/sampler_benchmark.cc | 181 + .../sdk/test/trace/simple_processor_test.cc | 144 + .../sdk/test/trace/span_data_test.cc | 151 + .../test/trace/trace_id_ratio_sampler_test.cc | 269 + .../sdk/test/trace/tracer_config_test.cc | 95 + .../test/trace/tracer_provider_set_test.cc | 82 + .../sdk/test/trace/tracer_provider_test.cc | 334 ++ .../sdk/test/trace/tracer_test.cc | 1334 +++++ .../test_common/BUILD | 10 + .../test_common/CMakeLists.txt | 16 + .../http/client/http_client_test_factory.h | 26 + .../http/client/nosend/http_client_nosend.h | 203 + .../test_common/src/CMakeLists.txt | 6 + .../test_common/src/http/client/nosend/BUILD | 23 + .../src/http/client/nosend/CMakeLists.txt | 15 + .../http/client/nosend/http_client_nosend.cc | 108 + .../client/nosend/http_client_test_factory.cc | 13 + .../third_party/BUILD | 6 + .../third_party_release | 25 + .../opentelemetry-cpp-1.21.0/tools/WORKSPACE | 7 + .../tools/build-bazel.cmd | 9 + .../tools/build-benchmark.cmd | 38 + .../tools/build-benchmark.sh | 30 + .../tools/build-clang-12.cmd | 10 + .../tools/build-clang.cmd | 10 + .../tools/build-docker.cmd | 72 + .../tools/build-gtest.sh | 41 + .../tools/build-nuget.cmd | 14 + .../tools/build-nuget.ps1 | 76 + .../tools/build-vcpkg.sh | 32 + .../tools/build-vs2015.cmd | 36 + .../tools/build-vs2017.cmd | 20 + .../tools/build-vs2019.cmd | 16 + .../tools/build-vs2022.cmd | 16 + .../opentelemetry-cpp-1.21.0/tools/build.cmd | 177 + .../opentelemetry-cpp-1.21.0/tools/build.sh | 192 + .../tools/check_copyright.sh | 97 + .../tools/download.cmd | 6 + .../tools/download.ps1 | 7 + .../opentelemetry-cpp-1.21.0/tools/format.sh | 64 + .../opentelemetry-cpp-1.21.0/tools/git-cl.cmd | 23 + .../opentelemetry-cpp-1.21.0/tools/git-cl.sh | 20 + .../tools/install-vs-addons.cmd | 42 + .../opentelemetry-cpp-1.21.0/tools/install.sh | 18 + .../tools/install_llvm-win32.ps1 | 11 + .../tools/install_llvm-win64.ps1 | 11 + .../tools/nuget/OpenTelemetry.Cpp.Dev.nuspec | 24 + .../tools/nuget/README.md | 42 + .../tools/nuget/opentelemetry-icon-color.png | Bin 0 -> 47847 bytes .../tools/ports/benchmark/CONTROL | 5 + .../tools/ports/benchmark/portfile.cmake | 46 + .../tools/ports/benchmark/version.patch | 34 + .../tools/ports/opentelemetry/CONTROL | 10 + .../tools/ports/opentelemetry/TODO.md | 7 + .../ports/opentelemetry/get_repo_name.sh | 6 + .../tools/ports/opentelemetry/portfile.cmake | 75 + .../opentelemetry/response_file_linux.txt | 9 + .../ports/opentelemetry/response_file_mac.txt | 9 + .../fix-default-proto-file-path.patch | 20 + .../ports/protobuf/fix-static-build.patch | 13 + .../tools/ports/protobuf/port_def.patch | 14 + .../tools/ports/protobuf/portfile.cmake | 127 + .../protobuf-targets-vcpkg-protoc.cmake | 8 + .../ports/protobuf/vcpkg-cmake-wrapper.cmake | 16 + .../tools/ports/protobuf/vcpkg.json | 21 + .../tools/setup-buildtools-mac.sh | 38 + .../tools/setup-buildtools.cmd | 76 + .../tools/setup-buildtools.sh | 60 + .../tools/setup-cfssl.sh | 13 + .../tools/setup-cmake.sh | 64 + .../tools/setup-devenv.cmd | 9 + .../tools/setup-devenv.sh | 32 + .../tools/setup-ninja.sh | 9 + .../tools/setup-protobuf.sh | 10 + .../opentelemetry-cpp-1.21.0/tools/vcvars.cmd | 200 + .../include/opentelemetry/baggage/baggage.h | 299 + .../opentelemetry/baggage/baggage_context.h | 36 + .../baggage/propagation/baggage_propagator.h | 60 + .../opentelemetry/common/attribute_value.h | 82 + .../opentelemetry/common/key_value_iterable.h | 64 + .../common/key_value_iterable_view.h | 146 + .../opentelemetry/common/kv_properties.h | 272 + .../include/opentelemetry/common/macros.h | 523 ++ .../opentelemetry/common/spin_lock_mutex.h | 133 + .../opentelemetry/common/string_util.h | 42 + .../include/opentelemetry/common/timestamp.h | 206 + .../include/opentelemetry/config.h | 19 + .../include/opentelemetry/context/context.h | 171 + .../opentelemetry/context/context_value.h | 35 + .../propagation/composite_propagator.h | 93 + .../context/propagation/global_propagator.h | 57 + .../context/propagation/noop_propagator.h | 40 + .../context/propagation/text_map_propagator.h | 59 + .../opentelemetry/context/runtime_context.h | 340 ++ .../opentelemetry/detail/preprocessor.h | 25 + .../include/opentelemetry/logs/event_id.h | 37 + .../include/opentelemetry/logs/event_logger.h | 82 + .../logs/event_logger_provider.h | 37 + .../include/opentelemetry/logs/log_record.h | 92 + .../include/opentelemetry/logs/logger.h | 492 ++ .../opentelemetry/logs/logger_provider.h | 71 + .../opentelemetry/logs/logger_type_traits.h | 204 + .../include/opentelemetry/logs/noop.h | 131 + .../include/opentelemetry/logs/provider.h | 100 + .../include/opentelemetry/logs/severity.h | 67 + .../opentelemetry/metrics/async_instruments.h | 33 + .../include/opentelemetry/metrics/meter.h | 174 + .../opentelemetry/metrics/meter_provider.h | 148 + .../include/opentelemetry/metrics/noop.h | 271 + .../opentelemetry/metrics/observer_result.h | 54 + .../include/opentelemetry/metrics/provider.h | 60 + .../opentelemetry/metrics/sync_instruments.h | 328 ++ .../include/opentelemetry/nostd/detail/all.h | 21 + .../opentelemetry/nostd/detail/decay.h | 16 + .../nostd/detail/dependent_type.h | 20 + .../opentelemetry/nostd/detail/functional.h | 66 + .../opentelemetry/nostd/detail/invoke.h | 163 + .../opentelemetry/nostd/detail/trait.h | 75 + .../nostd/detail/type_pack_element.h | 53 + .../opentelemetry/nostd/detail/valueless.h | 14 + .../nostd/detail/variant_alternative.h | 40 + .../opentelemetry/nostd/detail/variant_fwd.h | 14 + .../opentelemetry/nostd/detail/variant_size.h | 33 + .../include/opentelemetry/nostd/detail/void.h | 28 + .../opentelemetry/nostd/function_ref.h | 94 + .../nostd/internal/absl/base/attributes.h | 621 ++ .../nostd/internal/absl/base/config.h | 671 +++ .../internal/absl/base/internal/identity.h | 37 + .../absl/base/internal/inline_variable.h | 107 + .../internal/absl/base/internal/invoke.h | 188 + .../nostd/internal/absl/base/macros.h | 220 + .../nostd/internal/absl/base/optimization.h | 181 + .../nostd/internal/absl/base/options.h | 216 + .../nostd/internal/absl/base/policy_checks.h | 115 + .../nostd/internal/absl/base/port.h | 26 + .../nostd/internal/absl/meta/type_traits.h | 779 +++ .../internal/absl/types/bad_variant_access.h | 94 + .../internal/absl/types/internal/variant.h | 1649 ++++++ .../nostd/internal/absl/types/variant.h | 866 +++ .../nostd/internal/absl/utility/utility.h | 350 ++ .../include/opentelemetry/nostd/shared_ptr.h | 210 + .../include/opentelemetry/nostd/span.h | 274 + .../include/opentelemetry/nostd/string_view.h | 226 + .../include/opentelemetry/nostd/type_traits.h | 172 + .../include/opentelemetry/nostd/unique_ptr.h | 180 + .../include/opentelemetry/nostd/utility.h | 160 + .../include/opentelemetry/nostd/variant.h | 85 + .../plugin/detail/dynamic_library_handle.h | 20 + .../plugin/detail/dynamic_load_unix.h | 73 + .../plugin/detail/dynamic_load_windows.h | 96 + .../opentelemetry/plugin/detail/loader_info.h | 24 + .../plugin/detail/tracer_handle.h | 27 + .../opentelemetry/plugin/detail/utility.h | 36 + .../opentelemetry/plugin/dynamic_load.h | 30 + .../include/opentelemetry/plugin/factory.h | 65 + .../include/opentelemetry/plugin/hook.h | 51 + .../include/opentelemetry/plugin/tracer.h | 133 + .../opentelemetry/semconv/azure_metrics.h | 97 + .../opentelemetry/semconv/cicd_metrics.h | 213 + .../opentelemetry/semconv/client_attributes.h | 41 + .../opentelemetry/semconv/code_attributes.h | 81 + .../opentelemetry/semconv/container_metrics.h | 266 + .../opentelemetry/semconv/cpu_metrics.h | 141 + .../opentelemetry/semconv/db_attributes.h | 349 ++ .../opentelemetry/semconv/db_metrics.h | 53 + .../opentelemetry/semconv/dns_metrics.h | 49 + .../opentelemetry/semconv/error_attributes.h | 57 + .../semconv/exception_attributes.h | 50 + .../opentelemetry/semconv/faas_metrics.h | 287 + .../opentelemetry/semconv/gen_ai_metrics.h | 157 + .../opentelemetry/semconv/http_attributes.h | 164 + .../opentelemetry/semconv/http_metrics.h | 77 + .../opentelemetry/semconv/hw_metrics.h | 344 ++ .../semconv/incubating/app_attributes.h | 76 + .../semconv/incubating/artifact_attributes.h | 79 + .../semconv/incubating/aws_attributes.h | 425 ++ .../semconv/incubating/az_attributes.h | 37 + .../semconv/incubating/azure_attributes.h | 110 + .../semconv/incubating/azure_metrics.h | 97 + .../semconv/incubating/browser_attributes.h | 65 + .../semconv/incubating/cassandra_attributes.h | 116 + .../semconv/incubating/cicd_attributes.h | 258 + .../semconv/incubating/cicd_metrics.h | 213 + .../semconv/incubating/client_attributes.h | 41 + .../semconv/incubating/cloud_attributes.h | 287 + .../incubating/cloudevents_attributes.h | 58 + .../incubating/cloudfoundry_attributes.h | 133 + .../semconv/incubating/code_attributes.h | 126 + .../semconv/incubating/container_attributes.h | 159 + .../semconv/incubating/container_metrics.h | 266 + .../semconv/incubating/cpu_attributes.h | 78 + .../semconv/incubating/cpu_metrics.h | 141 + .../semconv/incubating/cpython_attributes.h | 48 + .../semconv/incubating/cpython_metrics.h | 154 + .../semconv/incubating/db_attributes.h | 1212 ++++ .../semconv/incubating/db_metrics.h | 861 +++ .../incubating/deployment_attributes.h | 77 + .../incubating/destination_attributes.h | 37 + .../semconv/incubating/device_attributes.h | 72 + .../semconv/incubating/disk_attributes.h | 43 + .../semconv/incubating/dns_attributes.h | 34 + .../semconv/incubating/dns_metrics.h | 49 + .../incubating/elasticsearch_attributes.h | 29 + .../semconv/incubating/enduser_attributes.h | 57 + .../semconv/incubating/error_attributes.h | 69 + .../semconv/incubating/event_attributes.h | 32 + .../semconv/incubating/exception_attributes.h | 50 + .../semconv/incubating/faas_attributes.h | 231 + .../semconv/incubating/faas_metrics.h | 287 + .../incubating/feature_flag_attributes.h | 209 + .../semconv/incubating/file_attributes.h | 143 + .../semconv/incubating/gcp_attributes.h | 221 + .../semconv/incubating/gen_ai_attributes.h | 494 ++ .../semconv/incubating/gen_ai_metrics.h | 157 + .../semconv/incubating/geo_attributes.h | 102 + .../semconv/incubating/graphql_attributes.h | 60 + .../semconv/incubating/heroku_attributes.h | 39 + .../semconv/incubating/host_attributes.h | 159 + .../semconv/incubating/http_attributes.h | 375 ++ .../semconv/incubating/http_metrics.h | 346 ++ .../semconv/incubating/hw_attributes.h | 148 + .../semconv/incubating/hw_metrics.h | 345 ++ .../semconv/incubating/k8s_attributes.h | 443 ++ .../semconv/incubating/k8s_metrics.h | 1723 ++++++ .../semconv/incubating/linux_attributes.h | 43 + .../semconv/incubating/log_attributes.h | 82 + .../semconv/incubating/message_attributes.h | 76 + .../semconv/incubating/messaging_attributes.h | 522 ++ .../semconv/incubating/messaging_metrics.h | 413 ++ .../semconv/incubating/net_attributes.h | 208 + .../semconv/incubating/network_attributes.h | 379 ++ .../semconv/incubating/oci_attributes.h | 36 + .../incubating/opentracing_attributes.h | 45 + .../semconv/incubating/os_attributes.h | 110 + .../semconv/incubating/otel_attributes.h | 202 + .../semconv/incubating/otel_metrics.h | 976 ++++ .../semconv/incubating/other_attributes.h | 47 + .../semconv/incubating/peer_attributes.h | 31 + .../semconv/incubating/pool_attributes.h | 33 + .../semconv/incubating/process_attributes.h | 297 + .../semconv/incubating/process_metrics.h | 458 ++ .../semconv/incubating/profile_attributes.h | 98 + .../semconv/incubating/rpc_attributes.h | 368 ++ .../semconv/incubating/rpc_metrics.h | 310 + .../incubating/security_rule_attributes.h | 69 + .../semconv/incubating/server_attributes.h | 41 + .../semconv/incubating/service_attributes.h | 84 + .../semconv/incubating/session_attributes.h | 34 + .../semconv/incubating/source_attributes.h | 37 + .../semconv/incubating/system_attributes.h | 383 ++ .../semconv/incubating/system_metrics.h | 1338 +++++ .../semconv/incubating/telemetry_attributes.h | 125 + .../semconv/incubating/test_attributes.h | 93 + .../semconv/incubating/thread_attributes.h | 34 + .../semconv/incubating/tls_attributes.h | 222 + .../semconv/incubating/url_attributes.h | 173 + .../incubating/user_agent_attributes.h | 92 + .../semconv/incubating/user_attributes.h | 57 + .../semconv/incubating/vcs_attributes.h | 348 ++ .../semconv/incubating/vcs_metrics.h | 435 ++ .../semconv/incubating/webengine_attributes.h | 39 + .../opentelemetry/semconv/k8s_metrics.h | 1735 ++++++ .../opentelemetry/semconv/messaging_metrics.h | 414 ++ .../semconv/network_attributes.h | 119 + .../opentelemetry/semconv/otel_attributes.h | 59 + .../opentelemetry/semconv/otel_metrics.h | 337 ++ .../opentelemetry/semconv/process_metrics.h | 458 ++ .../opentelemetry/semconv/rpc_metrics.h | 310 + .../opentelemetry/semconv/schema_url.h | 24 + .../opentelemetry/semconv/server_attributes.h | 41 + .../semconv/service_attributes.h | 41 + .../opentelemetry/semconv/system_metrics.h | 1339 +++++ .../semconv/telemetry_attributes.h | 111 + .../opentelemetry/semconv/url_attributes.h | 102 + .../semconv/user_agent_attributes.h | 30 + .../opentelemetry/semconv/vcs_metrics.h | 435 ++ .../include/opentelemetry/std/shared_ptr.h | 22 + .../include/opentelemetry/std/span.h | 71 + .../include/opentelemetry/std/string_view.h | 21 + .../include/opentelemetry/std/type_traits.h | 10 + .../include/opentelemetry/std/unique_ptr.h | 22 + .../include/opentelemetry/std/utility.h | 71 + .../include/opentelemetry/std/variant.h | 230 + .../include/opentelemetry/trace/context.h | 44 + .../opentelemetry/trace/default_span.h | 77 + .../include/opentelemetry/trace/noop.h | 159 + .../trace/propagation/b3_propagator.h | 198 + .../trace/propagation/detail/hex.h | 83 + .../trace/propagation/detail/string.h | 63 + .../trace/propagation/http_trace_context.h | 201 + .../opentelemetry/trace/propagation/jaeger.h | 127 + .../include/opentelemetry/trace/provider.h | 60 + .../include/opentelemetry/trace/scope.h | 42 + .../trace/semantic_conventions.h | 5111 ++++++++++++++++ .../include/opentelemetry/trace/span.h | 259 + .../opentelemetry/trace/span_context.h | 98 + .../trace/span_context_kv_iterable.h | 54 + .../trace/span_context_kv_iterable_view.h | 119 + .../include/opentelemetry/trace/span_id.h | 67 + .../opentelemetry/trace/span_metadata.h | 45 + .../opentelemetry/trace/span_startoptions.h | 71 + .../include/opentelemetry/trace/trace_flags.h | 66 + .../include/opentelemetry/trace/trace_id.h | 72 + .../include/opentelemetry/trace/trace_state.h | 323 ++ .../include/opentelemetry/trace/tracer.h | 244 + .../opentelemetry/trace/tracer_provider.h | 127 + .../include/opentelemetry/version.h | 29 + .../component-definitions.cmake | 41 + .../find-package-support-functions.cmake | 145 + .../opentelemetry-cpp-api-target.cmake | 108 + .../opentelemetry-cpp-config-version.cmake | 83 + .../opentelemetry-cpp-config.cmake | 252 + .../thirdparty-dependency-definitions.cmake | 36 + .../lib/pkgconfig/opentelemetry_api.pc | 15 + .../http-client-lite/CMakeLists.txt | 0 .../http-client-lite/LICENSE | 0 .../http-client-lite/README.md | 0 .../http-client-lite/examples/CMakeLists.txt | 0 .../examples/simple_request.cpp | 0 .../include/jdl/httpclientlite.h | 0 .../prometheus-cpp-lite-1.0/CMakeLists.txt | 4 +- .../ext/prometheus-cpp-lite-1.0/README.md | 50 +- .../core/include/prometheus/client_metric.h | 1 + .../core/include/prometheus/counter.h | 13 +- .../core/include/prometheus/gauge.h | 10 + .../simpleapi/include/prometheus/simpleapi.h | 15 +- zerotier-one/include/ZeroTierDebug.h | 116 +- zerotier-one/include/ZeroTierOne.h | 466 +- .../java/jni/com_zerotierone_sdk_Node.cpp | 74 +- zerotier-one/make-bsd.mk | 13 +- zerotier-one/make-linux.mk | 109 +- zerotier-one/make-mac.mk | 131 +- zerotier-one/make-netbsd.mk | 13 +- zerotier-one/node/AES.cpp | 307 +- zerotier-one/node/AES.hpp | 236 +- zerotier-one/node/AES_aesni.cpp | 151 +- zerotier-one/node/AES_armcrypto.cpp | 119 +- zerotier-one/node/Address.hpp | 174 +- zerotier-one/node/AtomicCounter.hpp | 46 +- zerotier-one/node/Bond.cpp | 171 +- zerotier-one/node/Bond.hpp | 41 +- zerotier-one/node/Buffer.hpp | 257 +- zerotier-one/node/C25519.cpp | 2642 --------- zerotier-one/node/C25519.hpp | 171 - zerotier-one/node/Capability.cpp | 61 +- zerotier-one/node/Capability.hpp | 226 +- zerotier-one/node/CertificateOfMembership.cpp | 72 +- zerotier-one/node/CertificateOfMembership.hpp | 150 +- zerotier-one/node/CertificateOfOwnership.cpp | 47 +- zerotier-one/node/CertificateOfOwnership.hpp | 185 +- zerotier-one/node/Constants.hpp | 154 +- zerotier-one/node/Credential.hpp | 40 +- zerotier-one/node/DNS.hpp | 69 +- zerotier-one/node/Dictionary.hpp | 216 +- zerotier-one/node/ECC.cpp | 2581 +++++++++ zerotier-one/node/ECC.hpp | 222 + zerotier-one/node/Hashtable.hpp | 210 +- zerotier-one/node/Identity.cpp | 162 +- zerotier-one/node/Identity.hpp | 200 +- zerotier-one/node/IncomingPacket.cpp | 946 +-- zerotier-one/node/IncomingPacket.hpp | 97 +- zerotier-one/node/InetAddress.cpp | 324 +- zerotier-one/node/InetAddress.hpp | 418 +- zerotier-one/node/MAC.hpp | 177 +- zerotier-one/node/Membership.cpp | 149 +- zerotier-one/node/Membership.hpp | 194 +- zerotier-one/node/Metrics.cpp | 378 +- zerotier-one/node/Metrics.hpp | 266 +- zerotier-one/node/MulticastGroup.hpp | 94 +- zerotier-one/node/Multicaster.cpp | 280 +- zerotier-one/node/Multicaster.hpp | 154 +- zerotier-one/node/Mutex.hpp | 96 +- zerotier-one/node/Network.cpp | 1269 ++-- zerotier-one/node/Network.hpp | 258 +- zerotier-one/node/NetworkConfig.cpp | 373 +- zerotier-one/node/NetworkConfig.hpp | 231 +- zerotier-one/node/NetworkController.hpp | 67 +- zerotier-one/node/Node.cpp | 760 +-- zerotier-one/node/Node.hpp | 290 +- zerotier-one/node/OutboundMulticast.cpp | 54 +- zerotier-one/node/OutboundMulticast.hpp | 81 +- zerotier-one/node/Packet.cpp | 939 +-- zerotier-one/node/Packet.hpp | 532 +- zerotier-one/node/PacketMultiplexer.cpp | 117 + zerotier-one/node/PacketMultiplexer.hpp | 60 + zerotier-one/node/Path.cpp | 24 +- zerotier-one/node/Path.hpp | 329 +- zerotier-one/node/Peer.cpp | 322 +- zerotier-one/node/Peer.hpp | 295 +- zerotier-one/node/Poly1305.cpp | 848 +-- zerotier-one/node/Poly1305.hpp | 24 +- zerotier-one/node/Revocation.cpp | 41 +- zerotier-one/node/Revocation.hpp | 171 +- zerotier-one/node/RingBuffer.hpp | 86 +- zerotier-one/node/RuntimeEnvironment.hpp | 59 +- zerotier-one/node/SHA512.cpp | 195 +- zerotier-one/node/SHA512.hpp | 51 +- zerotier-one/node/Salsa20.cpp | 1318 ++--- zerotier-one/node/Salsa20.hpp | 116 +- zerotier-one/node/SelfAwareness.cpp | 110 +- zerotier-one/node/SelfAwareness.hpp | 70 +- zerotier-one/node/SharedPtr.hpp | 106 +- zerotier-one/node/Switch.cpp | 759 ++- zerotier-one/node/Switch.hpp | 198 +- zerotier-one/node/Tag.cpp | 41 +- zerotier-one/node/Tag.hpp | 195 +- zerotier-one/node/Topology.cpp | 340 +- zerotier-one/node/Topology.hpp | 218 +- zerotier-one/node/Trace.cpp | 795 +-- zerotier-one/node/Trace.hpp | 167 +- zerotier-one/node/Utils.cpp | 160 +- zerotier-one/node/Utils.hpp | 602 +- zerotier-one/node/World.hpp | 179 +- zerotier-one/nonfree/LICENSE.md | 103 + .../controller/CV1.cpp} | 1431 +++-- zerotier-one/nonfree/controller/CV1.hpp | 135 + zerotier-one/nonfree/controller/CV2.cpp | 1235 ++++ zerotier-one/nonfree/controller/CV2.hpp | 99 + .../nonfree/controller/ConnectionPool.hpp | 180 + zerotier-one/nonfree/controller/CtlUtil.cpp | 68 + zerotier-one/nonfree/controller/CtlUtil.hpp | 20 + zerotier-one/nonfree/controller/DB.cpp | 539 ++ zerotier-one/nonfree/controller/DB.hpp | 188 + .../nonfree/controller/DBMirrorSet.cpp | 363 ++ .../nonfree/controller/DBMirrorSet.hpp | 64 + .../controller/EmbeddedNetworkController.cpp | 2379 ++++++++ .../controller/EmbeddedNetworkController.hpp | 164 + zerotier-one/nonfree/controller/FileDB.cpp | 200 + zerotier-one/nonfree/controller/FileDB.hpp | 37 + .../nonfree/controller/PostgreSQL.cpp | 15 + .../nonfree/controller/PostgreSQL.hpp | 186 + .../{ => nonfree}/controller/README.md | 0 zerotier-one/nonfree/controller/Redis.hpp | 19 + zerotier-one/objects-nonfree.mk | 8 + zerotier-one/objects.mk | 15 +- zerotier-one/one.cpp | 1873 +++--- zerotier-one/osdep/Arp.cpp | 112 +- zerotier-one/osdep/Arp.hpp | 56 +- zerotier-one/osdep/BSDEthernetTap.cpp | 430 +- zerotier-one/osdep/BSDEthernetTap.hpp | 76 +- zerotier-one/osdep/Binder.hpp | 61 +- zerotier-one/osdep/BlockingQueue.hpp | 73 +- zerotier-one/osdep/EthernetTap.cpp | 124 +- zerotier-one/osdep/EthernetTap.hpp | 54 +- zerotier-one/osdep/ExtOsdep.cpp | 623 ++ zerotier-one/osdep/ExtOsdep.hpp | 210 + zerotier-one/osdep/Http.cpp | 221 +- zerotier-one/osdep/Http.hpp | 156 +- zerotier-one/osdep/LinuxEthernetTap.cpp | 560 +- zerotier-one/osdep/LinuxEthernetTap.hpp | 77 +- zerotier-one/osdep/LinuxNetLink.cpp | 733 +-- zerotier-one/osdep/LinuxNetLink.hpp | 118 +- zerotier-one/osdep/MacDNSHelper.hpp | 30 +- zerotier-one/osdep/MacDNSHelper.mm | 20 +- zerotier-one/osdep/MacEthernetTap.cpp | 406 +- zerotier-one/osdep/MacEthernetTap.hpp | 65 +- zerotier-one/osdep/MacEthernetTapAgent.c | 17 +- zerotier-one/osdep/MacEthernetTapAgent.h | 25 +- zerotier-one/osdep/MacKextEthernetTap.cpp | 496 +- zerotier-one/osdep/MacKextEthernetTap.hpp | 74 +- zerotier-one/osdep/ManagedRoute.cpp | 421 +- zerotier-one/osdep/ManagedRoute.hpp | 76 +- zerotier-one/osdep/NeighborDiscovery.cpp | 383 +- zerotier-one/osdep/NeighborDiscovery.hpp | 81 +- zerotier-one/osdep/NetBSDEthernetTap.cpp | 359 +- zerotier-one/osdep/NetBSDEthernetTap.hpp | 70 +- zerotier-one/osdep/OSUtils.cpp | 425 +- zerotier-one/osdep/OSUtils.hpp | 148 +- zerotier-one/osdep/Phy.hpp | 775 +-- zerotier-one/osdep/PortMapper.cpp | 192 +- zerotier-one/osdep/PortMapper.hpp | 34 +- zerotier-one/osdep/Thread.hpp | 128 +- zerotier-one/osdep/WinDNSHelper.cpp | 200 +- zerotier-one/osdep/WinDNSHelper.hpp | 26 +- zerotier-one/osdep/WinFWHelper.cpp | 137 +- zerotier-one/osdep/WinFWHelper.hpp | 11 +- zerotier-one/osdep/WindowsEthernetTap.cpp | 742 +-- zerotier-one/osdep/WindowsEthernetTap.hpp | 110 +- .../pkg/asustor/zerotier/CONTROL/license.txt | 4 +- .../pkg/synology/dsm7-docker/README.md | 5 + .../pkg/synology/dsm7-docker/build.sh | 22 +- zerotier-one/rule-compiler/rule-compiler.js | 1884 +++--- zerotier-one/rustybits/Cargo.lock | 4226 ++++++++++++++ zerotier-one/rustybits/Cargo.toml | 6 + zerotier-one/rustybits/rustfmt.toml | 15 + zerotier-one/rustybits/smeeclient/Cargo.toml | 21 + zerotier-one/rustybits/smeeclient/build.rs | 36 + .../rustybits/smeeclient/rustfmt.toml | 1 + zerotier-one/rustybits/smeeclient/src/ext.rs | 90 + zerotier-one/rustybits/smeeclient/src/lib.rs | 111 + .../{zeroidc => rustybits}/zeroidc.vcxproj | 24 +- .../zeroidc.vcxproj.filters | 0 .../zeroidc/.cargo/config.toml | 0 .../{ => rustybits}/zeroidc/.gitattributes | 0 .../{ => rustybits}/zeroidc/Cargo.toml | 10 +- zerotier-one/{ => rustybits}/zeroidc/build.rs | 19 +- zerotier-one/rustybits/zeroidc/rustfmt.toml | 1 + zerotier-one/rustybits/zeroidc/src/error.rs | 30 + .../{ => rustybits}/zeroidc/src/ext.rs | 53 +- .../{ => rustybits}/zeroidc/src/lib.rs | 305 +- zerotier-one/selftest.cpp | 1205 ++-- zerotier-one/service/OneService.cpp | 2935 ++++++---- zerotier-one/service/OneService.hpp | 64 +- zerotier-one/service/SoftwareUpdater.cpp | 426 -- zerotier-one/service/SoftwareUpdater.hpp | 204 - zerotier-one/tcp-proxy/Makefile | 2 +- zerotier-one/tcp-proxy/tcp-proxy.cpp | 212 +- zerotier-one/version.h | 24 +- zerotier-one/windows/README.md | 26 + zerotier-one/windows/ZeroTierOne.sln | 7 +- .../windows/ZeroTierOne/ZeroTierOne.vcxproj | 84 +- .../ZeroTierOne/ZeroTierOne.vcxproj.filters | 128 +- .../ZeroTierOne/ZeroTierOneService.cpp | 84 +- .../windows/ZeroTierOne/ZeroTierOneService.h | 69 +- .../ZeroTierOneSDK/ZeroTierOneSDK.vcxproj | 4 +- .../ZeroTierOneSDK.vcxproj.filters | 4 +- zerotier-one/zeroidc/Cargo.lock | 1699 ------ zerotier-one/zeroidc/src/error.rs | 36 - zerotier-one/zerotier-one.spec | 34 +- 1881 files changed, 272838 insertions(+), 39686 deletions(-) create mode 100644 zerotier-one/.clangd delete mode 100644 zerotier-one/.drone.jsonnet delete mode 100644 zerotier-one/.drone.yml delete mode 100644 zerotier-one/.kick delete mode 100644 zerotier-one/AUTHORS.md delete mode 100644 zerotier-one/COPYING create mode 100644 zerotier-one/LICENSE-MPL.txt delete mode 100644 zerotier-one/attic/WinUI/APIHandler.cs delete mode 100644 zerotier-one/attic/WinUI/AboutView.xaml delete mode 100644 zerotier-one/attic/WinUI/AboutView.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/App.config delete mode 100644 zerotier-one/attic/WinUI/App.xaml delete mode 100644 zerotier-one/attic/WinUI/App.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/CentralAPI.cs delete mode 100644 zerotier-one/attic/WinUI/CentralLogin.cs delete mode 100644 zerotier-one/attic/WinUI/CentralNetwork.cs delete mode 100644 zerotier-one/attic/WinUI/CentralServer.cs delete mode 100644 zerotier-one/attic/WinUI/CentralToken.cs delete mode 100644 zerotier-one/attic/WinUI/CentralUser.cs delete mode 100644 zerotier-one/attic/WinUI/Fonts/segoeui.ttf delete mode 100644 zerotier-one/attic/WinUI/Fonts/segoeuib.ttf delete mode 100644 zerotier-one/attic/WinUI/Fonts/segoeuii.ttf delete mode 100644 zerotier-one/attic/WinUI/Fonts/segoeuiz.ttf delete mode 100644 zerotier-one/attic/WinUI/ISwitchable.cs delete mode 100644 zerotier-one/attic/WinUI/JoinNetworkView.xaml delete mode 100644 zerotier-one/attic/WinUI/JoinNetworkView.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/MainWindow.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/NetworkInfoView.xaml delete mode 100644 zerotier-one/attic/WinUI/NetworkInfoView.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/NetworkListView.xaml delete mode 100644 zerotier-one/attic/WinUI/NetworkListView.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/NetworkMonitor.cs delete mode 100644 zerotier-one/attic/WinUI/NetworkNameGenerator.cs delete mode 100644 zerotier-one/attic/WinUI/NetworkRoute.cs delete mode 100644 zerotier-one/attic/WinUI/NetworksPage.xaml delete mode 100644 zerotier-one/attic/WinUI/NetworksPage.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/PeersPage.xaml delete mode 100644 zerotier-one/attic/WinUI/PeersPage.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/PreferencesView.xaml delete mode 100644 zerotier-one/attic/WinUI/PreferencesView.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/Properties/AssemblyInfo.cs delete mode 100644 zerotier-one/attic/WinUI/Properties/Resources.Designer.cs delete mode 100644 zerotier-one/attic/WinUI/Properties/Resources.resx delete mode 100644 zerotier-one/attic/WinUI/Properties/Settings.Designer.cs delete mode 100644 zerotier-one/attic/WinUI/Properties/Settings.settings delete mode 100644 zerotier-one/attic/WinUI/Resources/ZeroTierIcon.ico delete mode 100644 zerotier-one/attic/WinUI/Simple Styles.xaml delete mode 100644 zerotier-one/attic/WinUI/Themes/Generic.xaml delete mode 100644 zerotier-one/attic/WinUI/ToolbarItem.xaml delete mode 100644 zerotier-one/attic/WinUI/ToolbarItem.xaml.cs delete mode 100644 zerotier-one/attic/WinUI/WinUI.csproj delete mode 100644 zerotier-one/attic/WinUI/ZeroTierIcon.ico delete mode 100644 zerotier-one/attic/WinUI/ZeroTierNetwork.cs delete mode 100644 zerotier-one/attic/WinUI/ZeroTierPeer.cs delete mode 100644 zerotier-one/attic/WinUI/ZeroTierPeerPhysicalPath.cs delete mode 100644 zerotier-one/attic/WinUI/ZeroTierStatus.cs delete mode 100644 zerotier-one/attic/WinUI/app.manifest delete mode 100644 zerotier-one/attic/WinUI/packages.config delete mode 100644 zerotier-one/attic/macui/ZeroTier One.xcodeproj/project.pbxproj delete mode 100644 zerotier-one/attic/macui/ZeroTier One.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 zerotier-one/attic/macui/ZeroTier One.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AboutViewController.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AboutViewController.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AboutViewController.xib delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AppDelegate.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AppDelegate.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/AppIcon.appiconset/ZeroTierIcon512x512.png delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/Contents.json delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Contents.json delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBar@2x.png delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Menubar.png delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMacWhite.imageset/Contents.json delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMacWhite.imageset/MenubarWhite.png delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Assets.xcassets/MenuBarIconMacWhite.imageset/MenubarWhite@2x.png delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AuthtokenCopy.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/AuthtokenCopy.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Base.lproj/MainMenu.xib delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Info.plist delete mode 100644 zerotier-one/attic/macui/ZeroTier One/JoinNetworkViewController.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/JoinNetworkViewController.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/JoinNetworkViewController.xib delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Network.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/Network.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NodeStatus.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/NodeStatus.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.xib delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ServiceCom.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ServiceCom.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.h delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.m delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.xib delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ZeroTier One.entitlements delete mode 100644 zerotier-one/attic/macui/ZeroTier One/ZeroTierIcon.icns delete mode 100644 zerotier-one/attic/macui/ZeroTier One/about.html delete mode 100644 zerotier-one/attic/macui/ZeroTier One/main.m delete mode 100644 zerotier-one/attic/world/README.md delete mode 100755 zerotier-one/attic/world/build.sh delete mode 100644 zerotier-one/attic/world/mkworld.cpp delete mode 100644 zerotier-one/attic/world/world.bin delete mode 100644 zerotier-one/attic/world/world.c delete mode 100644 zerotier-one/controller/ConnectionPool.hpp delete mode 100644 zerotier-one/controller/DB.cpp delete mode 100644 zerotier-one/controller/DB.hpp delete mode 100644 zerotier-one/controller/DBMirrorSet.cpp delete mode 100644 zerotier-one/controller/DBMirrorSet.hpp delete mode 100644 zerotier-one/controller/EmbeddedNetworkController.cpp delete mode 100644 zerotier-one/controller/EmbeddedNetworkController.hpp delete mode 100644 zerotier-one/controller/FileDB.cpp delete mode 100644 zerotier-one/controller/FileDB.hpp delete mode 100644 zerotier-one/controller/LFDB.cpp delete mode 100644 zerotier-one/controller/LFDB.hpp delete mode 100644 zerotier-one/controller/PostgreSQL.hpp delete mode 100644 zerotier-one/controller/Redis.hpp create mode 100644 zerotier-one/ext/central-controller-docker/migrations/0001_init.down.sql create mode 100644 zerotier-one/ext/central-controller-docker/migrations/0001_init.up.sql create mode 100644 zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.down.sql create mode 100644 zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.up.sql create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelignore create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelrc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelversion create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-format create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-tidy create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.cmake-format.py create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.copyright-ignore create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.conan create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.dev create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/README.md create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/customize_container.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/devcontainer.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitattributes create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/.codecov.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/CODEOWNERS create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/dependabot.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/pull_request_template.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/repository-settings.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/benchmark.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ci.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/clang-tidy.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cmake_install.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/codeql-analysis.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cppcheck.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/dependencies_image.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/fossa.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/iwyu.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ossf-scorecard.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_comment.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_issue_open.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/stale.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitignore create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitmodules create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.iwyu.imp create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlint.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlintignore create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/CHANGELOG.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeSettings.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/CODE_OF_CONDUCT.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/CONTRIBUTING.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/DEPRECATED.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/INSTALL.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/LICENSE create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/MODULE.bazel create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/RELEASING.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/Versioning.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE.bzlmod create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/propagation/baggage_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/attribute_value.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/kv_properties.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/macros.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/spin_lock_mutex.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/string_util.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/timestamp.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context_value.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/composite_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/global_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/noop_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/text_map_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/runtime_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/detail/preprocessor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/log_record.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/severity.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/async_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/observer_result.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/sync_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/all.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/decay.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/dependent_type.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/functional.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/invoke.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/trait.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/type_pack_element.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/valueless.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_alternative.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_fwd.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_size.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/void.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/function_ref.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/.clang-format create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/identity.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/inline_variable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/invoke.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/macros.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/optimization.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/policy_checks.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/port.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/meta/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/types/bad_variant_access.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/types/internal/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/types/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/utility/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/shared_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/string_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/unique_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/dynamic_library_handle.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/dynamic_load_unix.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/loader_info.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/tracer_handle.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/detail/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/dynamic_load.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/hook.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/plugin/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/azure_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/cicd_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/client_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/code_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/container_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/cpu_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/db_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/db_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/dns_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/error_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/exception_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/faas_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/gen_ai_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/http_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/http_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/hw_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/app_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/artifact_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/aws_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/az_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/azure_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/azure_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/browser_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cassandra_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cicd_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cicd_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/client_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cloud_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cloudevents_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/code_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/container_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/container_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cpu_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cpu_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cpython_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/cpython_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/db_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/db_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/deployment_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/destination_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/device_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/disk_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/dns_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/dns_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/elasticsearch_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/enduser_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/error_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/event_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/exception_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/faas_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/faas_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/feature_flag_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/file_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/gcp_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/gen_ai_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/geo_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/graphql_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/heroku_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/host_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/http_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/http_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/hw_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/hw_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/k8s_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/k8s_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/linux_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/log_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/message_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/messaging_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/messaging_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/net_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/network_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/oci_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/opentracing_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/os_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/otel_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/otel_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/other_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/peer_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/pool_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/process_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/process_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/profile_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/rpc_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/rpc_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/security_rule_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/server_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/service_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/session_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/source_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/system_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/system_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/telemetry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/test_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/thread_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/tls_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/url_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/user_agent_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/user_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/vcs_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/vcs_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/incubating/webengine_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/k8s_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/messaging_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/network_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/otel_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/otel_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/process_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/rpc_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/schema_url.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/server_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/service_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/system_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/telemetry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/url_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/user_agent_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/semconv/vcs_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/shared_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/string_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/unique_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/std/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/default_span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/propagation/b3_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/propagation/detail/hex.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/propagation/detail/string.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/propagation/http_trace_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/propagation/jaeger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/scope.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/semantic_conventions.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_context_kv_iterable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_context_kv_iterable_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_metadata.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/span_startoptions.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/trace_flags.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/trace_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/trace_state.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/trace/tracer_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/version.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/baggage_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/baggage_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/propagation/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/propagation/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/baggage/propagation/baggage_propagator_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/common/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/common/kv_properties_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/common/spinlock_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/common/string_util_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/context_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/propagation/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/propagation/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/propagation/composite_propagator_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/context/runtime_context_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/core/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/core/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/core/timestamp_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/core/version_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/logs/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/logs/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/logs/logger_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/logs/logger_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/logs/provider_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/metrics/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/metrics/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/metrics/meter_provider_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/metrics/noop_sync_instrument_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/function_ref_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/shared_ptr_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/span_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/string_view_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/unique_ptr_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/utility_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/nostd/variant_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/plugin/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/plugin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/plugin/dynamic_load_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_a.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_a.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_b.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_b.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_c.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_c.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_d.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_d.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_e.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_e.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_f.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_f.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_g.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/component_h.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/singleton/singleton_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/default_span_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/key_value_iterable_view_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/noop_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/b3_propagation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/detail/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/detail/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/detail/hex_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/detail/string_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/http_text_format_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/jaeger_propagation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/propagation/util.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/provider_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/scope_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/span_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/span_context_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/span_id_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/span_id_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/trace_flags_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/trace_id_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/trace_state_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/api/test/trace/tracer_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/curl.BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/curl.bzl create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/extra_deps.bzl create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/nlohmann_json.BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/opentelemetry_proto.BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/otel_cc_benchmark.bzl create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/repository.bzl create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/bazel/zlib.BUILD create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/pre-commit create mode 120000 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/pre-merge-commit create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/pre_release.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/semantic-convention/generate.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/semantic-convention/templates/registry/schema_url-h.j2 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/buildscripts/semantic-convention/templates/registry/weaver.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/do_ci.ps1 create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/do_ci.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/docfx.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/docfx.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/fix-abseil-cpp-issue-1536.patch create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_abseil.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_bazelisk.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_format_tools.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_gcc48.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_osx_bazelisk.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_protobuf.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_windows_bazelisk.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/install_windows_protobuf.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/ports/protobuf/CONTROL create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/ports/protobuf/fix-android-log.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/ports/protobuf/fix-static-build.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/ports/protobuf/fix-uwp.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/ports/protobuf/portfile.cmake create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/run_docker.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_ci_environment.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_cmake.ps1 create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_cmake.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_cmake_macos.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_gcc10.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_googletest.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_grpc.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/setup_windows_ci_environment.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/toc.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/valgrind-suppressions create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/ci/verify_packages.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/ParseOsRelease.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/find-package-support-functions.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/nlohmann-json.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/opentelemetry-build-external-component.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/opentelemetry-proto.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/otel-install-functions.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/package.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/patch-imported-config.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/pkgconfig.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/templates/component-definitions.cmake.in create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/templates/config.pc.in create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/templates/opentelemetry-cpp-config.cmake.in create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/templates/thirdparty-dependency-definitions.cmake.in create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/thirdparty-dependency-config.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/cmake/tools.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/.gitignore create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/Dockerfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/Dockerfile.alpine.base create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/Dockerfile.centos create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/Dockerfile.debian.deps create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/build.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/grpc/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/grpc/Dockerfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docker/ubuntuLatest/Dockerfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/abi-compatibility.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/abi-policy.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/abi-version-policy.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/build-as-dll.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/building-with-stdlib.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/building-with-vcpkg.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/building-with-vs2019.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/cpp-ostream-exporter-design.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/cpp-sdk-factory-design.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/dependencies.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/deprecation-process.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/google-test.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/library-distribution.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/maintaining-dependencies.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/Doxyfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/GettingHelp.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/Makefile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/_static/opentelemetry_logo.png create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/_templates/sidebar/brand.html create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/api/GettingStarted.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/api/Overview.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/api/api.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/conf.py create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/index.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/performance/benchmarks.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/requirements.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/resources/footer.html create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/resources/header.html create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/resources/stylesheet.css create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/sdk/GettingStarted.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/public/sdk/sdk.rst create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/requirements.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/testing-with-ssl.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/docs/using-clang-format.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/batch/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/batch/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/batch/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/foo_library/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/foo_library/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/foo_library/foo_library.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/foo_library/foo_library.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/logs_foo_library/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/logs_foo_library/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/logs_foo_library/foo_library.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/logs_foo_library/foo_library.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/metrics_foo_library/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/metrics_foo_library/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/metrics_foo_library/foo_library.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/common/metrics_foo_library/foo_library.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/etw_threads/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/etw_threads/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/etw_threads/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/etw_threads/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/client.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/protos/messages.proto create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/server.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/grpc/tracer_common.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/client.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/server.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/server.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/http/tracer_common.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/logs_simple/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/logs_simple/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/logs_simple/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/logs_simple/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/metrics_simple/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/metrics_simple/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/metrics_simple/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/metrics_simple/metrics_ostream.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multi_processor/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multi_processor/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multi_processor/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multi_processor/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multithreaded/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multithreaded/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/multithreaded/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/file_log_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/file_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/file_metric_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/grpc_log_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/grpc_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/grpc_metric_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/http_instrumented_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/http_log_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/http_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/http_metric_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/otlp/opentelemetry-collector-config/config.dev.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/load/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/load/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/load/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/plugin/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/plugin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/plugin/factory_impl.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/plugin/tracer.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/plugin/plugin/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/prometheus.yml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/prometheus/run.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/simple/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/simple/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/simple/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/simple/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/zipkin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/zipkin/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/examples/zipkin/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_record_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/src/es_log_record_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/src/es_log_recordable.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/elasticsearch/test/es_log_record_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/LICENSE create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/TraceLoggingDynamic.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_fields.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_logger_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_properties.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_random_id_generator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_tail_sampler.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_traceloggingdynamic.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/include/opentelemetry/exporters/etw/uuid.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/test/etw_logger_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/test/etw_perf_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/test/etw_provider_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/etw/test/etw_tracer_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_metric_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_metric_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_span_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_span_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/include/opentelemetry/exporters/memory/in_memory_span_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/src/in_memory_metric_data.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/src/in_memory_metric_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/src/in_memory_span_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/test/in_memory_metric_data_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/test/in_memory_metric_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/test/in_memory_span_data_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/memory/test/in_memory_span_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/common_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/include/opentelemetry/exporters/ostream/span_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/log_record_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/log_record_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/metric_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/metric_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/span_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/src/span_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/test/ostream_capture.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/test/ostream_log_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/test/ostream_metric_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/ostream/test/ostream_span_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_environment.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_client.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_client_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_client_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_log_record_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_metric_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_file_metric_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_client.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_client_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_client_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_client.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_metric_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_populate_attribute_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_preferred_temporality.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_recordable_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/protobuf_include_prefix.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/include/opentelemetry/exporters/otlp/protobuf_include_suffix.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_environment.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_client.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_log_record_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_log_record_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_log_record_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_metric_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_metric_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_file_metric_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_client.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_client_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_log_record_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_log_record_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_log_record_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_metric_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_metric_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_metric_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_grpc_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_client.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_log_record_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_log_record_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_log_record_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_metric_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_metric_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_http_metric_exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_log_recordable.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_metric_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_populate_attribute_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_recordable.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/src/otlp_recordable_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_client_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_log_record_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_log_record_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_metric_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_file_metric_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_exporter_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_log_record_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_metric_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_metric_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_grpc_target_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_log_record_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_log_record_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_metric_exporter_factory_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_http_metric_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_log_recordable_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_metrics_serialization_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/otlp/test/otlp_recordable_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/include/opentelemetry/exporters/prometheus/collector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/src/collector.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/src/exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/src/exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/src/exporter_options.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/src/exporter_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/test/collector_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/test/exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/test/exporter_utils_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/prometheus/test/prometheus_test_helper.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/include/opentelemetry/exporters/zipkin/recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/include/opentelemetry/exporters/zipkin/zipkin_exporter_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/src/recordable.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/src/zipkin_exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/src/zipkin_exporter_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/test/zipkin_exporter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/exporters/zipkin/test/zipkin_recordable_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/client/curl/http_operation_curl.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/client/http_client.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/client/http_client_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/common/url_parser.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/server/file_http_server.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/server/http_server.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/include/opentelemetry/ext/http/server/socket_tools.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/dll/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/dll/dllmain.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/dll/input.src create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/dll/make_def.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/dll/opentelemetry_cpp.src create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/http/client/curl/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/http/client/curl/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/http/client/curl/http_client_curl.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/http/client/curl/http_client_factory_curl.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/src/http/client/curl/http_operation_curl.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/http/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/http/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/http/curl_http_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/http/url_parser_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/w3c_tracecontext_http_test_server/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/w3c_tracecontext_http_test_server/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/w3c_tracecontext_http_test_server/Dockerfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/w3c_tracecontext_http_test_server/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/ext/test/w3c_tracecontext_http_test_server/main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/ca_csr.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/ca_csr_b.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/client_csr.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/client_csr_b.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/garbage.pem create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/generate_cert.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/server_csr.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/cert/server_csr_b.json create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/Dockerfile create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/func_grpc_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/func_http_main.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-config-http.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-config-https-mtls.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-config-https.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-docker-config-http.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-docker-config-https-mtls.yaml create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/otel-docker-config-https.yaml create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/run_test.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/functional/otlp/run_test_mode.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/conan/conanfile_latest.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/conan/conanfile_stable.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/api/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_elasticsearch/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_etw/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_in_memory/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_ostream/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_otlp_common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_otlp_file/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_otlp_grpc/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_otlp_http/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_prometheus/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/exporters_zipkin/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/ext_common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/ext_dll/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/ext_http_curl/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/sdk/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/component_tests/shims_opentracing/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/fetch_content_test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/package_test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/usage_tests/missing_components/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/usage_tests/no_components/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/usage_tests/unsorted_components/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/cmake/usage_tests/unsupported_components/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_api.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_elasticsearch.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_etw.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_in_memory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_ostream.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_otlp_common.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_otlp_file.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_otlp_grpc.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_otlp_http.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_prometheus.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_exporters_zipkin.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_ext_common.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_ext_dll.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_ext_http_curl.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_sdk.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/install/test/src/test_shims_opentracing.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/include/opentelemetry/opentracingshim/propagation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/include/opentelemetry/opentracingshim/shim_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/include/opentelemetry/opentracingshim/span_context_shim.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/include/opentelemetry/opentracingshim/span_shim.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/include/opentelemetry/opentracingshim/tracer_shim.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/src/shim_utils.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/src/span_context_shim.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/src/span_shim.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/src/tracer_shim.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/propagation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/shim_mocks.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/shim_utils_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/span_context_shim_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/span_shim_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/opentracing-shim/test/tracer_shim_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/atomic_shared_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/atomic_unique_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/attribute_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/attributemap_hash.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/base64.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/circular_buffer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/circular_buffer_range.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/disabled.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/empty_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/env_variables.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/exporter_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/global_log_handler.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/common/thread_instrumentation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/instrumentationscope/instrumentation_scope.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/instrumentationscope/scope_configurator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/event_logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger_context_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/multi_recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/readable_log_record.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/drop_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/aggregation/sum_aggregation.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/async_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/data/exemplar_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/data/point_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/metric_filter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/metric_producer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/instrument_metadata_validator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter_context_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/meter_provider_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/metric_reader.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/observer_result.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/observable_registry.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/state/temporal_metric_storage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/meter_selector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/meter_selector_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/predicate.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/predicate_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/view_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/view_registry.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/metrics/view/view_registry_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/resource/resource.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/resource/resource_detector.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/batch_span_processor_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/batch_span_processor_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/batch_span_processor_runtime_options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/exporter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/id_generator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/multi_recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/multi_span_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/random_id_generator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/random_id_generator_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/recordable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/sampler.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/always_off.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/always_off_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/always_on.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/always_on_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/parent.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/parent_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/simple_processor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/simple_processor_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/span_data.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer_context_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/trace/tracer_provider_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk/version/version.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/include/opentelemetry/sdk_config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/base64.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/disabled.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/env_variables.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/fast_random_number_generator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/global_log_handler.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/platform/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/platform/fork.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/platform/fork_unix.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/platform/fork_windows.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/random.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/common/random.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/batch_log_record_processor.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/batch_log_record_processor_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/event_logger.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/event_logger_provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/event_logger_provider_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger_config.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger_context.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger_context_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger_provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/logger_provider_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/multi_log_record_processor.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/multi_log_record_processor_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/multi_recordable.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/read_write_log_record.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/readable_log_record.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/simple_log_record_processor.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/logs/simple_log_record_processor_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/aggregation/base2_exponential_histogram_aggregation.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/aggregation/base2_exponential_histogram_indexer.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/aggregation/histogram_aggregation.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/aggregation/lastvalue_aggregation.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/aggregation/sum_aggregation.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/async_instruments.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/data/circular_buffer.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/exemplar/reservoir.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/export/periodic_exporting_metric_reader.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/export/periodic_exporting_metric_reader_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/instrument_metadata_validator.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter_config.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter_context.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter_context_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter_provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/meter_provider_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/metric_reader.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/state/filtered_ordered_attribute_map.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/state/metric_collector.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/state/observable_registry.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/state/sync_metric_storage.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/state/temporal_metric_storage.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/sync_instruments.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/view/instrument_selector_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/view/meter_selector_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/view/view_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/metrics/view/view_registry_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/resource/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/resource/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/resource/resource.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/resource/resource_detector.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/batch_span_processor.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/batch_span_processor_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/exporter.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/random_id_generator.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/random_id_generator_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/always_off_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/always_on_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/parent.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/parent_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/trace_id_ratio.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/samplers/trace_id_ratio_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/simple_processor_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/span.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer_config.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer_context.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer_context_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer_provider.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/trace/tracer_provider_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/version/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/src/version/version.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/atomic_unique_ptr_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/attribute_utils_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/attributemap_hash_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/attributemap_hash_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/base64_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/base64_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/baseline_circular_buffer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/circular_buffer_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/circular_buffer_range_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/circular_buffer_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/empty_attributes_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/env_var_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/fast_random_number_generator_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/global_log_handle_singleton_lifetime_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/global_log_handle_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/random_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/random_fork_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/common/random_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/instrumentationscope/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/instrumentationscope/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/instrumentationscope/instrumentationscope_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/batch_log_record_processor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/log_record_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/logger_config_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/logger_provider_sdk_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/logger_provider_set_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/logger_sdk_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/logs/simple_log_record_processor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/aggregation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/async_instruments_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/async_metric_storage_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/attributes_hashmap_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/attributes_hashmap_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/attributes_processor_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/attributes_processor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/base2_exponential_histogram_indexer_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/cardinality_limit_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/circular_buffer_counter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/common.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/common.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/always_sample_filter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/reservoir_cell_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/exemplar/with_trace_sample_filter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/histogram_aggregation_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/histogram_aggregation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/histogram_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/instrument_descriptor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/instrument_metadata_validator_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/measurements_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/meter_config_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/meter_provider_sdk_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/meter_provider_set_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/meter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/metric_collector_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/metric_reader_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/metric_test_stress.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/multi_metric_storage_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/observable_registry_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/observer_result_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/periodic_exporting_metric_reader_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sum_aggregation_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sum_aggregation_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sync_instruments_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sync_metric_storage_counter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sync_metric_storage_gauge_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sync_metric_storage_histogram_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/metrics/view_registry_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/resource/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/resource/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/resource/resource_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/always_off_sampler_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/always_on_sampler_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/batch_span_processor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/parent_sampler_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/sampler_benchmark.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/simple_processor_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/span_data_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/trace_id_ratio_sampler_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/tracer_config_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/tracer_provider_set_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/tracer_provider_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/sdk/test/trace/tracer_test.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/include/opentelemetry/test_common/ext/http/client/http_client_test_factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/include/opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/src/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/src/http/client/nosend/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/src/http/client/nosend/CMakeLists.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/src/http/client/nosend/http_client_nosend.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/test_common/src/http/client/nosend/http_client_test_factory.cc create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/third_party/BUILD create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/third_party_release create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/WORKSPACE create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-bazel.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-benchmark.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-benchmark.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-clang-12.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-clang.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-docker.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-gtest.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-nuget.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-nuget.ps1 create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-vcpkg.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-vs2015.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-vs2017.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-vs2019.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build-vs2022.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/build.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/check_copyright.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/download.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/download.ps1 create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/format.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/git-cl.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/git-cl.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/install-vs-addons.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/install.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/install_llvm-win32.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/install_llvm-win64.ps1 create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/nuget/OpenTelemetry.Cpp.Dev.nuspec create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/nuget/README.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/nuget/opentelemetry-icon-color.png create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/benchmark/CONTROL create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/benchmark/portfile.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/benchmark/version.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/CONTROL create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/TODO.md create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/get_repo_name.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/portfile.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/response_file_linux.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/opentelemetry/response_file_mac.txt create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/fix-default-proto-file-path.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/fix-static-build.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/port_def.patch create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/portfile.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/protobuf-targets-vcpkg-protoc.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/vcpkg-cmake-wrapper.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/ports/protobuf/vcpkg.json create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-buildtools-mac.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-buildtools.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-buildtools.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-cfssl.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-cmake.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-devenv.cmd create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-devenv.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-ninja.sh create mode 100755 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/setup-protobuf.sh create mode 100644 zerotier-one/ext/opentelemetry-cpp-1.21.0/tools/vcvars.cmd create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/baggage/baggage.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/baggage/baggage_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/baggage/propagation/baggage_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/attribute_value.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/key_value_iterable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/key_value_iterable_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/kv_properties.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/macros.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/spin_lock_mutex.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/string_util.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/common/timestamp.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/context_value.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/propagation/composite_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/propagation/global_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/propagation/noop_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/propagation/text_map_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/context/runtime_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/detail/preprocessor.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/event_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/event_logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/event_logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/log_record.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/logger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/logger_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/logger_type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/logs/severity.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/async_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/meter.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/meter_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/observer_result.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/metrics/sync_instruments.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/all.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/decay.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/dependent_type.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/functional.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/invoke.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/trait.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/type_pack_element.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/valueless.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/variant_alternative.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/variant_fwd.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/variant_size.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/detail/void.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/function_ref.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/config.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/internal/identity.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/internal/inline_variable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/internal/invoke.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/macros.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/optimization.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/options.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/policy_checks.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/base/port.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/meta/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/types/bad_variant_access.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/types/internal/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/types/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/internal/absl/utility/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/shared_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/string_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/unique_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/nostd/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/dynamic_library_handle.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/dynamic_load_unix.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/dynamic_load_windows.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/loader_info.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/tracer_handle.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/detail/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/dynamic_load.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/factory.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/hook.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/plugin/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/azure_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/cicd_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/client_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/code_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/container_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/cpu_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/db_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/db_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/dns_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/error_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/exception_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/faas_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/gen_ai_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/http_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/http_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/hw_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/app_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/artifact_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/aws_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/az_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/azure_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/azure_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/browser_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cassandra_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cicd_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cicd_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/client_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cloud_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cloudevents_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/code_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/container_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/container_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cpu_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cpu_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cpython_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/cpython_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/db_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/db_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/deployment_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/destination_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/device_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/disk_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/dns_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/dns_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/elasticsearch_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/enduser_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/error_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/event_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/exception_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/faas_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/faas_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/feature_flag_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/file_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/gcp_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/gen_ai_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/gen_ai_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/geo_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/graphql_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/heroku_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/host_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/http_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/http_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/hw_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/hw_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/k8s_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/k8s_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/linux_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/log_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/message_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/messaging_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/messaging_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/net_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/network_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/oci_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/opentracing_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/os_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/otel_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/otel_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/other_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/peer_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/pool_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/process_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/process_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/profile_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/rpc_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/rpc_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/security_rule_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/server_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/service_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/session_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/source_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/system_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/system_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/telemetry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/test_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/thread_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/tls_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/url_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/user_agent_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/user_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/vcs_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/vcs_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/incubating/webengine_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/k8s_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/messaging_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/network_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/otel_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/otel_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/process_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/rpc_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/schema_url.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/server_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/service_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/system_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/telemetry_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/url_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/user_agent_attributes.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/semconv/vcs_metrics.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/shared_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/string_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/type_traits.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/unique_ptr.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/utility.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/std/variant.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/default_span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/noop.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/propagation/b3_propagator.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/propagation/detail/hex.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/propagation/detail/string.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/propagation/http_trace_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/propagation/jaeger.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/scope.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/semantic_conventions.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_context.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_context_kv_iterable.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_context_kv_iterable_view.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_metadata.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/span_startoptions.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/trace_flags.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/trace_id.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/trace_state.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/tracer.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/trace/tracer_provider.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/include/opentelemetry/version.h create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/component-definitions.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/find-package-support-functions.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/opentelemetry-cpp-api-target.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/opentelemetry-cpp-config-version.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/opentelemetry-cpp-config.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/cmake/opentelemetry-cpp/thirdparty-dependency-definitions.cmake create mode 100644 zerotier-one/ext/opentelemetry-cpp-api-only/lib/pkgconfig/opentelemetry_api.pc rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/CMakeLists.txt (100%) rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/LICENSE (100%) rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/README.md (100%) rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/examples/CMakeLists.txt (100%) rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/examples/simple_request.cpp (100%) rename zerotier-one/ext/prometheus-cpp-lite-1.0/{3rdpatry => 3rdparty}/http-client-lite/include/jdl/httpclientlite.h (100%) delete mode 100644 zerotier-one/node/C25519.cpp delete mode 100644 zerotier-one/node/C25519.hpp create mode 100644 zerotier-one/node/ECC.cpp create mode 100644 zerotier-one/node/ECC.hpp create mode 100644 zerotier-one/node/PacketMultiplexer.cpp create mode 100644 zerotier-one/node/PacketMultiplexer.hpp create mode 100644 zerotier-one/nonfree/LICENSE.md rename zerotier-one/{controller/PostgreSQL.cpp => nonfree/controller/CV1.cpp} (56%) create mode 100644 zerotier-one/nonfree/controller/CV1.hpp create mode 100644 zerotier-one/nonfree/controller/CV2.cpp create mode 100644 zerotier-one/nonfree/controller/CV2.hpp create mode 100644 zerotier-one/nonfree/controller/ConnectionPool.hpp create mode 100644 zerotier-one/nonfree/controller/CtlUtil.cpp create mode 100644 zerotier-one/nonfree/controller/CtlUtil.hpp create mode 100644 zerotier-one/nonfree/controller/DB.cpp create mode 100644 zerotier-one/nonfree/controller/DB.hpp create mode 100644 zerotier-one/nonfree/controller/DBMirrorSet.cpp create mode 100644 zerotier-one/nonfree/controller/DBMirrorSet.hpp create mode 100644 zerotier-one/nonfree/controller/EmbeddedNetworkController.cpp create mode 100644 zerotier-one/nonfree/controller/EmbeddedNetworkController.hpp create mode 100644 zerotier-one/nonfree/controller/FileDB.cpp create mode 100644 zerotier-one/nonfree/controller/FileDB.hpp create mode 100644 zerotier-one/nonfree/controller/PostgreSQL.cpp create mode 100644 zerotier-one/nonfree/controller/PostgreSQL.hpp rename zerotier-one/{ => nonfree}/controller/README.md (100%) create mode 100644 zerotier-one/nonfree/controller/Redis.hpp create mode 100644 zerotier-one/objects-nonfree.mk create mode 100644 zerotier-one/osdep/ExtOsdep.cpp create mode 100644 zerotier-one/osdep/ExtOsdep.hpp create mode 100644 zerotier-one/rustybits/Cargo.lock create mode 100644 zerotier-one/rustybits/Cargo.toml create mode 100644 zerotier-one/rustybits/rustfmt.toml create mode 100644 zerotier-one/rustybits/smeeclient/Cargo.toml create mode 100644 zerotier-one/rustybits/smeeclient/build.rs create mode 120000 zerotier-one/rustybits/smeeclient/rustfmt.toml create mode 100644 zerotier-one/rustybits/smeeclient/src/ext.rs create mode 100644 zerotier-one/rustybits/smeeclient/src/lib.rs rename zerotier-one/{zeroidc => rustybits}/zeroidc.vcxproj (83%) rename zerotier-one/{zeroidc => rustybits}/zeroidc.vcxproj.filters (100%) rename zerotier-one/{ => rustybits}/zeroidc/.cargo/config.toml (100%) rename zerotier-one/{ => rustybits}/zeroidc/.gitattributes (100%) rename zerotier-one/{ => rustybits}/zeroidc/Cargo.toml (57%) rename zerotier-one/{ => rustybits}/zeroidc/build.rs (72%) create mode 120000 zerotier-one/rustybits/zeroidc/rustfmt.toml create mode 100644 zerotier-one/rustybits/zeroidc/src/error.rs rename zerotier-one/{ => rustybits}/zeroidc/src/ext.rs (83%) rename zerotier-one/{ => rustybits}/zeroidc/src/lib.rs (69%) delete mode 100644 zerotier-one/service/SoftwareUpdater.cpp delete mode 100644 zerotier-one/service/SoftwareUpdater.hpp delete mode 100644 zerotier-one/zeroidc/Cargo.lock delete mode 100644 zerotier-one/zeroidc/src/error.rs diff --git a/zerotier-one/.clangd b/zerotier-one/.clangd new file mode 100644 index 00000000..b4145667 --- /dev/null +++ b/zerotier-one/.clangd @@ -0,0 +1,11 @@ +CompileFlags: + Add: + - "-std=c++17" + - "-I../ext" + - "-I../ext/prometheus-cpp-lite-1.0/core/include" + - "-I../ext/prometheus-cpp-lite-1.0/simpleapi/include" + - "-I../ext/opentelemetry-cpp-1.21.0/api/include" + - "-I./ext" + - "-I./ext/prometheus-cpp-lite-1.0/core/include" + - "-I./ext/prometheus-cpp-lite-1.0/simpleapi/include" + - "-I./ext/opentelemetry-cpp-1.21.0/api/include" diff --git a/zerotier-one/.drone.jsonnet b/zerotier-one/.drone.jsonnet deleted file mode 100644 index 7daef37f..00000000 --- a/zerotier-one/.drone.jsonnet +++ /dev/null @@ -1,256 +0,0 @@ -// -// tweakables -// - -local registry = "084037375216.dkr.ecr.us-east-2.amazonaws.com"; -local build_channel = "zerotier-builds"; -local release_channel = "zerotier-releases"; - -local targets = [ - { "os": "linux", distro: "redhat", "name": "el9", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag", "custom" ] }, - { "os": "linux", distro: "redhat", "name": "el8", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "redhat", "name": "el7", "isas": [ "386", "amd64", "ppc64le"], "events": [ "tag" ] }, - { "os": "linux", distro: "amazon", "name": "amzn2", "isas": [ "amd64", "arm64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "amazon", "name": "amzn2022", "isas": [ "amd64", "arm64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "fedora", "name": "fc38", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "fedora", "name": "fc37", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "fedora", "name": "fc36", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "ubuntu", "name": "jammy", "isas": [ "armv7", "amd64", "arm64", "ppc64le", "s390x", "riscv64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "ubuntu", "name": "focal", "isas": [ "armv7", "amd64", "arm64", "ppc64le", "s390x", "riscv64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "ubuntu", "name": "bionic", "isas": [ "386", "armv7", "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "ubuntu", "name": "xenial", "isas": [ "386", "armv7", "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] }, - { "os": "linux", distro: "ubuntu", "name": "trusty", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "debian", "name": "bookworm", "isas": [ "386", "armv7", "amd64", "arm64", "mips64le", "ppc64le", "s390x" ], "events": [ "tag"] }, - { "os": "linux", distro: "debian", "name": "bullseye", "isas": [ "386", "armv7", "amd64", "arm64", "mips64le", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "buster", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "debian", "name": "stretch", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "tag" ] }, - { "os": "linux", distro: "debian", "name": "jessie", "isas": [ "386", "armv7", "amd64" ], "events": [ "tag" ] }, - -// { "os": "windows", distro: "windows", "name": "windows", "isas": [ "amd64" ], "events": [ "push", "tag", "custom" ] }, -// { "os": "darwin", distro: "darwin", "name": "darwin", "isas": [ "amd64" ], "events": [ "push", "tag", "custom" ] }, - -]; - -local less_targets = [ - { "os": "linux", distro: "redhat", "name": "el9", "isas": [ "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "redhat", "name": "el8", "isas": [ "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "jammy", "isas": [ "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "focal", "isas": [ "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, -]; - - -local native_targets = [ - { "os": "linux", distro: "debian", "name": "bullseye", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, -]; - -local master_targets = [ - // - // copypasta from here - // - { "os": "linux", distro: "redhat", "name": "el9", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "redhat", "name": "el8", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "redhat", "name": "el7", "isas": [ "386", "amd64", "ppc64le"], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "amazon", "name": "amzn2", "isas": [ "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "amazon", "name": "amzn2022", "isas": [ "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "fedora", "name": "fc38", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "fedora", "name": "fc37", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "fedora", "name": "fc36", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "jammy", "isas": [ "armv7", "amd64", "arm64", "ppc64le", "s390x", "riscv64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "focal", "isas": [ "armv7", "amd64", "arm64", "ppc64le", "s390x", "riscv64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "bionic", "isas": [ "386", "armv7", "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "xenial", "isas": [ "386", "armv7", "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "ubuntu", "name": "trusty", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "sid", "isas": [ "386", "armv7", "amd64", "arm64", "mips64le", "ppc64le", "s390x", "riscv64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "bookworm", "isas": [ "386", "armv7", "amd64", "arm64", "mips64le", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "bullseye", "isas": [ "386", "armv7", "amd64", "arm64", "mips64le", "ppc64le", "s390x" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "buster", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "stretch", "isas": [ "386", "armv7", "amd64", "arm64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "linux", distro: "debian", "name": "jessie", "isas": [ "386", "armv7", "amd64" ], "events": [ "push", "tag", "custom" ] }, - { "os": "windows", distro: "windows", "name": "win2k22", "isas": [ "amd64" ], "events": [ "push", "tag", "custom" ] } -]; - -// -// functions -// - -local pipeline_type(os) = if os == "darwin" then "exec" else "docker"; -local builder_image(os) = if os == "linux" then registry + "/honda-builder" else registry + "/windows-builder"; -local tester_image(os) = if os == "linux" then registry + "/honda-builder" else registry + "/windows-tester"; -local build_step_volumes(os) = if os == "linux" then [ { name: "zerotier-builds", path: "/zerotier-builds" } ] else []; -local release_step_volumes(os) = if os == "linux" then [ { name: "zerotier-releases", path: "/zerotier-releases" } ] else []; -local host_volumes(os) = if os == "linux" then [ - { name: "zerotier-builds", host: { path: "/zerotier-builds" } }, - { name: "zerotier-releases", host: { path: "/zerotier-releases" } }, -] else []; - -local index_image(distro) = - if distro == "debian" || distro == "ubuntu" then - registry + "/apt-builder" - else if distro == "redhat" || distro == "fedora" || distro == "amazon" then - registry + "/dnf-builder" - else if distro == "windows" then - registry + "/msi-builder" -; - -local copy_commands(os, distro, name, isa, version) = - if os == "linux" then [ - std.join(" ", [ "./ci/scripts/publish.sh", name, distro, isa, version, "${DRONE_BUILD_EVENT}" ]) - ] - else if os == "windows" then [ - "C:\\scripts\\fix-ec2-metadata.ps1", - "Get-ChildItem windows", - // "aws s3 cp windows\\bytey-SetupFiles\\bytey.msi s3://zerotier-builds/windows/" + version + "/bytey.msi", - ] else if os == "darwin" then [ - "echo hello" - ] -; - -local index_commands(os, channel, distro, name, isas) = - if os == "linux" then - [ "/usr/local/bin/index " + channel + " " + distro + " " + name + " " + std.join(" ", isas) ] - else if os == "windows" then - [ "Get-ChildItem -Recurse windows" ] -; - -local build_commands(os, distro, name, isa, version) = - if os == "linux" then - [ std.join(" ", [ "./ci/scripts/build.sh", name, distro, isa, version, "${DRONE_BUILD_EVENT}" ]) ] - else - if os == "windows" then - [ "windows/build.ps1", "windows/package.ps1" ] - else - if os == "darwin" then - [ "whoami" ] -; - -local test_commands(os, distro, name, isa, version) = - if os == "linux" then - [ std.join(" ", [ "./ci/scripts/test.sh", name, distro, isa, version, "${DRONE_BUILD_EVENT}" ]) ] - else - if os == "windows" then - [ "windows/testpackage.ps1 " + version ] -; - -// -// render -// - -local Build(os, distro, name, isa, events) = { - "kind": "pipeline", - "type": pipeline_type(os), - "name": std.join(" ", [ name, isa, "build" ]), - "pull": "always", - "clone": { "depth": 1, [ if os == "darwin" then "disable" ]: true }, - "steps": [ - { - "name": "build", - "image": builder_image(os), - "commands": build_commands(os, distro, name, isa, "100.0.0+${DRONE_COMMIT_SHA:0:8}"), - "when": { "event": [ "push" ]}, - }, - { - "name": "release", - "image": builder_image(os), - "commands": build_commands(os, distro, name, isa, "${DRONE_TAG}"), - "when": { "event": [ "tag" ]}, - }, - { - "name": "copy build", - "image": builder_image(os), - "commands": copy_commands(os, distro, name, isa, "100.0.0+${DRONE_COMMIT_SHA:0:8}"), - "volumes": build_step_volumes(os), - "when": { "event": [ "push" ]}, - }, - { - "name": "copy relase", - "image": builder_image(os), - "commands": copy_commands(os, distro, name, isa, "${DRONE_TAG}"), - "volumes": release_step_volumes(os), - "when": { "event": [ "tag" ]}, - }, - ], - "volumes": host_volumes(os), - "platform": { "os": os, [ if isa == "arm64" || isa == "armv7" then "arch" ]: "arm64" }, - "trigger": { "event": events } -}; - -local Test(os, distro, name, isa, events) = { - "kind": "pipeline", - "type": pipeline_type(os), - "name": std.join(" ", [ name, isa, "test"]), - "pull": "always", - "clone": { "depth": 1 }, - "steps": [ - { - "name": "test build", - "image": tester_image(os), - "volumes": build_step_volumes(os), - "commands": test_commands(os, distro, name, isa, "100.0.0+${DRONE_COMMIT_SHA:0:8}"), - "when": { "event": [ "push" ]}, - }, - { - "name": "test release", - "image": tester_image(os), - "volumes": release_step_volumes(os), - "commands": test_commands(os, distro, name, isa, "${DRONE_TAG}"), - "when": { "event": [ "tag" ]}, - }, - ], - "volumes": host_volumes(os), - "platform": { "os": os, [ if isa == "arm64" || isa == "armv7" then "arch" ]: "arm64" }, - "depends_on": [ std.join(" ", [ name, "index" ]) ], - "trigger": { "event": events } -}; - -local Index(p) = { - "kind": "pipeline", - "type": pipeline_type(p.os), - "name": std.join(" ", [ p.name, "index" ]), - "pull": "always", - "clone": { "depth": 1 }, - "steps": [ - { - "name": "index build", - "image": index_image(p.distro), - "commands": index_commands(p.os, "zerotier-builds", p.distro, p.name, p.isas), - "volumes": build_step_volumes(p.os), - "environment":{ "GPG_PRIVATE_KEY": { from_secret: "gpg-private-key" }}, - "when": { "event": [ "push" ]}, - }, - { - "name": "index release", - "image": index_image(p.distro), - "commands": index_commands(p.os, "zerotier-releases", p.distro, p.name, p.isas), - "volumes": release_step_volumes(p.os), - "environment":{ "GPG_PRIVATE_KEY": { from_secret: "gpg-private-key" }}, - "when": { "event": [ "tag" ]}, - }, - ], - "volumes": host_volumes(p.os), - "platform": { "os": p.os }, - depends_on: std.flattenArrays([ [ std.join(" ", [ p.name, isa, "build" ]) ] for isa in p.isas ]), - "trigger": { "event": p.events } -}; - -// -// print -// - -std.flattenArrays([ - [ - Build(p.os, p.distro, p.name, isa, p.events) - for isa in p.isas - ] + - [ - Index(p) - ] - for p in native_targets - ]) + - std.flattenArrays([ - [ - Test(p.os, p.distro, p.name, isa, p.events) - for isa in p.isas - ] - for p in native_targets - ]) - \ No newline at end of file diff --git a/zerotier-one/.drone.yml b/zerotier-one/.drone.yml deleted file mode 100644 index b837b1b2..00000000 --- a/zerotier-one/.drone.yml +++ /dev/null @@ -1,465 +0,0 @@ ---- -clone: - depth: 1 -kind: pipeline -name: bullseye 386 build -platform: - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/build.sh bullseye debian 386 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: build - when: - event: - - push -- commands: - - ./ci/scripts/build.sh bullseye debian 386 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: release - when: - event: - - tag -- commands: - - ./ci/scripts/publish.sh bullseye debian 386 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/publish.sh bullseye debian 386 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy relase - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -kind: pipeline -name: bullseye armv7 build -platform: - arch: arm64 - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/build.sh bullseye debian armv7 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: build - when: - event: - - push -- commands: - - ./ci/scripts/build.sh bullseye debian armv7 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: release - when: - event: - - tag -- commands: - - ./ci/scripts/publish.sh bullseye debian armv7 100.0.0+${DRONE_COMMIT_SHA:0:8} - ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/publish.sh bullseye debian armv7 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy relase - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -kind: pipeline -name: bullseye amd64 build -platform: - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/build.sh bullseye debian amd64 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: build - when: - event: - - push -- commands: - - ./ci/scripts/build.sh bullseye debian amd64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: release - when: - event: - - tag -- commands: - - ./ci/scripts/publish.sh bullseye debian amd64 100.0.0+${DRONE_COMMIT_SHA:0:8} - ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/publish.sh bullseye debian amd64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy relase - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -kind: pipeline -name: bullseye arm64 build -platform: - arch: arm64 - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/build.sh bullseye debian arm64 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: build - when: - event: - - push -- commands: - - ./ci/scripts/build.sh bullseye debian arm64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: release - when: - event: - - tag -- commands: - - ./ci/scripts/publish.sh bullseye debian arm64 100.0.0+${DRONE_COMMIT_SHA:0:8} - ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/publish.sh bullseye debian arm64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: copy relase - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -depends_on: -- bullseye 386 build -- bullseye armv7 build -- bullseye amd64 build -- bullseye arm64 build -kind: pipeline -name: bullseye index -platform: - os: linux -pull: always -steps: -- commands: - - /usr/local/bin/index zerotier-builds debian bullseye 386 armv7 amd64 arm64 - environment: - GPG_PRIVATE_KEY: - from_secret: gpg-private-key - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/apt-builder - name: index build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - /usr/local/bin/index zerotier-releases debian bullseye 386 armv7 amd64 arm64 - environment: - GPG_PRIVATE_KEY: - from_secret: gpg-private-key - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/apt-builder - name: index release - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -depends_on: -- bullseye index -kind: pipeline -name: bullseye 386 test -platform: - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/test.sh bullseye debian 386 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/test.sh bullseye debian 386 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test release - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -depends_on: -- bullseye index -kind: pipeline -name: bullseye armv7 test -platform: - arch: arm64 - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/test.sh bullseye debian armv7 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/test.sh bullseye debian armv7 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test release - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -depends_on: -- bullseye index -kind: pipeline -name: bullseye amd64 test -platform: - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/test.sh bullseye debian amd64 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/test.sh bullseye debian amd64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test release - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -clone: - depth: 1 -depends_on: -- bullseye index -kind: pipeline -name: bullseye arm64 test -platform: - arch: arm64 - os: linux -pull: always -steps: -- commands: - - ./ci/scripts/test.sh bullseye debian arm64 100.0.0+${DRONE_COMMIT_SHA:0:8} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test build - volumes: - - name: zerotier-builds - path: /zerotier-builds - when: - event: - - push -- commands: - - ./ci/scripts/test.sh bullseye debian arm64 ${DRONE_TAG} ${DRONE_BUILD_EVENT} - image: 084037375216.dkr.ecr.us-east-2.amazonaws.com/honda-builder - name: test release - volumes: - - name: zerotier-releases - path: /zerotier-releases - when: - event: - - tag -trigger: - event: - - push - - tag - - custom -type: docker -volumes: -- host: - path: /zerotier-builds - name: zerotier-builds -- host: - path: /zerotier-releases - name: zerotier-releases ---- -kind: signature -hmac: 887a3ef78d3fe8f0149911e1e4876401dd7dd313b36eb893e791fa42f45d7768 - -... diff --git a/zerotier-one/.github/workflows/build.yml b/zerotier-one/.github/workflows/build.yml index b6d09a6a..fee6dd33 100644 --- a/zerotier-one/.github/workflows/build.yml +++ b/zerotier-one/.github/workflows/build.yml @@ -1,4 +1,7 @@ -on: [ push ] +on: + pull_request: + push: + workflow_dispatch: jobs: build_ubuntu: @@ -9,23 +12,22 @@ jobs: git config --global core.autocrlf input # git config --global core.eol lf - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: x86_64-unknown-linux-gnu - override: true + targets: x86_64-unknown-linux-gnu components: rustfmt, clippy - name: Set up cargo cache uses: Swatinem/rust-cache@v2 continue-on-error: false with: - key: ${{ runner.os }}-cargo-${{ hashFiles('zeroidc//Cargo.lock') }} + key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }} shared-key: ${{ runner.os }}-cargo- workspaces: | - zeroidc/ + rustybits/ - name: make run: make @@ -33,6 +35,14 @@ jobs: run: | make selftest ./zerotier-selftest + - name: 'Tar files' # keeps permissions (execute) + run: tar -cvf zerotier-one.tar zerotier-one + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: zerotier-one-ubuntu-x64 + path: zerotier-one.tar + retention-days: 7 build_macos: runs-on: macos-latest @@ -42,29 +52,42 @@ jobs: git config --global core.autocrlf input # git config --global core.eol lf - name: checkout - uses: actions/checkout@v3 - - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: actions/checkout@v4 + - name: Install Rust aarch64 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable target: aarch64-apple-darwin - override: true + components: rustfmt, clippy + - name: Install Rust x86_64 + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + target: x86_64-apple-darwin components: rustfmt, clippy - name: Set up cargo cache uses: Swatinem/rust-cache@v2 continue-on-error: false with: - key: ${{ runner.os }}-cargo-${{ hashFiles('zeroidc//Cargo.lock') }} + key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }} shared-key: ${{ runner.os }}-cargo- workspaces: | - zeroidc/ - + rustybits/ - name: make run: make - name: selftest run: | make selftest ./zerotier-selftest + - name: 'Tar files' # keeps permissions (execute) + run: tar -cvf zerotier-one.tar zerotier-one + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: zerotier-one-mac + path: zerotier-one.tar + retention-days: 7 + build_windows: runs-on: windows-latest @@ -74,25 +97,30 @@ jobs: git config --global core.autocrlf true # git config --global core.eol lf - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable target: aarch64-apple-darwin - override: true components: rustfmt, clippy - name: Set up cargo cache uses: Swatinem/rust-cache@v2 continue-on-error: false with: - key: ${{ runner.os }}-cargo-${{ hashFiles('zeroidc//Cargo.lock') }} + key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }} shared-key: ${{ runner.os }}-cargo- workspaces: | - zeroidc/ + rustybits/ - name: setup msbuild - uses: microsoft/setup-msbuild@v1.1.3 + uses: microsoft/setup-msbuild@v2 - name: msbuild run: | - msbuild windows\ZeroTierOne.sln /m /p:Configuration=Release /property:Platform=x64 /t:ZeroTierOne + msbuild windows\ZeroTierOne.sln /m /p:Configuration=Release /property:Platform=x64 /t:ZeroTierOne + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: zerotier-one-windows + path: windows/Build + retention-days: 7 diff --git a/zerotier-one/.github/workflows/validate.yml b/zerotier-one/.github/workflows/validate.yml index bb362fb8..bbc10766 100644 --- a/zerotier-one/.github/workflows/validate.yml +++ b/zerotier-one/.github/workflows/validate.yml @@ -1,4 +1,5 @@ on: + pull_request: push: workflow_dispatch: @@ -38,13 +39,13 @@ jobs: CXX: 'g++' BRANCH: ${{ github.ref_name }} run: | - sudo apt install -y valgrind xmlstarlet gcovr iperf3 tree + sudo apt update && sudo apt install -y valgrind xmlstarlet gcovr iperf3 tree make one ZT_COVERAGE=1 ZT_TRACE=1 sudo chmod +x ./.github/workflows/validate-linux.sh sudo ./.github/workflows/validate-linux.sh - name: Archive test results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{github.sha}}-test-results path: "*test-results*" diff --git a/zerotier-one/.gitignore b/zerotier-one/.gitignore index 79a9e247..f5befd99 100755 --- a/zerotier-one/.gitignore +++ b/zerotier-one/.gitignore @@ -6,16 +6,19 @@ /zerotier /nltest -# IDE stuff +# IDE and dev tool stuff /.idea /.nova /compile_commands.json +/.claude +/.aider # OS-created garbage files from various platforms .DS_Store .Apple* Thumbs.db @eaDir +lost+found ._* # Windows build droppings @@ -58,6 +61,9 @@ zt1-src.tar.gz /MacEthernetTapAgent # Miscellaneous temporaries, build files, etc. +ext/installfiles/windows/*.back*.aip +tcp-proxy/tcp-proxy +rustybits/target *.log *.opensdf *.user @@ -101,7 +107,6 @@ windows/ZeroTierOne/Debug/ /ext/installfiles/windows/chocolatey/zerotier-one/*.nupkg # Miscellaneous mac/Xcode droppings -.DS_Store .Trashes *.swp *~.nib @@ -124,17 +129,15 @@ attic/world/mkworld workspace/ workspace2/ zeroidc/target/ +tcp-proxy/target -#snapcraft specifics +# Snapcraft Linux build stuff /parts/ /stage/ /prime/ - *.snap - .snapcraft __pycache__ *.pyc *_source.tar.bz2 snap/.snapcraft -tcp-proxy/tcp-proxy diff --git a/zerotier-one/.kick b/zerotier-one/.kick deleted file mode 100644 index 28b8ee7f..00000000 --- a/zerotier-one/.kick +++ /dev/null @@ -1,14 +0,0 @@ -kick -kick -kick -kick -kick -kick -kick -kick -kick -kick -kick -kick -kick -kick diff --git a/zerotier-one/AUTHORS.md b/zerotier-one/AUTHORS.md deleted file mode 100644 index 84bb8631..00000000 --- a/zerotier-one/AUTHORS.md +++ /dev/null @@ -1,75 +0,0 @@ -# Authors and Third Party Code Licensing Information - -## Primary Authors - - * ZeroTier Core and ZeroTier One virtual networking service
- Adam Ierymenko / adam.ierymenko@zerotier.com - Joseph Henry / joseph.henry@zerotier.com (QoS and multipath) - - * Java JNI Interface to enable Android application development, and Android app itself (code for that is elsewhere)
- Grant Limberg / glimberg@gmail.com - - * ZeroTier SDK (formerly known as Network Containers)
- Joseph Henry / joseph.henry@zerotier.com - -## Third Party Contributors - - * A number of fixes and improvements to the new controller, other stuff.
- Kees Bos / https://github.com/keesbos/ - - * Debugging and testing, OpenWRT support fixes.
- Moritz Warning / moritzwarning@web.de - - * Debian GNU/Linux packaging, manual pages, and license compliance edits.
- Ben Finney - - * Several others made smaller contributions, which GitHub tracks here:
- https://github.com/zerotier/ZeroTierOne/graphs/contributors/ - -## Third-Party Code - -ZeroTier includes the following third party code, either in ext/ or incorporated into the ZeroTier core. This third party code remains licensed under its original license and is not subject to ZeroTier's BSL license. - - * LZ4 compression algorithm by Yann Collet - - * Files: node/Packet.cpp (bundled within anonymous namespace) - * Home page: http://code.google.com/p/lz4/ - * License grant: BSD 2-clause - - * http-parser by Joyent, Inc. (many authors) - - * Files: ext/http-parser/* - * Home page: https://github.com/joyent/http-parser/ - * License grant: MIT/Expat - - * C++11 json (nlohmann/json) by Niels Lohmann - - * Files: ext/json/* - * Home page: https://github.com/nlohmann/json - * License grant: MIT - - * tap-windows6 by the OpenVPN project - - * Files: windows/TapDriver6/* - * Home page: https://github.com/OpenVPN/tap-windows6/ - * License grant: GNU GPL v2 - * ZeroTier Modifications: change name of driver to ZeroTier, add ioctl() to get L2 multicast memberships (source is in ext/ and modifications inherit GPL) - - * Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519 digital signature algorithm, and Poly1305 MAC algorithm, all by Daniel J. Bernstein - - * Files: node/Salsa20.* node/C25519.* node/Poly1305.* - * Home page: http://cr.yp.to/ - * License grant: public domain - * ZeroTier Modifications: slight cryptographically-irrelevant modifications for inclusion into ZeroTier core - - * MiniUPNPC and libnatpmp by Thomas Bernard - - * Files: ext/libnatpmp/* ext/miniupnpc/* - * Home page: http://miniupnp.free.fr/ - * License grant: BSD attribution no-endorsement - - * cpp-httplib by yhirose - - * Files: ext/cpp-httplib/* - * Home page: https://github.com/yhirose/cpp-httplib - * License grant: MIT diff --git a/zerotier-one/COPYING b/zerotier-one/COPYING deleted file mode 100644 index d07f3524..00000000 --- a/zerotier-one/COPYING +++ /dev/null @@ -1,12 +0,0 @@ -ZeroTier One, an endpoint server for the ZeroTier virtual network layer. -Copyright © 2011–2019 ZeroTier, Inc. - -ZeroTier is released under the terms of the BSL version 1.1. See the -file LICENSE.txt for details. - -.. - Local variables: - coding: utf-8 - mode: text - End: - vim: fileencoding=utf-8 filetype=text : diff --git a/zerotier-one/Dockerfile.release b/zerotier-one/Dockerfile.release index 87ef6534..2a289cea 100644 --- a/zerotier-one/Dockerfile.release +++ b/zerotier-one/Dockerfile.release @@ -1,6 +1,6 @@ # vim: ft=dockerfile -FROM debian:bullseye +FROM debian:bookworm ARG VERSION @@ -9,9 +9,9 @@ RUN mkdir -p /usr/share/zerotier && \ curl -o /usr/share/zerotier/tmp.asc "https://download.zerotier.com/contact%40zerotier.com.gpg" && \ gpg --no-default-keyring --keyring /usr/share/zerotier/zerotier.gpg --import /usr/share/zerotier/tmp.asc && \ rm -f /usr/share/zerotier/tmp.asc && \ - echo "deb [signed-by=/usr/share/zerotier/zerotier.gpg] http://download.zerotier.com/debian/bullseye bullseye main" > /etc/apt/sources.list.d/zerotier.list + echo "deb [signed-by=/usr/share/zerotier/zerotier.gpg] http://download.zerotier.com/debian/bookworm bookworm main" > /etc/apt/sources.list.d/zerotier.list -RUN apt-get update -qq && apt-get install zerotier-one=${VERSION} curl iproute2 net-tools iputils-ping openssl libssl1.1 -y +RUN apt-get update -qq && apt-get install zerotier-one=${VERSION} curl iproute2 net-tools iputils-ping openssl libssl3 -y RUN rm -rf /var/lib/zerotier-one COPY entrypoint.sh.release /entrypoint.sh diff --git a/zerotier-one/LICENSE-MPL.txt b/zerotier-one/LICENSE-MPL.txt new file mode 100644 index 00000000..a612ad98 --- /dev/null +++ b/zerotier-one/LICENSE-MPL.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/zerotier-one/LICENSE.txt b/zerotier-one/LICENSE.txt index 13fa014a..2c64b182 100644 --- a/zerotier-one/LICENSE.txt +++ b/zerotier-one/LICENSE.txt @@ -1,149 +1,5 @@ ------------------------------------------------------------------------------ +See LICENSE-MPL.txt for all code in node/, osdep/. service/, and everywhere else except ext/ and nonfree/. -Business Source License 1.1 +See nonfree/LICENSE.md for all non-free ("source available") portions of this repository. -License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. -"Business Source License" is a trademark of MariaDB Corporation Ab. - ------------------------------------------------------------------------------ - -Parameters - -Licensor: ZeroTier, Inc. -Licensed Work: ZeroTier Network Virtualization Engine 1.4.4 - The Licensed Work is (c)2019 ZeroTier, Inc. -Additional Use Grant: You may make use of the Licensed Work, provided you - do not use it in any of the following ways: - - * Sell hosted ZeroTier services as a "SaaS" Product - - (1) Operate or sell access to ZeroTier root servers, - network controllers, or authorization key or certificate - generation components of the Licensed Work as a - for-profit service, regardless of whether the use of - these components is sold alone or is bundled with other - services. Note that this does not apply to the use of - ZeroTier behind the scenes to operate a service not - related to ZeroTier network administration. - - * Create Non-Open-Source Commercial Derviative Works - - (2) Link or directly include the Licensed Work in a - commercial or for-profit application or other product - not distributed under an Open Source Initiative (OSI) - compliant license. See: https://opensource.org/licenses - - (3) Remove the name, logo, copyright, or other branding - material from the Licensed Work to create a "rebranded" - or "white labeled" version to distribute as part of - any commercial or for-profit product or service. - - * Certain Government Uses - - (4) Use or deploy the Licensed Work in a government - setting in support of any active government function - or operation with the exception of the following: - physical or mental health care, family and social - services, social welfare, senior care, child care, and - the care of persons with disabilities. - -Change Date: 2025-01-01 - -Change License: Apache License version 2.0 as published by the Apache - Software Foundation - https://www.apache.org/licenses/ - -Alternative Licensing - -If you would like to use the Licensed Work in any way that conflicts with -the stipulations of the Additional Use Grant, contact ZeroTier, Inc. to -obtain an alternative commercial license. - -Visit us on the web at: https://www.zerotier.com/ - -Notice - -The Business Source License (this document, or the "License") is not an Open -Source license. However, the Licensed Work will eventually be made available -under an Open Source License, as stated in this License. - -For more information on the use of the Business Source License for ZeroTier -products, please visit our pricing page which contains license details and -and license FAQ: https://zerotier.com/pricing - -For more information on the use of the Business Source License generally, -please visit the Adopting and Developing Business Source License FAQ at -https://mariadb.com/bsl-faq-adopting. - ------------------------------------------------------------------------------ - -Business Source License 1.1 - -Terms - -The Licensor hereby grants you the right to copy, modify, create derivative -works, redistribute, and make non-production use of the Licensed Work. The -Licensor may make an Additional Use Grant, above, permitting limited -production use. - -Effective on the Change Date, or the fourth anniversary of the first publicly -available distribution of a specific version of the Licensed Work under this -License, whichever comes first, the Licensor hereby grants you rights under -the terms of the Change License, and the rights granted in the paragraph -above terminate. - -If your use of the Licensed Work does not comply with the requirements -currently in effect as described in this License, you must purchase a -commercial license from the Licensor, its affiliated entities, or authorized -resellers, or you must refrain from using the Licensed Work. - -All copies of the original and modified Licensed Work, and derivative works -of the Licensed Work, are subject to this License. This License applies -separately for each version of the Licensed Work and the Change Date may vary -for each version of the Licensed Work released by Licensor. - -You must conspicuously display this License on each original or modified copy -of the Licensed Work. If you receive the Licensed Work in original or -modified form from a third party, the terms and conditions set forth in this -License apply to your use of that work. - -Any use of the Licensed Work in violation of this License will automatically -terminate your rights under this License for the current and all other -versions of the Licensed Work. - -This License does not grant you any right in any trademark or logo of -Licensor or its affiliates (provided that you may use a trademark or logo of -Licensor as expressly required by this License). - -TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON -AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, -EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND -TITLE. - ------------------------------------------------------------------------------ - -MariaDB hereby grants you permission to use this License’s text to license -your works, and to refer to it using the trademark "Business Source License", -as long as you comply with the Covenants of Licensor below. - -Covenants of Licensor - -In consideration of the right to use this License’s text and the "Business -Source License" name and trademark, Licensor covenants to MariaDB, and to all -other recipients of the licensed work to be provided by Licensor: - -1. To specify as the Change License the GPL Version 2.0 or any later version, - or a license that is compatible with GPL Version 2.0 or a later version, - where "compatible" means that software provided under the Change License can - be included in a program with software provided under GPL Version 2.0 or a - later version. Licensor may specify additional Change Licenses without - limitation. - -2. To either: (a) specify an additional grant of rights to use that does not - impose any additional restriction on the right granted in this License, as - the Additional Use Grant; or (b) insert the text "None". - -3. To specify a Change Date. - -4. Not to modify this License in any other way. +Code in ext/ is external code included for build convenience or backward compatibility and retains its original license. diff --git a/zerotier-one/Makefile b/zerotier-one/Makefile index 1bedf304..51a9914b 100644 --- a/zerotier-one/Makefile +++ b/zerotier-one/Makefile @@ -31,3 +31,6 @@ drone: @echo "rendering .drone.yaml from .drone.jsonnet" drone jsonnet --format --stream drone sign zerotier/ZeroTierOne --save + +clang-format: + find node osdep service tcp-proxy nonfree/controller -iname '*.cpp' -o -iname '*.hpp' | xargs clang-format -i diff --git a/zerotier-one/OFFICIAL-RELEASE-STEPS.md b/zerotier-one/OFFICIAL-RELEASE-STEPS.md index ba7b556d..0c198bd6 100644 --- a/zerotier-one/OFFICIAL-RELEASE-STEPS.md +++ b/zerotier-one/OFFICIAL-RELEASE-STEPS.md @@ -14,6 +14,7 @@ The version must be incremented in all of the following files: /debian/changelog /ext/installfiles/mac/ZeroTier One.pkgproj /ext/installfiles/windows/ZeroTier One.aip + ../DesktopUI/mac-app-template/ZeroTier.app/Contents/Info.plist The final .AIP file can only be edited on Windows with [Advanced Installer Enterprise](http://www.advancedinstaller.com/). In addition to incrementing the version be sure that a new product code is generated. (The "upgrade code" GUID on the other hand must never change.) @@ -29,4 +30,4 @@ You will need [Packages](http://s.sudre.free.fr/Software/Packages/about.html) an ## Windows -First load the Visual Studio solution and rebuild the UI and ZeroTier One in both x64 and i386 `Release` mode. Then load [Advanced Installer Enterprise](http://www.advancedinstaller.com/), check that the version is correct, and build. The build will fail if any build artifacts are missing, and Windows must have our product singing key (from DigiCert) available to sign the resulting MSI file. The MSI must then be tested on at least a few different CLEAN Windows VMs to ensure that the installer is valid and properly signed. +First load the Visual Studio solution and rebuild the UI and ZeroTier One in both x64, i386, and arm64 `Release` mode. Then load [Advanced Installer Enterprise](http://www.advancedinstaller.com/), check that the version is correct, and build. The build will fail if any build artifacts are missing, and Windows must have our product singing key (from DigiCert) available to sign the resulting MSI file. The MSI must then be tested on at least a few different CLEAN Windows VMs to ensure that the installer is valid and properly signed. diff --git a/zerotier-one/README.docker.md b/zerotier-one/README.docker.md index 0410f892..5b046e32 100644 --- a/zerotier-one/README.docker.md +++ b/zerotier-one/README.docker.md @@ -64,6 +64,7 @@ You can control a few settings including the identity used and the authtoken use - `ZEROTIER_API_SECRET`: replaces the `authtoken.secret` before booting and allows you to manage the control socket's authentication key. - `ZEROTIER_IDENTITY_PUBLIC`: the `identity.public` file for zerotier-one. Use `zerotier-idtool` to generate one of these for you. - `ZEROTIER_IDENTITY_SECRET`: the `identity.secret` file for zerotier-one. Use `zerotier-idtool` to generate one of these for you. +- `ZEROTIER_LOCAL_CONF`: Sets the the `local.conf` file content for zerotier-one ### Tips diff --git a/zerotier-one/README.md b/zerotier-one/README.md index abe494b6..e881ce81 100644 --- a/zerotier-one/README.md +++ b/zerotier-one/README.md @@ -44,6 +44,12 @@ The base path contains the ZeroTier One service main entry point (`one.cpp`), se - `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI. - `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in Rust, and more Rust will be appearing in this repository in the future.) +### Contributing + +Please do pull requests off of the `dev` branch. + +Releases are done by merging `dev` into `main` and then tagging and doing builds. + ### Build and Platform Notes To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. @@ -52,7 +58,7 @@ To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU - Xcode command line tools for macOS 10.13 or newer are required. - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - **Linux** - - The minimum compiler versions required are GCC/G++ 4.9.3 or CLANG/CLANG++ 3.4.2. (Install `clang` on CentOS 7 as G++ is too old.) + - The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - **Windows** @@ -81,7 +87,7 @@ On most distributions, macOS, and Windows, the installer will start the service A home folder for your system will automatically be created. -The service is controlled via the JSON API, which by default is available at 127.0.0.1 port 9993. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. +The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. Here's where home folders live (by default) on each OS: @@ -169,3 +175,23 @@ Metrics are also available on disk in ZeroTier's working directory: | zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | If there are other metrics you'd like to see tracked, ask us in an Issue or send us a Pull Request! + +### HTTP / App server + +There is a static http file server suitable for hosting Single Page Apps at http://localhost:9993/app/ + +Use `zerotier-cli info -j` to find your zerotier-one service's homeDir + +``` sh +cd $ZT_HOME +sudo mkdir -p app/app1 +sudo mkdir -p app/appB +echo 'appA

hello world A' | sudo tee app/appA/index.html +echo 'app2

hello world 2' | sudo tee app/app2/index.html +curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2 +``` + +Then visit [http://localhost:9993/app/app1/](http://localhost:9993/app/app1/) and [http://localhost:9993/app/appB/](http://localhost:9993/app/appB/) + +Requests to paths don't exist return the app root index.html, as is customary for SPAs. +If you want, you can write some javascript that talks to the service or controller [api](https://docs.zerotier.com/service/v1). diff --git a/zerotier-one/RELEASE-NOTES.md b/zerotier-one/RELEASE-NOTES.md index b94557e6..5cecf340 100644 --- a/zerotier-one/RELEASE-NOTES.md +++ b/zerotier-one/RELEASE-NOTES.md @@ -1,18 +1,111 @@ ZeroTier Release Notes ====== -# 2023-09-12 -- Version 1.12.2 +## 2025-08-21 -- Version 1.16.0 + + * License Changes + * The core (`node/` and `include/`) and the service (`service/` and `osdep/`) are now under the Mozilla Public License (MPL). + * The network controller (`controller/`) is now under a commercial source-available license. + * Use `make ZT_NONFREE=1` to build non-MPL components. + * Building with `ZT_NONFREE=1` changes the license of the resulting executable to a proprietary commercial license vs. MPL. + * Default binary builds no longer contain the controller. + * Network-Specific Relays (preview / beta) + * It is now possible to designate one or more nodes as network-specific relays to be used in preference to roots for relayed traffic between members of a network. These nodes need not necessarily be members of the network. + * "Moons" are now considered even more extra *deprecated* and should not be used in new deployments. + * We will announce support for network-specific relays once we have worked with some users to test and performed more internal validation. + * HELLO packet encryption is now available by enabling the `encryptedHelloEnabled` settting in `local.conf`. + * HELLO packets contain no data, only public keys and very basic meta-data like protocol version information. + * Most users won't care about this, but if you require this for e.g. compliance reasons you can enable. This adds a small amount of CPU and bandwidth overhead to the HELLO sign-on process. + * Small Fixes + * Code has been reformatted using `clang-format` with a `.clang-format` definition in the repo. Typing `make clang-format` executes this against all main core and service C++ files. + * Bridges are no longer counted toward multicast limits. + * A flow designation issue in bridged traffic under multipath scenarios has been fixed. + * Library version updates for OIDC and other features. + * Antiquated and unused software update code removed for precautionary reasons. + * Compiler warnings removed through removing use of deprecated functions on some platforms. + * Other minor bug fixes. + + * Merged PRs: + * PR #2495: Hosted controller changes for cv1 os/arch reporting + * PR #2493: Add a warning about missing DNS functionality on Linux + * PR #2491: Fix: standardize bond link selection method JSON field naming + * PR #2489: Fix link select field in bond CLI + * PR #2487: Windows installer fixes + * PR #2486: Add 'apt update' to validation action + * PR #2482: Add OpenTelemetry support in Central Controllers + * PR #2481: Rust warning removal, clippy allows, update library versions + * PR #2477: Don't count bridges towards multicast limit. Send to all bridges + * PR #2475: clang-format + * PR #2474: Hello encryption + * PR #2452: CV2 db schema support + * PR #2451: Bump crossbeam-channel from 0.5.13 to 0.5.15 in /rustybits + * PR #2450: Bump tokio from 1.42.0 to 1.43.1 in /rustybits + * PR #2449: Bump openssl from 0.10.70 to 0.10.72 in /rustybits + * PR #2445: Allow setting local.conf content from Docker environment variable + * PR #2444: Temporal sdk fix + * PR #2443: Fix AuthInfo Provider not being set + * PR #2442: Bump ring from 0.17.8 to 0.17.13 in /rustybits + * PR #2441: Run CI on pull requests + * PR #2438: Add custom control plane for third-party device vendors + * PR #2432: Update upload-artifact action to use v4 + * PR #2430: Bump openssl from 0.10.68 to 0.10.70 in /rustybits + * PR #2427: Fix active backup link selection + * PR #2417: Update rust dependencies + * PR #2409: Bump rustls from 0.23.15 to 0.23.18 in /rustybits + * PR #2405: Build fix for OpenBSD - See ticket #2397 + +---- + +# 1.14 + +## 2024-10-23 -- Version 1.14.2 + + * Fix for missing entitlement on macOS Sequoia. + * Fix for a problem correctly parsing local.conf to enable low bandwidth mode. + * Increment versions of some dependent libraries. + * Other fixes. + +## 2024-09-12 -- Version 1.14.1 + + * Multithreaded packet I/O support! Currently this is just for Linux and must + be enabled in local.conf. It will likely make the largest difference on small + multi-core devices where CPU is a bottleneck and high throughput is desired. + It may be enabled by default in the future but we want it to be thoroughly + tested. It's a little harder than it seems at first glance due to the need + to keep packets in sequence and balance load. + * Several multipath bug fixes. + * Updated the versions on a number of libraries related to OIDC support and HTTP. + * MacOS .app now shows the correct version in its Info.plist manifest. + * Sanitize MAC addresses in JSON format rules parser. + * Some basic information about the platform (OS, CPU architecture) is now reported + to network controllers when networks are joined so it can be displayed to + network admins and in the future used in policy checking and inventory operations. + +## 2024-05-02 -- Version 1.14.0 + + * Linux I/O performance improvements under heavy load + * Improvements to multipath + * Fix for port rebinding "coma" bug after periods offline (some laptop users) + * Fixed a rules engine quirk/ambiguity (GitHub Issue #2200) + * Controller API enhancements: node names and other node meta-data + * Other bug fixes + +---- + +# 1.12 and Older + +## 2023-09-12 -- Version 1.12.2 * More improvements to macOS full tunnel mode. * Faster recovery after changes to physical network settings. -# 2023-08-25 -- Version 1.12.1 +## 2023-08-25 -- Version 1.12.1 * Minor release to fix a port binding issue in Linux. * Update Debian dependencies. * No changes for other platforms. -# 2023-08-23 -- Version 1.12.0 +## 2023-08-23 -- Version 1.12.0 * Experimental Windows ARM64 support * Fix numerous sleep/wake issues on macOS and other platforms @@ -22,17 +115,17 @@ ZeroTier Release Notes * Numerous macOS DNS fixes * 10-30% speed improvement on Linux -# 2023-03-23 -- Version 1.10.6 +## 2023-03-23 -- Version 1.10.6 * Prevent binding temporary ipv6 addresses on macos (#1910) * Prevent path-learning loops (#1914) * Prevent infinite loop of UAC prompts in tray app -# 2023-03-10 -- Version 1.10.5 +## 2023-03-10 -- Version 1.10.5 * Fix for high CPU usage bug on Windows -# 2023-03-07 -- Version 1.10.4 +## 2023-03-07 -- Version 1.10.4 * SECURITY FIX (Windows): this version fixes a file permission problem on Windows that could allow non-privileged users on a Windows system to read @@ -41,11 +134,10 @@ ZeroTier Release Notes instance without appropriate local permissions. This issue is not remotely exploitable unless a remote user can read arbitrary local files, and does not impact other operating systems. - * Fix a bug in the handling of multiple IP address assignments to virtual interfaces on macOS. -# 2023-02-15 -- Version 1.10.3 +## 2023-02-15 -- Version 1.10.3 * Fix for duplicate paths in client. Could cause connectivity issues. Affects all platforms. * Fix for Ethernet Tap MTU setting, would not properly apply on Linux. @@ -57,7 +149,7 @@ ZeroTier Release Notes * Fix bug that prevented setting of custom TCP relay address. * Build script improvements and bug fixes. -# 2022-11-01 -- Version 1.10.2 +## 2022-11-01 -- Version 1.10.2 * Fix another SSO "stuck client" issue in zeroidc. * Expose root-reported external IP/port information via the local JSON API for better diagnostics. @@ -68,12 +160,12 @@ ZeroTier Release Notes Note that releases are coming few and far between because most of our dev effort is going into version 2. -# 2022-06-27 -- Version 1.10.1 +## 2022-06-27 -- Version 1.10.1 * Fix an issue that could cause SSO clients to get "stuck" on stale auth URLs. * A few other SSO related bug fixes. -# 2022-06-07 -- Version 1.10.0 +## 2022-06-07 -- Version 1.10.0 * Fix formatting problem in `zerotier-cli` when using SSO networks. * Fix a few other minor bugs in SSO signin to prepare for general availability. @@ -82,39 +174,39 @@ Note that releases are coming few and far between because most of our dev effort * Use system default browser for SSO login so all your plugins, MFA devices, password managers, etc. will work as you have them configured. * Minor fix for bonding/multipath. -# 2022-05-10 -- Version 1.8.10 +## 2022-05-10 -- Version 1.8.10 * Fixed a bug preventing SSO sign-on on Windows. -# 2022-04-25 -- Version 1.8.9 +## 2022-04-25 -- Version 1.8.9 * Fixed a long-standing and strange bug that was causing sporadic "phantom" packet authentication failures. Not a security problem but could be behind sporadic reports of link failures under some conditions. - * Fized a memory leak in SSO/OIDC support. + * Fixed a memory leak in SSO/OIDC support. * Fixed SSO/OIDC display error on CLI. * Fixed a bug causing nodes to sometimes fail to push certs to each other (primarily affects SSO/OIDC use cases). * Fixed a deadlock bug on leaving SSO/OIDC managed networks. * Added some new Linux distributions to the build subsystem. -# 2022-04-11 -- Version 1.8.8 +## 2022-04-11 -- Version 1.8.8 * Fix a local privilege escalation bug in the Windows installer. * Dependency fix for some Ubuntu versions. * No changes for other platforms. Windows upgrade recommended, everyone else optional. -# 2022-03-30 -- Version 1.8.7 +## 2022-03-30 -- Version 1.8.7 * Fix for dependency installations in Windows MSI package. * Fix for desktop UI setup when run by a non-super-user. * Bug fix in local OIDC / SSO support for auth0 and other providers. * Other minor fixes for e.g. old Linux distributions. -# 2022-03-04 -- Version 1.8.6 +## 2022-03-04 -- Version 1.8.6 * Fixed an issue that could cause the UI to be non-responsive if not joined to any networks. * Fix dependency issues in Debian and RedHat packages for some distributions (Fedora, Mint). * Bumped the peer cache serialization version to prevent "coma" issues on upgrade due to changes in path logic behaving badly with old values. -# 2022-02-22 -- Version 1.8.5 +## 2022-02-22 -- Version 1.8.5 * Plumbing under the hood for endpoint device SSO support. * Fix in LinuxEthernetTap to tap device support on very old (2.6) Linux kernels. @@ -122,7 +214,7 @@ Note that releases are coming few and far between because most of our dev effort * Merge a series of changes by Joseph Henry (of ZeroTier) that should fix some edge cases where ZeroTier would "forget" valid paths. * Minor multipath improvements for automatic path negotiation. -# 2021-11-30 -- Version 1.8.4 +## 2021-11-30 -- Version 1.8.4 * Fixed an ugly font problem on some older macOS versions. * Fixed a bug that could cause the desktop tray app control panel to stop opening after a while on Windows. @@ -130,7 +222,7 @@ Note that releases are coming few and far between because most of our dev effort * Fixed installation on 32-bit Windows 10. * Fixed a build flags issue that could cause ZeroTier to crash on older ARM32 CPUs. -# 2021-11-15 -- Version 1.8.3 +## 2021-11-15 -- Version 1.8.3 * Remove problematic spinlock, which was only used on x86_64 anyway. Just use pthread always. * Fix fd leak on MacOS that caused non-responsiveness after some time. @@ -138,14 +230,14 @@ Note that releases are coming few and far between because most of our dev effort * Fix regression that could prevent managed routes from being deleted. * DesktopUI: Remove NSDate:now() call, now works on MacOS 10.13 or newer! -# 2021-11-08 -- Version 1.8.2 +## 2021-11-08 -- Version 1.8.2 * Fix multicast on linux. * Fix a bug that could cause the tap adapter to have the wrong MAC on Linux. * Update build flags to possibly support MacOS older than 10.14, but more work needs to be done. It may not work yet. * Fix path variable setting on Windows. -# 2021-10-28 -- Version 1.8.1 +## 2021-10-28 -- Version 1.8.1 * Fix numerous UI issues from 1.8.0 (never fully released). * Remove support for REALLY ancient 1.1.6 or earlier network controllers. @@ -155,7 +247,7 @@ Note that releases are coming few and far between because most of our dev effort * NOTE: Windows 7 is no longer supported! Windows 7 users will have to use version 1.6.5 or earlier. -# 2021-09-15 -- Version 1.8.0 (preview release only) +## 2021-09-15 -- Version 1.8.0 (preview release only) * A *completely* rewritten desktop UI for Mac and Windows! * Implement a workaround for one potential source of a "coma" bug, which can occur if buggy NATs/routers stop allowing the service to communicate on a given port. ZeroTier now reassigns a new secondary port if it's offline for a while unless a secondary port is manually specified in local.conf. Working around crummy buggy routers is an ongoing effort. @@ -166,32 +258,32 @@ Note that releases are coming few and far between because most of our dev effort * Check if DNS servers need to be applied on macOS * Upgrade json.hpp dependency to version 3.10.2 -# 2021-09-21 -- Version 1.6.6 +## 2021-09-21 -- Version 1.6.6 * Backport COM hash check mitigation against network member impersonation. -# 2021-04-13 -- Version 1.6.5 +## 2021-04-13 -- Version 1.6.5 * Fix a bug in potential network path filtering that could in some circumstances lead to "software laser" effects. * Fix a printf overflow in zerotier-cli (not exploitable or a security risk) * Windows now looks up the name of ZeroTier devices instead of relying on them having "ZeroTier" in them. -# 2021-02-15 -- Version 1.6.4 +## 2021-02-15 -- Version 1.6.4 * The groundhog saw his shadow, which meant that the "connection coma" bug still wasn't gone. We think we found it this time. -# 2021-02-02 -- Version 1.6.3 +## 2021-02-02 -- Version 1.6.3 * Likely fix for GitHub issue #1334, an issue that could cause ZeroTier to go into a "coma" on some networks. * Also groundhog day -# 2020-11-30 -- Version 1.6.2 +## 2020-11-30 -- Version 1.6.2 * Fix an ARM hardware AES crypto issue (not an exploitable vulnerability). * Fix a Linux network leave hang due to a mutex deadlock. -# 2020-11-24 -- Version 1.6.1 +## 2020-11-24 -- Version 1.6.1 This release fixes some minor bugs and other issues in 1.6.0. @@ -201,7 +293,7 @@ This release fixes some minor bugs and other issues in 1.6.0. * Merged CLI options for controlling bonded devices into the beta multipath code. * Updated Windows driver with Microsoft cross-signing to fix issues on some Windows systems. -# 2020-11-19 -- Version 1.6.0 +## 2020-11-19 -- Version 1.6.0 Version 1.6.0 is a major release that incorporates back-ported features from the 2.0 branch, which is still under development. It also fixes a number of issues. @@ -242,7 +334,7 @@ Known issues that are not yet fixed in this beta: We're trying to fix all these issues before the 1.6.0 release. Stay tuned. -# 2019-08-30 -- Version 1.4.6 +## 2019-08-30 -- Version 1.4.6 * Update default root list to latest * ARM32 platform build and flag fixes @@ -251,19 +343,19 @@ We're trying to fix all these issues before the 1.6.0 release. Stay tuned. * Windows service now looks for service command line arguments * Fixed a bug that could cause excessive queued multicasts -# 2019-08-23 -- Version 1.4.4 +## 2019-08-23 -- Version 1.4.4 * Change license from GPL3 to BSL 1.1, see LICENSE.txt * Fix an issue with the "ipauth" rule and auto-generated unforgeable IPv6 addresses * Fix socket/bind errors setting IPs and routes on Linux -# 2019-08-12 -- Version 1.4.2 +## 2019-08-12 -- Version 1.4.2 * Fix high CPU use bug on some platforms * Fix issues with PostgreSQL controller DB (only affects Central) * Restore backward compatibility with MacOS versions prior to 10.13 -# 2019-07-29 -- Version 1.4.0 +## 2019-07-29 -- Version 1.4.0 ### Major Changes @@ -281,20 +373,20 @@ We're trying to fix all these issues before the 1.6.0 release. Stay tuned. * Fixed numerous other small issues and bugs such as ARM alignment issues causing crashes on some devices. * Windows now sets the adapter name such that it is consistent in both the Windows UI and command line utilities. -# 2018-07-27 -- Version 1.2.12 +## 2018-07-27 -- Version 1.2.12 * Fixed a bug that caused exits to take a long time on Mac due to huge numbers of redundant attempts to delete managed routes. * Fixed a socket limit problem on Windows that caused the ZeroTier service to run out of sockets, causing the UI and CLI to be unable to access the API. * Fixed a threading bug in the ZeroTier Core, albeit one that never manifested on the regular ZeroTier One service/client. * Fixed a bug that could cause the service to crash if an authorized local client accessed an invalid URL via the control API. (Not exploitable since you needed admin access anyway.) -# 2018-05-08 -- Version 1.2.10 +## 2018-05-08 -- Version 1.2.10 * Fix bug loading `moons.d/` files for federated root operation. * Fix compile problem with ZT_DEBUG on some versions of `clang` * Fix slow network startup bug related to loading of `networks.d/` cache files -# 2018-04-27 -- Version 1.2.8 +## 2018-04-27 -- Version 1.2.8 * Linux version once again builds with PIE (position independent executable) flags * Fixed bug in zerotier-idtool file sign and verify @@ -302,7 +394,7 @@ We're trying to fix all these issues before the 1.6.0 release. Stay tuned. * Merged alpha NetBSD support (mostly untested, so YMMV) * Merged several minor typo and one-liner bug fixes -# 2018-04-17 -- Version 1.2.6 +## 2018-04-17 -- Version 1.2.6 * Features and Core Improvements * Path selection has been overhauled to improve path stability, simplify code, and prepare for multi-path and trunking in the next major release. @@ -337,138 +429,22 @@ We're trying to fix all these issues before the 1.6.0 release. Stay tuned. * Multicast now works on Android in most cases! Android apps can send and receive multicast and subscribe to multicast group IPs. Note that in some cases the app must bind to the specific correct interface for this to work. * IPv6 can be disabled in UI for cases where it causes problems. -# 2017-04-20 -- Version 1.2.4 +## 2017-04-20 -- Version 1.2.4 * Managed routes are now only bifurcated for the default route. This is a change in behavior, though few people will probably notice. Bifurcating all managed routes was causing more trouble than it was worth for most users. - * Up to 2X crypto speedup on x86-64 (except Windows, which will take some porting) and 32-bit ARM platforms due to integration of fast assembly language implementations of Salsa20/12 from the [supercop](http://bench.cr.yp.to/supercop.html) code base. These were written by Daniel J. Bernstein and are in the public domain. My Macbook Pro (Core i5 2.8ghz) now does almost 1.5GiB/sec Salsa20/12 per core and a Raspberry Pi got a 2X boost. 64-bit ARM support and Windows support will take some work but should not be too hard. + * Up to 2X crypto speedup on x86-64 (except Windows, which will take some porting) and 32-bit ARM platforms due to integration of fast assembly language implementations of Salsa20/12 from the [supercop](http://bench.cr.yp.to/supercop.html) code base. These were written by Daniel J. Bernstein and are in the public domain. My MacBook Pro (Core i5 2.8ghz) now does almost 1.5GiB/sec Salsa20/12 per core and a Raspberry Pi got a 2X boost. 64-bit ARM support and Windows support will take some work but should not be too hard. * Refactored code that manages credentials to greatly reduce memory use in most cases. This may also result in a small performance improvement. * Reworked and simplified path selection and priority logic to fix path instability and dead path persistence edge cases. There have been some sporadic reports of persistent path instabilities and dead paths hanging around that take minutes to resolve. These have proven difficult to reproduce in house, but hopefully this will fix them. In any case it seems to speed up path establishment in our tests and it makes the code simpler and more readable. * Eliminated some unused cruft from the code around path management and in the peer class. * Fixed an issue causing build problems on some MIPS architecture systems. * Fixed Windows forgetting routes on sleep/wake or in some other circumstances. (GitHub issue #465) -# 2017-03-17 -- Version 1.2.2 +## 2017-03-17 -- Version 1.2.2 * A bug causing unreliable multicast propagation (GitHub issue #461). * A crash in ARM binaries due to a build chain and flags problem. * A bug in the network controller preventing members from being listed (GitHub issue #460). -# 2017-03-14 -- Version 1.2.0 +## 2017-03-14 -- Version 1.2.0 Version 1.2.0 is a major milestone release representing almost nine months of work. It includes our rules engine for distributed network packet filtering and security monitoring, federated roots, and many other architectural and UI improvements and bug fixes. - -## New Features in 1.2.0 - -### The ZeroTier Rules Engine - -The largest new feature in 1.2.0, and the product of many months of work, is our advanced network rules engine. With this release we achieve traffic control, security monitoring, and micro-segmentation capability on par with many enterprise SDN solutions designed for use in advanced data centers and corporate networks. - -Rules allow you to filter packets on your network and vector traffic to security observers. Security observation can be performed in-band using REDIRECT or out of band using TEE. - -Tags and capabilities provide advanced methods for implementing fine grained permission structures and micro-segmentation schemes without bloating the size and complexity of your rules table. - -See the [rules engine announcement blog post](https://www.zerotier.com/blog/?p=927) for an in-depth discussion of theory and implementation. The [manual](https://www.zerotier.com/manual.shtml) contains detailed information on rule, tag, and capability use, and the `rule-compiler/` subfolder of the ZeroTier source tree contains a JavaScript function to compile rules in our human-readable rule definition language into rules suitable for import into a network controller. (ZeroTier Central uses this same script to compile rules on [my.zerotier.com](https://my.zerotier.com/).) - -### Root Server Federation - -It's now possible to create your own root servers and add them to the root server pool on your nodes. This is done by creating what's called a "moon," which is a signed enumeration of root servers and their stable points on the network. Refer to the [manual](https://www.zerotier.com/manual.shtml) for instructions. - -Federated roots achieve a number of things: - - * You can deploy your own infrastructure to reduce dependency on ours. - * You can deploy roots *inside your LAN* to ensure that network connectivity inside your facility still works if the Internet goes down. This is the first step toward making ZeroTier viable as an in-house SDN solution. - * Roots can be deployed inside national boundaries for countries with data residency laws or "great firewalls." (As of 1.2.0 there is still no way to force all traffic to use these roots, but that will be easy to do in a later version.) - * Last but not least this makes ZeroTier somewhat less centralized by eliminating any hard dependency on ZeroTier, Inc.'s infrastructure. - -Our roots will of course remain and continue to provide zero-configuration instant-on deployment, a secure global authority for identities, and free traffic relaying for those who can't establish peer to peer connections. - -### Local Configuration - -An element of our design philosophy is "features are bugs." This isn't an absolute dogma but more of a guiding principle. We try as hard as we can to avoid adding features, especially "knobs" that must be tweaked by a user. - -As of 1.2.0 we've decided that certain knobs are unavoidable, and so there is now a `local.conf` file that can be used to configure them. See the ZeroTier One documentation for these. They include: - - * Blacklisting interfaces you want to make sure ZeroTier doesn't use for network traffic, such as VPNs, slow links, or backplanes designated for only certain kinds of traffic. - * Turning uPnP/NAT-PMP on or off. - * Configuring software updates on Windows and Mac platforms. - * Defining trusted paths (the old trusted paths file is now deprecated) - * Setting the ZeroTier main port so it doesn't have to be changed on the command line, which is very inconvenient in many cases. - -### Improved In-Band Software Updates - -A good software update system for Windows and Mac clients has been a missing feature in previous versions. It does exist but we've been shy about using it so far due to its fragility in some environments. - -We've greatly improved this mechanism in 1.2.0. Not only does it now do a better job of actually invoking the update, but it also transfers updates in-band using the ZeroTier protocol. This means it can work in environments that do not allows http/https traffic or that force it through proxies. There's also now an update channel setting: `beta` or `release` (the default). - -Software updates are authenticated three ways: - - 1. ZeroTier's own signing key is used to sign all updates and this signature is checked prior to installation. ZeroTier, Inc.'s signatures are performed on an air-gapped machine. - - 2. Updates for Mac and Windows are signed using Apple and Microsoft (DigiCert EV) keys and will not install unless these signatures are also valid. - - 3. The new in-band update mechanism also authenticates the source of the update via ZeroTier's built-in security features. This provides transport security, while 1 and 2 provide security of the update at rest. - -Updates are now configurable via `local.conf`. There are three options: `disable`, `download`, and `apply`. The third (apply) is the default for official builds on Windows and Mac, making updates happen silently and automatically as they do for popular browsers like Chrome and Firefox. Updates are disabled by default on Linux and other Unix-type systems as these are typically updated through package managers. - -### Path Link Quality Awareness - -Version 1.2.0 is now aware of the link quality of direct paths with other 1.2.0 nodes. This information isn't used yet but is visible through the JSON API. (Quality always shows as 100% with pre-1.2.0 nodes.) Quality is measured passively with no additional overhead using a counter based packet loss detection algorithm. - -This information is visible from the command line via `listpeers`: - - 200 listpeers XXXXXXXXXX 199.XXX.XXX.XXX/9993;10574;15250;1.00 48 1.2.0 LEAF - 200 listpeers XXXXXXXXXX 195.XXX.XXX.XXX/45584;467;7608;0.44 290 1.2.0 LEAF - -The first peer's path is at 100% (1.00), while the second peer's path is suffering quite a bit of packet loss (0.44). - -Link quality awareness is a precursor to intelligent multi-path and QoS support, which will in future versions bring us to feature parity with SD-WAN products like Cisco iWAN. - -### Security Improvements - -Version 1.2.0 adds anti-DOS (denial of service) rate limits and other hardening for improved resiliency against a number of denial of service attack scenarios. - -It also adds a mechanism for instantaneous credential revocation. This can be used to revoke certificates of membership instantly to kick a node off a network (for private networks) and also to revoke capabilities and tags. The new controller sends revocations by default when a peer is de-authorized. - -Revocations propagate using a "rumor mill" peer to peer algorithm. This means that a controller need only successfully send a revocation to at least one member of a network with connections to other active members. At this point the revocation will flood through the network peer to peer very quickly. This helps make revocations more robust in the face of poor connectivity with the controller or attempts to incapacitate the controller with denial of service attacks, as well as making revocations faster on huge networks. - -### Windows and Macintosh UI Improvements (ZeroTier One) - -The Mac has a whole new UI built natively in Objective-C. It provides a pulldown similar in appearance and operation to the Mac WiFi task bar menu. - -The Windows UI has also been improved and now provides a task bar icon that can be right-clicked to manage networks. Both now expose managed route and IP permissions, allowing nodes to easily opt in to full tunnel operation if you have a router configured on your network. - -### Ad-Hoc Networks - -A special kind of public network called an ad-hoc network may be accessed by joining a network ID with the format: - - ffSSSSEEEE000000 - | | | | - | | | Reserved for future use, must be 0 - | | End of port range (hex) - | Start of port range (hex) - Reserved ZeroTier address prefix indicating a controller-less network - -Ad-hoc networks are public (no access control) networks that have no network controller. Instead their configuration and other credentials are generated locally. Ad-hoc networks permit only IPv6 UDP and TCP unicast traffic (no multicast or broadcast) using 6plane format NDP-emulated IPv6 addresses. In addition an ad-hoc network ID encodes an IP port range. UDP packets and TCP SYN (connection open) packets are only allowed to destination ports within the encoded range. - -For example `ff00160016000000` is an ad-hoc network allowing only SSH, while `ff0000ffff000000` is an ad-hoc network allowing any UDP or TCP port. - -Keep in mind that these networks are public and anyone in the entire world can join them. Care must be taken to avoid exposing vulnerable services or sharing unwanted files or other resources. - -### Network Controller (Partial) Rewrite - -The network controller has been largely rewritten to use a simple in-filesystem JSON data store in place of SQLite, and it is now included by default in all Windows, Mac, Linux, and BSD builds. This means any desktop or server node running ZeroTier One can now be a controller with no recompilation needed. - -If you have data in an old SQLite3 controller we've included a NodeJS script in `controller/migrate-sqlite` to migrate data to the new format. If you don't migrate, members will start getting `NOT_FOUND` when they attempt to query for updates. - -## Major Bug Fixes in 1.2.0 - - * **The Windows HyperV 100% CPU bug is FINALLY DEAD**: This long-running problem turns out to have been an issue with Windows itself, but one we were triggering by placing invalid data into the Windows registry. Microsoft is aware of the issue but we've also fixed the triggering problem on our side. ZeroTier should now co-exist quite well with HyperV and should now be able to be bridged with a HyperV virtual switch. - * **Segmentation faults on musl-libc based Linux systems**: Alpine Linux and some embedded Linux systems that use musl libc (a minimal libc) experienced segmentation faults. These were due to a smaller default stack size. A work-around that sets the stack size for new threads has been added. - * **Windows firewall blocks local JSON API**: On some Windows systems the firewall likes to block 127.0.0.1:9993 for mysterious reasons. This is now fixed in the installer via the addition of another firewall exemption rule. - * **UI crash on embedded Windows due to missing fonts**: The MSI installer now ships fonts and will install them if they are not present, so this should be fixed. - -## Other Improvements in 1.2.0 - - * **Improved dead path detection**: ZeroTier is now more aggressive about expiring paths that do not seem to be active. If a path seems marginal it is re-confirmed before re-use. - * **Minor performance improvements**: We've reduced unnecessary memcpy's and made a few other performance improvements in the core. - * **Linux static binaries**: For our official packages (the ones in the download.zerotier.com apt and yum repositories) we now build Linux binaries with static linking. Hopefully this will stop all the bug reports relating to library inconsistencies, as well as allowing our deb packages to run on a wider variety of Debian-based distributions. (There are far too many of these to support officially!) The overhead for this is very small, especially since we built our static versions against musl-libc. Distribution maintainers are of course free to build dynamically linked versions for inclusion into distributions; this only affects our official binaries. diff --git a/zerotier-one/SECURITY.md b/zerotier-one/SECURITY.md index 9aba97de..ceecc3b5 100644 --- a/zerotier-one/SECURITY.md +++ b/zerotier-one/SECURITY.md @@ -1,17 +1,18 @@ # Security -ZeroTier takes the security of our software products and services seriously, which +ZeroTier takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organization. ## Supported Versions The following versions of ZeroTier One receive security updates -| Version | Supported | -| ------- | ------------------ | -| 1.10.x | :white_check_mark: | -| 1.8.x | :white_check_mark: | -| < 1.8.0 | :x: | +| Version | Supported | +| -------- | ------------------ | +| 1.16.x | :white_check_mark: | +| 1.14.x | :white_check_mark: | +| 1.12.x | :x: | +| < 1.12.0 | :x: | ## Reporting a Vulnerability @@ -20,10 +21,9 @@ The following versions of ZeroTier One receive security updates Instead, please report vulnerabilities via email to security@zerotier.com. If possible, please encrypt with our PGP key (see below). -Please include the following information, or as much as you can provide to help us +Please include the following information, or as much as you can provide to help us understand the nature and scope of the issue: - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) * Full paths of source file(s) related to the manifestation of the issue * The location of the affected source code (tag/branch/commit or direct URL) @@ -32,7 +32,6 @@ understand the nature and scope of the issue: * Proof-of-concept or exploit code (if possible) * Impact of the issue, including how an attacker might exploit the issue - ## Preferred Languages We prefer all communications to be in English. diff --git a/zerotier-one/attic/WinUI/APIHandler.cs b/zerotier-one/attic/WinUI/APIHandler.cs deleted file mode 100644 index 7192f3f2..00000000 --- a/zerotier-one/attic/WinUI/APIHandler.cs +++ /dev/null @@ -1,459 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Net; -using System.IO; -using System.Windows; -using Newtonsoft.Json; -using System.Diagnostics; -using System.Windows.Threading; - -namespace WinUI -{ - - - public class APIHandler - { - private string authtoken; - - private string url = null; - - private static volatile APIHandler instance; - private static object syncRoot = new Object(); - - public delegate void NetworkListCallback(List networks); - public delegate void StatusCallback(ZeroTierStatus status); - - private string ZeroTierAddress = ""; - - public static APIHandler Instance - { - get - { - if (instance == null) - { - lock (syncRoot) - { - if (instance == null) - { - if (!initHandler()) - { - return null; - } - } - } - } - - return instance; - } - } - - private static bool initHandler(bool resetToken = false) - { - String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One"; - String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One"; - - String authToken = ""; - Int32 port = 9993; - - if (resetToken) - { - instance = null; - if (File.Exists(localZtDir + "\\authtoken.secret")) - { - File.Delete(localZtDir + "\\authtoken.secret"); - } - - if (File.Exists(localZtDir + "\\zerotier-one.port")) - { - File.Delete(localZtDir + "\\zerotier-one.port"); - } - } - - if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port")) - { - // launch external process to copy file into place - String curPath = System.Reflection.Assembly.GetEntryAssembly().Location; - int index = curPath.LastIndexOf("\\"); - curPath = curPath.Substring(0, index); - ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", "\"" + globalZtDir + "\"" + " " + "\"" + localZtDir + "\""); - startInfo.Verb = "runas"; - - - var process = Process.Start(startInfo); - process.WaitForExit(); - } - - authToken = readAuthToken(localZtDir + "\\authtoken.secret"); - - if ((authToken == null) || (authToken.Length <= 0)) - { - MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One"); - return false; - } - - port = readPort(localZtDir + "\\zerotier-one.port"); - instance = new APIHandler(port, authToken); - return true; - } - - private static String readAuthToken(String path) - { - String authToken = ""; - - if (File.Exists(path)) - { - try - { - byte[] tmp = File.ReadAllBytes(path); - authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim(); - } - catch - { - MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One"); - } - } - - return authToken; - } - - private static Int32 readPort(String path) - { - Int32 port = 9993; - - try - { - byte[] tmp = File.ReadAllBytes(path); - port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim()); - if ((port <= 0) || (port > 65535)) - port = 9993; - } - catch - { - } - - return port; - } - - private APIHandler() - { - url = "http://127.0.0.1:9993"; - } - - public APIHandler(int port, string authtoken) - { - url = "http://127.0.0.1:" + port; - this.authtoken = authtoken; - } - - - - public void GetStatus(StatusCallback cb) - { - var request = WebRequest.Create(url + "/status" + "?auth=" + authtoken) as HttpWebRequest; - if (request != null) - { - request.Method = "GET"; - request.ContentType = "application/json"; - } - - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); - if (httpResponse.StatusCode == HttpStatusCode.OK) - { - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) - { - var responseText = streamReader.ReadToEnd(); - - ZeroTierStatus status = null; - try - { - status = JsonConvert.DeserializeObject(responseText); - - if (ZeroTierAddress != status.Address) - { - ZeroTierAddress = status.Address; - } - } - catch (JsonReaderException e) - { - Console.WriteLine(e.ToString()); - } - cb(status); - } - } - else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - } - catch (System.Net.Sockets.SocketException) - { - cb(null); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - else - { - cb(null); - } - } - } - - - - public void GetNetworks(NetworkListCallback cb) - { - var request = WebRequest.Create(url + "/network" + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - cb(null); - } - - request.Method = "GET"; - request.ContentType = "application/json"; - request.Timeout = 10000; - - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); - - if (httpResponse.StatusCode == HttpStatusCode.OK) - { - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) - { - var responseText = streamReader.ReadToEnd(); - - List networkList = null; - try - { - networkList = JsonConvert.DeserializeObject>(responseText); - foreach (ZeroTierNetwork n in networkList) - { - // all networks received via JSON are connected by definition - n.IsConnected = true; - } - } - catch (JsonReaderException e) - { - Console.WriteLine(e.ToString()); - } - cb(networkList); - } - } - else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - } - catch (System.Net.Sockets.SocketException) - { - cb(null); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - else - { - cb(null); - } - } - } - - public void JoinNetwork(Dispatcher d, string nwid, bool allowManaged = true, bool allowGlobal = false, bool allowDefault = false, bool allowDNS = false) - { - Task.Factory.StartNew(() => - { - var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - return; - } - - request.Method = "POST"; - request.ContentType = "applicaiton/json"; - request.Timeout = 30000; - try - { - using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream())) - { - string json = "{\"allowManaged\":" + (allowManaged ? "true" : "false") + "," + - "\"allowGlobal\":" + (allowGlobal ? "true" : "false") + "," + - "\"allowDefault\":" + (allowDefault ? "true" : "false") + "," + - "\"allowDNS\":" + (allowDNS ? "true" : "false") + "}"; - streamWriter.Write(json); - streamWriter.Flush(); - streamWriter.Close(); - } - } - catch (System.Net.WebException) - { - d.BeginInvoke(DispatcherPriority.Normal, new Action(() => - { - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - })); - return; - } - - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); - - if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - else if (httpResponse.StatusCode != HttpStatusCode.OK) - { - Console.WriteLine("Error sending join network message"); - } - } - catch (System.Net.Sockets.SocketException) - { - d.BeginInvoke(DispatcherPriority.Normal, new Action(() => - { - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - })); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - d.BeginInvoke(DispatcherPriority.Normal, new Action(() => - { - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - })); - } - }); - } - - public void LeaveNetwork(Dispatcher d, string nwid) - { - Task.Factory.StartNew(() => - { - var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - return; - } - - request.Method = "DELETE"; - request.Timeout = 30000; - - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); - - if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - else if (httpResponse.StatusCode != HttpStatusCode.OK) - { - Console.WriteLine("Error sending leave network message"); - } - } - catch (System.Net.Sockets.SocketException) - { - d.BeginInvoke(DispatcherPriority.Normal, new Action(() => - { - MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); - })); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - d.BeginInvoke(DispatcherPriority.Normal, new Action(() => - { - MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); - })); - } - catch - { - Console.WriteLine("Error leaving network: Unknown error"); - } - }); - } - - public delegate void PeersCallback(List peers); - - public void GetPeers(PeersCallback cb) - { - var request = WebRequest.Create(url + "/peer" + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - cb(null); - } - - request.Method = "GET"; - request.ContentType = "application/json"; - - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); - if (httpResponse.StatusCode == HttpStatusCode.OK) - { - using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) - { - var responseText = streamReader.ReadToEnd(); - //Console.WriteLine(responseText); - List peerList = null; - try - { - peerList = JsonConvert.DeserializeObject>(responseText); - } - catch (JsonReaderException e) - { - Console.WriteLine(e.ToString()); - } - cb(peerList); - } - } - else if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - } - catch (System.Net.Sockets.SocketException) - { - cb(null); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) - { - APIHandler.initHandler(true); - } - else - { - cb(null); - } - } - } - - public string NodeAddress() - { - return ZeroTierAddress; - } - } -} diff --git a/zerotier-one/attic/WinUI/AboutView.xaml b/zerotier-one/attic/WinUI/AboutView.xaml deleted file mode 100644 index 295d27bd..00000000 --- a/zerotier-one/attic/WinUI/AboutView.xaml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/zerotier-one/attic/WinUI/AboutView.xaml.cs b/zerotier-one/attic/WinUI/AboutView.xaml.cs deleted file mode 100644 index 9c48493d..00000000 --- a/zerotier-one/attic/WinUI/AboutView.xaml.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace WinUI -{ - /// - /// Interaction logic for AboutView.xaml - /// - public partial class AboutView : Window - { - public AboutView() - { - InitializeComponent(); - } - - private void Hyperlink_MouseLeftButtonDown(object sender, RequestNavigateEventArgs e) - { - var hyperlink = (Hyperlink)sender; - Process.Start(hyperlink.NavigateUri.ToString()); - } - } -} diff --git a/zerotier-one/attic/WinUI/App.config b/zerotier-one/attic/WinUI/App.config deleted file mode 100644 index 8e156463..00000000 --- a/zerotier-one/attic/WinUI/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/zerotier-one/attic/WinUI/App.xaml b/zerotier-one/attic/WinUI/App.xaml deleted file mode 100644 index 12ed85f9..00000000 --- a/zerotier-one/attic/WinUI/App.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/zerotier-one/attic/WinUI/App.xaml.cs b/zerotier-one/attic/WinUI/App.xaml.cs deleted file mode 100644 index 53ef2f67..00000000 --- a/zerotier-one/attic/WinUI/App.xaml.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; -using Hardcodet.Wpf.TaskbarNotification; - -namespace WinUI -{ - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application - { - private TaskbarIcon tb; - - private void InitApplication() - { - tb = (TaskbarIcon)FindResource("NotifyIcon"); - tb.Visibility = Visibility.Visible; - } - } -} diff --git a/zerotier-one/attic/WinUI/CentralAPI.cs b/zerotier-one/attic/WinUI/CentralAPI.cs deleted file mode 100644 index 22bdc697..00000000 --- a/zerotier-one/attic/WinUI/CentralAPI.cs +++ /dev/null @@ -1,256 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralAPI - { - private static volatile CentralAPI instance; - private static object syncRoot = new Object(); - - private CookieContainer cookieContainer; - private HttpClientHandler clientHandler; - private HttpClient client; - - private CentralServer server; - public CentralServer Central - { - get - { - return this.server; - } - set - { - this.server = value; - WriteCentralConfig(); - UpdateRequestHeaders(); - } - } - - public static CentralAPI Instance - { - get - { - if (instance == null) - { - lock (syncRoot) - { - if (instance == null) - { - instance = new CentralAPI(); - } - } - } - - return instance; - } - } - - - - private CentralAPI() - { -#if DEBUG - ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; -#endif - cookieContainer = new CookieContainer(); - clientHandler = new HttpClientHandler - { - AllowAutoRedirect = true, - UseCookies = true, - CookieContainer = cookieContainer - }; - - client = new HttpClient(clientHandler); - - string centralConfigPath = CentralConfigFile(); - if (File.Exists(centralConfigPath)) - { - byte[] tmp = File.ReadAllBytes(centralConfigPath); - string json = Encoding.UTF8.GetString(tmp).Trim(); - CentralServer ctmp = JsonConvert.DeserializeObject(json); - if (ctmp != null) - { - Central = ctmp; - } - else - { - Central = new CentralServer(); - } - } - else - { - Central = new CentralServer(); - } - } - - public bool HasAccessToken() - { - if (Central == null) - return false; - - return !string.IsNullOrEmpty(Central.APIKey); - } - - private string ZeroTierDir() - { - return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One"; - } - - private string CentralConfigFile() - { - return ZeroTierDir() + "\\central.conf"; - } - - public void WriteCentralConfig() - { - string json = JsonConvert.SerializeObject(Central); - byte[] tmp = Encoding.UTF8.GetBytes(json); - if (tmp != null) - { - File.WriteAllBytes(CentralConfigFile(), tmp); - } - } - - private void UpdateRequestHeaders() - { - if (client.DefaultRequestHeaders.Contains("Authorization")) - { - client.DefaultRequestHeaders.Remove("Authorization"); - } - - if (!string.IsNullOrEmpty(Central.APIKey)) - { - client.DefaultRequestHeaders.Add("Authorization", "bearer " + Central.APIKey); - } - } - - public async Task Login(string email, string password, bool isNewUser) - { - string postURL = Central.ServerURL + "/api/_auth/local"; - CentralLogin login = new CentralLogin(email, password, isNewUser); - var content = new StringContent(JsonConvert.SerializeObject(login), Encoding.UTF8, "application/json"); - HttpResponseMessage response = await client.PostAsync(postURL, content); - - if (!response.IsSuccessStatusCode) - { - return false; - } - - string resContent = await response.Content.ReadAsStringAsync(); - - CentralUser user = JsonConvert.DeserializeObject(resContent); - - if (user.Tokens.Count == 0) - { - // create token - user = await CreateAuthToken(user); - } - - Central.APIKey = user.Tokens[0]; - - UpdateRequestHeaders(); - WriteCentralConfig(); - - return true; - } - - public async Task CreateAuthToken(CentralUser user) - { - string randomTokenURL = Central.ServerURL + "/api/randomToken"; - HttpResponseMessage response = await client.GetAsync(randomTokenURL); - - if (!response.IsSuccessStatusCode) - { - // TODO: throw an error - return null; - } - - string resContent = await response.Content.ReadAsStringAsync(); - - CentralToken t = JsonConvert.DeserializeObject(resContent); - - user.Tokens.Add(t.Token); - - string tokenObj = "{ \"tokens\": " + JsonConvert.SerializeObject(user.Tokens) + " } "; - - string postURL = Central.ServerURL + "/api/user/" + user.Id; - var postContent = new StringContent(tokenObj, Encoding.UTF8, "application/json"); - response = await client.PostAsync(postURL, postContent); - - if (!response.IsSuccessStatusCode) - { - // TODO: thrown an error - return null; - } - - resContent = await response.Content.ReadAsStringAsync(); - user = JsonConvert.DeserializeObject(resContent); - - return user; - } - - public async Task> GetNetworkList() - { - string networkURL = Central.ServerURL + "/api/network"; - - HttpResponseMessage response = await client.GetAsync(networkURL); - - if (!response.IsSuccessStatusCode) - { - // TODO: Throw Error - return new List(); - } - - string resContent = await response.Content.ReadAsStringAsync(); - - List networkList = JsonConvert.DeserializeObject>(resContent); - - return networkList; - } - - public async Task CreateNewNetwork() - { - string networkURL = Central.ServerURL + "/api/network?easy=1"; - CentralNetwork network = new CentralNetwork(); - network.Config = new CentralNetwork.CentralNetworkConfig(); - network.Config.Name = NetworkNameGenerator.GenerateName(); - string jsonNetwork = JsonConvert.SerializeObject(network); - var postContent = new StringContent(jsonNetwork, Encoding.UTF8, "application/json"); - HttpResponseMessage response = await client.PostAsync(networkURL, postContent); - - if (!response.IsSuccessStatusCode) - { - return null; - } - - string resContent = await response.Content.ReadAsStringAsync(); - - CentralNetwork newNetwork = JsonConvert.DeserializeObject(resContent); - - return newNetwork; - } - - public async Task AuthorizeNode(string nodeAddress, string networkId) - { - string json = "{ \"config\": { \"authorized\": true } }"; - string postURL = Central.ServerURL + "/api/network/" + networkId + "/member/" + nodeAddress; - var postContent = new StringContent(json, Encoding.UTF8, "application/json"); - HttpResponseMessage response = await client.PostAsync(postURL, postContent); - - if (response.IsSuccessStatusCode) - { - return true; - } - - return false; - } - } -} diff --git a/zerotier-one/attic/WinUI/CentralLogin.cs b/zerotier-one/attic/WinUI/CentralLogin.cs deleted file mode 100644 index 97265dcf..00000000 --- a/zerotier-one/attic/WinUI/CentralLogin.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralLogin - { - - - public CentralLogin(string email, string password, bool isNew) - { - Login = email; - Password = password; - IsNew = isNew; - } - - [JsonProperty("login")] - public string Login { get; set; } - - [JsonProperty("password")] - public string Password { get; set; } - - [JsonProperty("register")] - public bool IsNew { get; set; } - } -} diff --git a/zerotier-one/attic/WinUI/CentralNetwork.cs b/zerotier-one/attic/WinUI/CentralNetwork.cs deleted file mode 100644 index 26ad5234..00000000 --- a/zerotier-one/attic/WinUI/CentralNetwork.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralNetwork - { - [JsonProperty("id")] - public string Id { get; set; } - - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("clock")] - public UInt64 Clock { get; set; } - - [JsonProperty("rulesSource")] - public string RulesSource { get; set; } - - [JsonProperty("description")] - public string Description { get; set; } - - [JsonProperty("ownerId")] - public string OwnerID { get; set; } - - [JsonProperty("onlineMemberCount")] - public int OnlineMemberCount { get; set; } - - [JsonProperty("config")] - public CentralNetworkConfig Config { get; set; } - - public class CentralNetworkConfig - { - [JsonProperty("id")] - public string Id { get; set; } - - [JsonProperty("nwid")] - public string NetworkID { get; set; } - - [JsonProperty("name")] - public string Name { get; set; } - } - } -} diff --git a/zerotier-one/attic/WinUI/CentralServer.cs b/zerotier-one/attic/WinUI/CentralServer.cs deleted file mode 100644 index 8e268653..00000000 --- a/zerotier-one/attic/WinUI/CentralServer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralServer - { - public CentralServer() - { - ServerURL = "https://my.zerotier.com"; - } - - [JsonProperty("server_url")] - public string ServerURL { get; set; } - - [JsonProperty("api_key")] - public string APIKey { get; set; } - } -} diff --git a/zerotier-one/attic/WinUI/CentralToken.cs b/zerotier-one/attic/WinUI/CentralToken.cs deleted file mode 100644 index 1db548aa..00000000 --- a/zerotier-one/attic/WinUI/CentralToken.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralToken - { - [JsonProperty("token")] - public string Token { get; set; } - - [JsonProperty("clock")] - public UInt64 Clock { get; set; } - - [JsonProperty("raw")] - public string Raw { get; set; } - } -} diff --git a/zerotier-one/attic/WinUI/CentralUser.cs b/zerotier-one/attic/WinUI/CentralUser.cs deleted file mode 100644 index 8a8945a2..00000000 --- a/zerotier-one/attic/WinUI/CentralUser.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace WinUI -{ - class CentralUser - { - public class CentralGlobalPermissions - { - [JsonProperty("a")] - public bool Administrator { get; set; } - - [JsonProperty("d")] - public bool Delete { get; set; } - - [JsonProperty("m")] - public bool Modify { get; set; } - - [JsonProperty("r")] - public bool Read { get; set; } - } - - [JsonProperty("id")] - public string Id { get; set; } - - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("clock")] - public UInt64 Clock { get; set; } - - [JsonProperty("globalPermissions")] - public CentralGlobalPermissions GlobalPermissions { get; set; } - - [JsonProperty("displayName")] - public string DisplayName { get; set; } - - [JsonProperty("email")] - public string Email { get; set; } - - [JsonProperty("smsNumber")] - public string SmsNumber { get; set; } - - [JsonProperty("tokens")] - public List Tokens { get; set; } - } -} diff --git a/zerotier-one/attic/WinUI/Fonts/segoeui.ttf b/zerotier-one/attic/WinUI/Fonts/segoeui.ttf deleted file mode 100644 index fc18ebd0ad42f4c1dc52fe87952224adc13695c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910308 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�eXKeWDgeYbjh{l69Be|10u`F}U!w>Suk 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�H7Dvvo-M&Xze#Hf(<~7&Ot}_&zzX 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
qneT*%=vC)>%*v$QuP1|_Trf)oKD{VZ= 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 A?f?J) diff --git a/zerotier-one/attic/WinUI/Fonts/segoeuii.ttf b/zerotier-one/attic/WinUI/Fonts/segoeuii.ttf deleted file mode 100644 index 7efb70d6046b00cf783283278fe938a7c805a8b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508344 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

^IG~9fc^yQICK)89wB6nq2KERK(lAQgxx{IA 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

^N9T7R*BJv)3-bd#9`2WFBSPw_x zy2yvv_aVNWLGPJUB7fui-`)`Uh}eEy3-5`1G8b$jpDq*mY@EpFC4i2z#Pw_d5TCQv zK)$ocKD!@I!d321a)5ZC%omejHS7T#`vQBuR3RFO!acFBU$Z4+i9%N6vZdIllpj z%lT7ql{>h|^BsA({Hs*t2KoOT3+v&!$j@T{yZ(bu|G6Y`vqj{;%3u;KhgP7R_6bl{w?Hhgb*R_C3OE2?iegeB z08#-Nrbd_#8(=pag$r;;6bEc@z(xmbcfdvmS*N*D*LVFw(74@6-LKVOVSB7p~Gt@V5iqda9I>@Z1GM9;_bZz(BXXwu8YDi<`o}e#TrrZL52@9e30QoynK$q zMNxPLwqhk7)>>Eun}9ZBJql+5Ilhh%4CwJCpD+1*vBUQyoCjj!=Lzvp0@&g=16IQx zI0H9D@kfR~w)jr~V(w4f_+zX81wcjsG6G_u2+$KS4OYNb*azqfKwkiPJ6jP? zSOB{LTS9&mCDa+>p$sO#YS;~*h!TdpFl-3JhA?ah!-gLt7vG{Rg!S9lwo zfFDJPa0T*2;9tZTpw1(SUnF%Hc}|olL{EC;v0?J=v+Ww^b*(s2StgAgbkv^ zmcUS$0oWPK@mOq%Jp(sHiKBcR<>M$HcT$x2Y&Z+}pWqCkkO}3`2-uyl4)y{v5`GpX zF#rkxy?E|WU|-H2AYU%!a$Dg`QM!4QNHeuD8rA6 zQtu5HMH#V6lm>x)qKu^M$P=P8Qb�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 fwTu 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

0BzR&o5fU>=|g&-AuH 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

GR>#1dv&+INqIjW_6}#&CGM2_kGcs1M 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%0AUx=cgmaIm!#c_Rqp4=~e!aNtvT#>SkfA|QOx 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

    C@-4%=#(7 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 z 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 sV54P2HTAQz@Xrp+tQ - - - - - - - - - - - - - - - - diff --git a/zerotier-one/attic/macui/ZeroTier One/Network.h b/zerotier-one/attic/macui/ZeroTier One/Network.h deleted file mode 100644 index c1cfbaf2..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/Network.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -enum NetworkStatus { - REQUESTING_CONFIGURATION, - OK, - ACCESS_DENIED, - NOT_FOUND, - PORT_ERROR, - CLIENT_TOO_OLD, -}; - -enum NetworkType { - PUBLIC, - PRIVATE, -}; - -@interface Network : NSObject - -@property (readonly) NSArray *assignedAddresses; -@property (readonly) BOOL bridge; -@property (readonly) BOOL broadcastEnabled; -@property (readonly) BOOL dhcp; -@property (readonly) NSString *mac; -@property (readonly) int mtu; -@property (readonly) int netconfRevision; -@property (readonly) NSString *name; -@property (readonly) UInt64 nwid; -@property (readonly) NSString *portDeviceName; -@property (readonly) int portError; -@property (readonly) enum NetworkStatus status; -@property (readonly) enum NetworkType type; -@property (readonly) BOOL allowManaged; -@property (readonly) BOOL allowGlobal; -@property (readonly) BOOL allowDefault; -@property (readonly) BOOL allowDNS; -@property (readonly) BOOL connected; // not persisted. set to YES if loaded via json - -- (id)initWithJsonData:(NSDictionary*)jsonData; -- (id)initWithCoder:(NSCoder *)aDecoder; -- (void)encodeWithCoder:(NSCoder *)aCoder; -+ (BOOL)defaultRouteExists:(NSArray*)netList; -- (NSString*)statusString; -- (NSString*)typeString; - -- (BOOL)hasSameNetworkId:(UInt64)networkId; - -- (BOOL)isEqualToNetwork:(Network*)network; -- (BOOL)isEqual:(id)object; -- (NSUInteger)hash; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/Network.m b/zerotier-one/attic/macui/ZeroTier One/Network.m deleted file mode 100644 index 2379eb69..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/Network.m +++ /dev/null @@ -1,352 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "Network.h" - -NSString *NetworkAddressesKey = @"addresses"; -NSString *NetworkBridgeKey = @"bridge"; -NSString *NetworkBroadcastKey = @"broadcast"; -NSString *NetworkDhcpKey = @"dhcp"; -NSString *NetworkMacKey = @"mac"; -NSString *NetworkMtuKey = @"mtu"; -NSString *NetworkMulticastKey = @"multicast"; -NSString *NetworkNameKey = @"name"; -NSString *NetworkNetconfKey = @"netconf"; -NSString *NetworkNwidKey = @"nwid"; -NSString *NetworkPortNameKey = @"port"; -NSString *NetworkPortErrorKey = @"portError"; -NSString *NetworkStatusKey = @"status"; -NSString *NetworkTypeKey = @"type"; -NSString *NetworkAllowManagedKey = @"allowManaged"; -NSString *NetworkAllowGlobalKey = @"allowGlobal"; -NSString *NetworkAllowDefaultKey = @"allowDefault"; -NSString *NetworkAllowDNSKey = @"allowDNS"; - -@implementation Network - -- (id)initWithJsonData:(NSDictionary*)jsonData -{ - self = [super init]; - - if(self) { - if([jsonData objectForKey:@"assignedAddresses"]) { - _assignedAddresses = (NSArray*)[jsonData objectForKey:@"assignedAddresses"]; - } - - if([jsonData objectForKey:@"bridge"]) { - _bridge = [(NSNumber*)[jsonData objectForKey:@"bridge"] boolValue]; - } - - if([jsonData objectForKey:@"broadcastEnabled"]) { - _broadcastEnabled = [(NSNumber*)[jsonData objectForKey:@"broadcastEnabled"] boolValue]; - } - - if([jsonData objectForKey:@"dhcp"]) { - _dhcp = [(NSNumber*)[jsonData objectForKey:@"dhcp"] boolValue]; - } - - if([jsonData objectForKey:@"mac"]) { - _mac = (NSString*)[jsonData objectForKey:@"mac"]; - } - - if([jsonData objectForKey:@"mtu"]) { - _mtu = [(NSNumber*)[jsonData objectForKey:@"mtu"] intValue]; - } - - if([jsonData objectForKey:@"name"]) { - _name = (NSString*)[jsonData objectForKey:@"name"]; - } - - if([jsonData objectForKey:@"netconfRevision"]) { - _netconfRevision = [(NSNumber*)[jsonData objectForKey:@"netconfRevision"] intValue]; - } - - if([jsonData objectForKey:@"nwid"]) { - NSString *networkid = (NSString*)[jsonData objectForKey:@"nwid"]; - - NSScanner *scanner = [NSScanner scannerWithString:networkid]; - [scanner scanHexLongLong:&_nwid]; - } - - if([jsonData objectForKey:@"portDeviceName"]) { - _portDeviceName = (NSString*)[jsonData objectForKey:@"portDeviceName"]; - } - - if([jsonData objectForKey:@"portError"]) { - _portError = [(NSNumber*)[jsonData objectForKey:@"portError"] intValue]; - } - - if([jsonData objectForKey:@"allowManaged"]) { - _allowManaged = [(NSNumber*)[jsonData objectForKey:@"allowManaged"] boolValue]; - } - - if([jsonData objectForKey:@"allowGlobal"]) { - _allowGlobal = [(NSNumber*)[jsonData objectForKey:@"allowGlobal"] boolValue]; - } - - if([jsonData objectForKey:@"allowDefault"]) { - _allowDefault = [(NSNumber*)[jsonData objectForKey:@"allowDefault"] boolValue]; - } - if([jsonData objectForKey:@"allowDNS"]) { - _allowDNS = [(NSNumber*)[jsonData objectForKey:@"allowDNS"] boolValue]; - } else { - _allowDNS = false; - } - - if([jsonData objectForKey:@"status"]) { - NSString *statusStr = (NSString*)[jsonData objectForKey:@"status"]; - if([statusStr isEqualToString:@"REQUESTING_CONFIGURATION"]) { - _status = REQUESTING_CONFIGURATION; - } - else if([statusStr isEqualToString:@"OK"]) { - _status = OK; - } - else if([statusStr isEqualToString:@"ACCESS_DENIED"]) { - _status = ACCESS_DENIED; - } - else if([statusStr isEqualToString:@"NOT_FOUND"]) { - _status = NOT_FOUND; - } - else if([statusStr isEqualToString:@"PORT_ERROR"]) { - _status = PORT_ERROR; - } - else if([statusStr isEqualToString:@"CLIENT_TOO_OLD"]) { - _status = CLIENT_TOO_OLD; - } - } - - if([jsonData objectForKey:@"type"]) { - NSString *typeStr = (NSString*)[jsonData objectForKey:@"type"]; - if([typeStr isEqualToString:@"PRIVATE"]) { - _type = PRIVATE; - } - else if([typeStr isEqualToString:@"PUBLIC"]) { - _type = PUBLIC; - } - } - - _connected = YES; - } - - return self; -} -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super init]; - - if(self) { - if([aDecoder containsValueForKey:NetworkAddressesKey]) { - _assignedAddresses = (NSArray*)[aDecoder decodeObjectForKey:NetworkAddressesKey]; - } - - if([aDecoder containsValueForKey:NetworkBridgeKey]) { - _bridge = [aDecoder decodeBoolForKey:NetworkBridgeKey]; - } - - if([aDecoder containsValueForKey:NetworkBroadcastKey]) { - _broadcastEnabled = [aDecoder decodeBoolForKey:NetworkBroadcastKey]; - } - - if([aDecoder containsValueForKey:NetworkDhcpKey]) { - _dhcp = [aDecoder decodeBoolForKey:NetworkDhcpKey]; - } - - if([aDecoder containsValueForKey:NetworkMacKey]) { - _mac = (NSString*)[aDecoder decodeObjectForKey:NetworkMacKey]; - } - - if([aDecoder containsValueForKey:NetworkMtuKey]) { - _mtu = (int)[aDecoder decodeIntegerForKey:NetworkMtuKey]; - } - - if([aDecoder containsValueForKey:NetworkNameKey]) { - _name = (NSString*)[aDecoder decodeObjectForKey:NetworkNameKey]; - } - - if([aDecoder containsValueForKey:NetworkNetconfKey]) { - _netconfRevision = (int)[aDecoder decodeIntegerForKey:NetworkNetconfKey]; - } - - if([aDecoder containsValueForKey:NetworkNwidKey]) { - _nwid = [(NSNumber*)[aDecoder decodeObjectForKey:NetworkNwidKey] unsignedLongLongValue]; - } - - if([aDecoder containsValueForKey:NetworkPortNameKey]) { - _portDeviceName = (NSString*)[aDecoder decodeObjectForKey:NetworkPortNameKey]; - } - - if([aDecoder containsValueForKey:NetworkPortErrorKey]) { - _portError = (int)[aDecoder decodeIntegerForKey:NetworkPortErrorKey]; - } - - if([aDecoder containsValueForKey:NetworkStatusKey]) { - _status = (enum NetworkStatus)[aDecoder decodeIntegerForKey:NetworkStatusKey]; - } - - if([aDecoder containsValueForKey:NetworkTypeKey]) { - _type = (enum NetworkType)[aDecoder decodeIntegerForKey:NetworkTypeKey]; - } - - if([aDecoder containsValueForKey:NetworkAllowManagedKey]) { - _allowManaged = [aDecoder decodeBoolForKey:NetworkAllowManagedKey]; - } - - if([aDecoder containsValueForKey:NetworkAllowGlobalKey]) { - _allowGlobal = [aDecoder decodeBoolForKey:NetworkAllowGlobalKey]; - } - - if([aDecoder containsValueForKey:NetworkAllowDefaultKey]) { - _allowDefault = [aDecoder decodeBoolForKey:NetworkAllowDefaultKey]; - } - - if([aDecoder containsValueForKey:NetworkAllowDNSKey]) { - _allowDNS = [aDecoder decodeBoolForKey:NetworkAllowDNSKey]; - } else { - _allowDNS = false; - } - - _connected = NO; - } - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder -{ - [aCoder encodeObject:_assignedAddresses forKey:NetworkAddressesKey]; - [aCoder encodeBool:_bridge forKey:NetworkBridgeKey]; - [aCoder encodeBool:_broadcastEnabled forKey:NetworkBroadcastKey]; - [aCoder encodeBool:_dhcp forKey:NetworkDhcpKey]; - [aCoder encodeObject:_mac forKey:NetworkMacKey]; - [aCoder encodeInteger:_mtu forKey:NetworkMtuKey]; - [aCoder encodeObject:_name forKey:NetworkNameKey]; - [aCoder encodeInteger:_netconfRevision forKey:NetworkNetconfKey]; - [aCoder encodeObject:[NSNumber numberWithUnsignedLongLong:_nwid] - forKey:NetworkNwidKey]; - [aCoder encodeObject:_portDeviceName forKey:NetworkPortNameKey]; - [aCoder encodeInteger:_portError forKey:NetworkPortErrorKey]; - [aCoder encodeInteger:_status forKey:NetworkStatusKey]; - [aCoder encodeInteger:_type forKey:NetworkTypeKey]; - [aCoder encodeBool:_allowManaged forKey:NetworkAllowManagedKey]; - [aCoder encodeBool:_allowGlobal forKey:NetworkAllowGlobalKey]; - [aCoder encodeBool:_allowDefault forKey:NetworkAllowDefaultKey]; - [aCoder encodeBool:_allowDNS forKey:NetworkAllowDNSKey]; -} - -+ (BOOL)defaultRouteExists:(NSArray*)netList -{ - for(Network *net in netList) { - if (net.allowDefault && net.connected) { - return YES; - } - } - return NO; -} - -- (NSString*)statusString { - switch(_status) { - case REQUESTING_CONFIGURATION: - return @"REQUESTING_CONFIGURATION"; - case OK: - return @"OK"; - case ACCESS_DENIED: - return @"ACCESS_DENIED"; - case NOT_FOUND: - return @"NOT_FOUND"; - case PORT_ERROR: - return @"PORT_ERROR"; - case CLIENT_TOO_OLD: - return @"CLIENT_TOO_OLD"; - default: - return @""; - } -} - -- (NSString*)typeString { - switch(_type) { - case PUBLIC: - return @"PUBLIC"; - case PRIVATE: - return @"PRIVATE"; - default: - return @""; - } -} - -- (BOOL)hasSameNetworkId:(UInt64)networkId -{ - return self.nwid == networkId; -} - -- (BOOL)isEqualToNetwork:(Network*)network -{ - return [self.assignedAddresses isEqualToArray:network.assignedAddresses] && - self.bridge == network.bridge && - self.broadcastEnabled == network.broadcastEnabled && - self.dhcp == network.dhcp && - [self.mac isEqualToString:network.mac] && - self.mtu == network.mtu && - self.netconfRevision == network.netconfRevision && - [self.name isEqualToString:network.name] && - self.nwid == network.nwid && - [self.portDeviceName isEqualToString:network.portDeviceName] && - self.status == network.status && - self.type == network.type && - self.allowManaged == network.allowManaged && - self.allowGlobal == network.allowGlobal && - self.allowDefault == network.allowDefault && - self.allowDNS == network.allowDNS && - self.connected == network.connected; -} - -- (BOOL)isEqual:(id)object -{ - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[Network class]]) { - return NO; - } - - return [self isEqualToNetwork:object]; -} - -- (NSUInteger)hash -{ - return [self.assignedAddresses hash] ^ - self.bridge ^ - self.broadcastEnabled ^ - self.dhcp ^ - [self.mac hash] ^ - self.mtu ^ - self.netconfRevision ^ - [self.name hash] ^ - self.nwid ^ - [self.portDeviceName hash] ^ - self.portError ^ - self.status ^ - self.type ^ - self.allowManaged ^ - self.allowGlobal ^ - self.allowDefault ^ - self.allowDNS ^ - self.connected; -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.h b/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.h deleted file mode 100644 index f764034e..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -@class ShowNetworksViewController; - -@interface NetworkInfoCell : NSTableCellView - -@property (weak, nonatomic) ShowNetworksViewController *parent; - -@property (weak, nonatomic) IBOutlet NSTextField *networkIdField; -@property (weak, nonatomic) IBOutlet NSTextField *networkNameField; -@property (weak, nonatomic) IBOutlet NSTextField *statusField; -@property (weak, nonatomic) IBOutlet NSTextField *typeField; -@property (weak, nonatomic) IBOutlet NSTextField *macField; -@property (weak, nonatomic) IBOutlet NSTextField *mtuField; -@property (weak, nonatomic) IBOutlet NSTextField *broadcastField; -@property (weak, nonatomic) IBOutlet NSTextField *bridgingField; -@property (weak, nonatomic) IBOutlet NSTextField *deviceField; -@property (weak, nonatomic) IBOutlet NSTextField *addressesField; -@property (weak, nonatomic) IBOutlet NSButton *allowManaged; -@property (weak, nonatomic) IBOutlet NSButton *allowGlobal; -@property (weak, nonatomic) IBOutlet NSButton *allowDefault; -@property (weak, nonatomic) IBOutlet NSButton *allowDNS; -@property (weak, nonatomic) IBOutlet NSButton *connectedCheckbox; -@property (weak, nonatomic) IBOutlet NSButton *deleteButton; - -- (IBAction)onConnectCheckStateChanged:(NSButton*)sender; -- (IBAction)deleteNetwork:(NSButton*)sender; -- (IBAction)onAllowStatusChanged:(NSButton*)sender; - -- (void)joinNetwork:(NSString*)nwid; -- (void)leaveNetwork:(NSString*)nwid; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.m b/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.m deleted file mode 100644 index df1bbf67..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NetworkInfoCell.m +++ /dev/null @@ -1,86 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "NetworkInfoCell.h" -#import "ServiceCom.h" -#import "ShowNetworksViewController.h" -#import "Network.h" - -@implementation NetworkInfoCell - -- (void)drawRect:(NSRect)dirtyRect { - [super drawRect:dirtyRect]; - - // Drawing code here. -} - -- (IBAction)onConnectCheckStateChanged:(NSButton*)sender -{ - if(sender.state == NSOnState) { - [self joinNetwork:self.networkIdField.stringValue]; - } - else { - [self leaveNetwork:self.networkIdField.stringValue]; - } -} - -- (IBAction)deleteNetwork:(NSButton*)sender; -{ - [self leaveNetwork:self.networkIdField.stringValue]; - [self.parent deleteNetworkFromList:self.networkIdField.stringValue]; -} - -- (IBAction)onAllowStatusChanged:(NSButton*)sender -{ - [self joinNetwork:self.networkIdField.stringValue]; -} - -- (void)joinNetwork:(NSString*)nwid -{ - NSError *error = nil; - [[ServiceCom sharedInstance] joinNetwork:nwid - allowManaged:(self.allowManaged.state == NSOnState) - allowGlobal:(self.allowGlobal.state == NSOnState) - allowDefault:![Network defaultRouteExists:_parent.networkList] && (self.allowDefault.state == NSOnState) - allowDNS:(self.allowDNS.state == NSOnState) - error:&error]; - - if (error) { - NSAlert *alert = [NSAlert alertWithError:error]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Ok"]; - - [alert runModal]; - } -} - -- (void)leaveNetwork:(NSString*)nwid -{ - NSError *error = nil; - [[ServiceCom sharedInstance] leaveNetwork:nwid error:&error]; - - if (error) { - NSAlert *alert = [NSAlert alertWithError:error]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Ok"]; - - [alert runModal]; - } -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.h b/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.h deleted file mode 100644 index 8cdec4ed..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -extern NSString * const NetworkUpdateKey; -extern NSString * const StatusUpdateKey; - -@class Network; - -@interface NetworkMonitor : NSObject -{ - NSMutableArray *_savedNetworks; - NSArray *_receivedNetworks; - NSMutableArray *_allNetworks; - - NSTimer *_timer; -} - -- (id)init; -- (void)dealloc; - -- (void)start; -- (void)stop; - -- (void)updateNetworkInfo; - -- (void)deleteSavedNetwork:(NSString*)networkId; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.m b/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.m deleted file mode 100644 index 7ed22c4a..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NetworkMonitor.m +++ /dev/null @@ -1,253 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "NetworkMonitor.h" -#import "Network.h" -#import "ServiceCom.h" -#import "NodeStatus.h" - -@import AppKit; - - -NSString * const NetworkUpdateKey = @"com.zerotier.one.network-list"; -NSString * const StatusUpdateKey = @"com.zerotier.one.status"; - -@interface NetworkMonitor (private) - -- (NSString*)dataFile; -- (void)internal_updateNetworkInfo; -- (NSInteger)findNetworkWithID:(UInt64)networkId; -- (NSInteger)findSavedNetworkWithID:(UInt64)networkId; -- (void)saveNetworks; - -@end - -@implementation NetworkMonitor - -- (id)init -{ - self = [super init]; - if(self) - { - _savedNetworks = [NSMutableArray array]; - _receivedNetworks = [NSArray array]; - _allNetworks = [NSMutableArray array]; - _timer = nil; - } - - return self; -} - -- (void)dealloc -{ - [_timer invalidate]; -} - -- (void)start -{ - NSLog(@"ZeroTier monitor started"); - _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f - target:self - selector:@selector(updateNetworkInfo) - userInfo:nil - repeats:YES]; -} - -- (void)stop -{ - NSLog(@"ZeroTier monitor stopped"); - [_timer invalidate]; - _timer = nil; -} - -- (void)updateNetworkInfo -{ - NSString *filePath = [self dataFile]; - - if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { - NSArray *networks = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - if(networks != nil) { - _savedNetworks = [networks mutableCopy]; - } - } - - NSError *error = nil; - - [[ServiceCom sharedInstance] getNetworklist:^(NSArray *networkList) { - _receivedNetworks = networkList; - - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - [self internal_updateNetworkInfo]; - } ]; - } error:&error]; - - if(error) { - [self stop]; - - NSAlert *alert = [NSAlert alertWithError:error]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res = [alert runModal]; - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - } - else if(res == NSAlertSecondButtonReturn) { - [self start]; - return; - } - } - - [[ServiceCom sharedInstance] getNodeStatus:^(NodeStatus *status) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:status forKey:@"status"]; - - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - [[NSNotificationCenter defaultCenter] postNotificationName:StatusUpdateKey - object:nil - userInfo:userInfo]; - }]; - } error:&error]; - - if (error) { - [self stop]; - - NSAlert *alert = [NSAlert alertWithError:error]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res = [alert runModal]; - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - } - else if(res == NSAlertSecondButtonReturn) { - [self start]; - return; - } - } -} - -- (void)deleteSavedNetwork:(NSString*)networkId -{ - UInt64 nwid = 0; - NSScanner *scanner = [NSScanner scannerWithString:networkId]; - [scanner scanHexLongLong:&nwid]; - - NSInteger index = [self findNetworkWithID:nwid]; - - if(index != NSNotFound) { - [_allNetworks removeObjectAtIndex:index]; - } - - index = [self findSavedNetworkWithID:nwid]; - - if(index != NSNotFound) { - [_savedNetworks removeObjectAtIndex:index]; - } - - [self saveNetworks]; -} - -@end - -@implementation NetworkMonitor (private) -- (NSString*)dataFile -{ - NSURL *appSupport = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory - inDomains:NSUserDomainMask] objectAtIndex:0]; - - appSupport = [[[appSupport URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"] URLByAppendingPathComponent:@"networkinfo.dat"]; - return appSupport.path; -} - -- (void)internal_updateNetworkInfo -{ - NSMutableArray *networks = [_savedNetworks mutableCopy]; - - for(Network *nw in _receivedNetworks) { - NSInteger index = [self findSavedNetworkWithID:nw.nwid]; - - if(index != NSNotFound) { - [networks setObject:nw atIndexedSubscript:index]; - } - else { - [networks addObject:nw]; - } - } - - [networks sortUsingComparator:^NSComparisonResult(Network *obj1, Network *obj2) { - if(obj1.nwid > obj2.nwid) { - return true; - } - return false; - }]; - - @synchronized(_allNetworks) { - _allNetworks = networks; - } - - [self saveNetworks]; - - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:networks forKey:@"networks"]; - - [[NSNotificationCenter defaultCenter] postNotificationName:NetworkUpdateKey - object:nil - userInfo:userInfo]; -} - -- (NSInteger)findNetworkWithID:(UInt64)networkId -{ - for(int i = 0; i < [_allNetworks count]; ++i) { - Network *nw = [_allNetworks objectAtIndex:i]; - - if(nw.nwid == networkId) { - return i; - } - } - - return NSNotFound; -} - - -- (NSInteger)findSavedNetworkWithID:(UInt64)networkId -{ - for(int i = 0; i < [_savedNetworks count]; ++i) { - Network *nw = [_savedNetworks objectAtIndex:i]; - - if(nw.nwid == networkId) { - return i; - } - } - - return NSNotFound; -} - -- (void)saveNetworks -{ - NSString *filePath = [self dataFile]; - - @synchronized(_allNetworks) { - [NSKeyedArchiver archiveRootObject:_allNetworks toFile:filePath]; - } -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NodeStatus.h b/zerotier-one/attic/macui/ZeroTier One/NodeStatus.h deleted file mode 100644 index eab5bfe4..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NodeStatus.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -@interface NodeStatus : NSObject - -@property (readonly) NSString *address; -@property (readonly) NSString *publicIdentity; -@property (readonly) BOOL online; -@property (readonly) BOOL tcpFallbackActive; -@property (readonly) int versionMajor; -@property (readonly) int versionMinor; -@property (readonly) int versionRev; -@property (readonly) NSString *version; -@property (readonly) UInt64 clock; - -- (id)initWithJsonData:(NSDictionary*)jsonData; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/NodeStatus.m b/zerotier-one/attic/macui/ZeroTier One/NodeStatus.m deleted file mode 100644 index 3bae3c7d..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/NodeStatus.m +++ /dev/null @@ -1,40 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#import "NodeStatus.h" - -@implementation NodeStatus - -- (id)initWithJsonData:(NSDictionary*)jsonData -{ - self = [super init]; - - if(self) { - _address = (NSString*)[jsonData objectForKey:@"address"]; - _publicIdentity = (NSString*)[jsonData objectForKey:@"publicIdentity"]; - _online = [(NSNumber*)[jsonData objectForKey:@"online"] boolValue]; - _tcpFallbackActive = [(NSNumber*)[jsonData objectForKey:@"tcpFallbackActive"] boolValue]; - _versionMajor = [(NSNumber*)[jsonData objectForKey:@"versionMajor"] intValue]; - _versionMinor = [(NSNumber*)[jsonData objectForKey:@"versionMinor"] intValue]; - _versionRev = [(NSNumber*)[jsonData objectForKey:@"versionRev"] intValue]; - _version = (NSString*)[jsonData objectForKey:@"version"]; - _clock = [(NSNumber*)[jsonData objectForKey:@"clock"] unsignedLongLongValue]; - } - - return self; -} -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.h b/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.h deleted file mode 100644 index 56d0fdb8..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -@interface PreferencesViewController : NSViewController - -@property (nonatomic, weak) IBOutlet NSButton *startupCheckBox; - -- (IBAction)onStartupCheckBoxChanged:(NSButton*)sender; - -- (BOOL)isLaunchAtStartup; -- (LSSharedFileListItemRef)itemRefInLoginItems; -- (void)setLaunchAtLoginEnabled:(BOOL)enabled; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.m b/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.m deleted file mode 100644 index 13927fba..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.m +++ /dev/null @@ -1,112 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "PreferencesViewController.h" - -@interface PreferencesViewController () - -@end - -@implementation PreferencesViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - if([self isLaunchAtStartup]) { - self.startupCheckBox.state = NSOnState; - } - else { - self.startupCheckBox.state = NSOffState; - } -} - -- (IBAction)onStartupCheckBoxChanged:(NSButton *)sender -{ - if(sender.state == NSOnState) { - [self setLaunchAtLoginEnabled:YES]; - } - else { - [self setLaunchAtLoginEnabled:NO]; - } - -} - -- (void)setLaunchAtLoginEnabled:(BOOL)enabled -{ - LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - - if (enabled) { - // Add the app to the LoginItems list. - CFURLRef appUrl = (__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; - LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL(loginItemsRef, kLSSharedFileListItemLast, NULL, NULL, appUrl, NULL, NULL); - if (itemRef) CFRelease(itemRef); - } - else { - // Remove the app from the LoginItems list. - LSSharedFileListItemRef itemRef = [self itemRefInLoginItems]; - LSSharedFileListItemRemove(loginItemsRef,itemRef); - if (itemRef != nil) CFRelease(itemRef); - } -} - - -- (BOOL)isLaunchAtStartup { - // See if the app is currently in LoginItems. - LSSharedFileListItemRef itemRef = [self itemRefInLoginItems]; - // Store away that boolean. - BOOL isInList = itemRef != nil; - // Release the reference if it exists. - if (itemRef != nil) CFRelease(itemRef); - - return isInList; -} - -- (LSSharedFileListItemRef)itemRefInLoginItems { - LSSharedFileListItemRef itemRef = nil; - - NSString * appPath = [[NSBundle mainBundle] bundlePath]; - - // This will retrieve the path for the application - // For example, /Applications/test.app - CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:appPath]; - - // Create a reference to the shared file list. - LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - - if (loginItems) { - UInt32 seedValue; - //Retrieve the list of Login Items and cast them to - // a NSArray so that it will be easier to iterate. - NSArray *loginItemsArray = (__bridge NSArray *)LSSharedFileListCopySnapshot(loginItems, &seedValue); - for(int i = 0; i< [loginItemsArray count]; i++){ - LSSharedFileListItemRef currentItemRef = (__bridge LSSharedFileListItemRef)[loginItemsArray - objectAtIndex:i]; - //Resolve the item with URL - if (LSSharedFileListItemResolve(currentItemRef, 0, (CFURLRef*) &url, NULL) == noErr) { - NSString * urlPath = [(__bridge NSURL*)url path]; - if ([urlPath compare:appPath] == NSOrderedSame){ - itemRef = currentItemRef; - } - } - } - } - CFRelease(loginItems); - return itemRef; -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.xib b/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.xib deleted file mode 100644 index 62aef4c0..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/PreferencesViewController.xib +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/zerotier-one/attic/macui/ZeroTier One/ServiceCom.h b/zerotier-one/attic/macui/ZeroTier One/ServiceCom.h deleted file mode 100644 index 17b738e4..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ServiceCom.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -@class NodeStatus; -@class Network; - -@interface ServiceCom : NSObject -{ - NSString *baseURL; - NSURLSession *session; - BOOL _isQuitting; - BOOL _resetKey; -} -+ (ServiceCom*)sharedInstance; - -- (id)init; - -- (void)getNetworklist:(void (^)(NSArray*))completionHandler error:(NSError* __autoreleasing *)error; -- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler error:(NSError*__autoreleasing*)error; -- (void)joinNetwork:(NSString*)networkId allowManaged:(BOOL)allowManaged allowGlobal:(BOOL)allowGlobal allowDefault:(BOOL)allowDefault allowDNS:(BOOL)allowDNS error:(NSError*__autoreleasing*)error; -- (void)leaveNetwork:(NSString*)networkId error:(NSError*__autoreleasing*)error; - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/ServiceCom.m b/zerotier-one/attic/macui/ZeroTier One/ServiceCom.m deleted file mode 100644 index 55d67741..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ServiceCom.m +++ /dev/null @@ -1,522 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "ServiceCom.h" -#import "AuthtokenCopy.h" -#import "Network.h" -#import "NodeStatus.h" -@import AppKit; - -@interface ServiceCom (Private) - -- (NSString*)key; - -@end - -@implementation ServiceCom - -+ (ServiceCom*)sharedInstance { - static ServiceCom *sc = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sc = [[ServiceCom alloc] init]; - }); - return sc; -} - -- (id)init -{ - self = [super init]; - if(self) { - baseURL = @"http://127.0.0.1:9993"; - session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - _isQuitting = NO; - _resetKey = NO; - } - - return self; -} - -- (NSString*)key:(NSError* __autoreleasing *)err -{ - static NSString *k = nil; - static NSUInteger resetCount = 0; - - @synchronized (self) { - if (_isQuitting) { - return @""; - } - - if (_resetKey && k != nil) { - k = nil; - ++resetCount; - NSLog(@"ResetCount: %lu", (unsigned long)resetCount); - if (resetCount > 10) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithMessageText:@"Error obtaining Auth Token" - defaultButton:@"Quit" - alternateButton:@"Retry" - otherButton:nil - informativeTextWithFormat:@"Please ensure ZeroTier is installed correctly"]; - alert.alertStyle = NSCriticalAlertStyle; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == 1) { - _isQuitting = YES; - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - } - }]; - return @""; - } - } - - if (k == nil) { - NSError *error = nil; - NSURL *appSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:false error:&error]; - - if (error) { - NSLog(@"Error: %@", error); - return @""; - } - - appSupportDir = [[appSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"]; - NSURL *authtokenURL = [appSupportDir URLByAppendingPathComponent:@"authtoken.secret"]; - - if (!_resetKey && [[NSFileManager defaultManager] fileExistsAtPath:[authtokenURL path]]) { - k = [NSString stringWithContentsOfURL:authtokenURL - encoding:NSUTF8StringEncoding - error:&error]; - - k = [k stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - - if (error) { - NSLog(@"Error: %@", error); - k = nil; - *err = error; - return @""; - } - } - else { - _resetKey = NO; - NSURL *sysAppSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSSystemDomainMask appropriateForURL:nil create:false error:nil]; - - sysAppSupportDir = [[sysAppSupportDir URLByAppendingPathComponent:@"ZeroTier"] URLByAppendingPathComponent:@"One"]; - NSURL *sysAuthtokenURL = [sysAppSupportDir URLByAppendingPathComponent:@"authtoken.secret"]; - - if(![[NSFileManager defaultManager] fileExistsAtPath:[sysAuthtokenURL path]]) { - - } - - [[NSFileManager defaultManager] createDirectoryAtURL:appSupportDir - withIntermediateDirectories:YES - attributes:nil - error:&error]; - - if (error) { - NSLog(@"Error: %@", error); - *err = error; - k = nil; - return @""; - } - - AuthorizationRef authRef; - OSStatus status = AuthorizationCreate(nil, nil, kAuthorizationFlagDefaults, &authRef); - - if (status != errAuthorizationSuccess) { - NSLog(@"Authorization Failed! %d", status); - - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't create AuthorizationRef", nil), - }; - *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo]; - - return @""; - } - - AuthorizationItem authItem; - authItem.name = kAuthorizationRightExecute; - authItem.valueLength = 0; - authItem.flags = 0; - - AuthorizationRights authRights; - authRights.count = 1; - authRights.items = &authItem; - - AuthorizationFlags authFlags = kAuthorizationFlagDefaults | - kAuthorizationFlagInteractionAllowed | - kAuthorizationFlagPreAuthorize | - kAuthorizationFlagExtendRights; - - status = AuthorizationCopyRights(authRef, &authRights, nil, authFlags, nil); - - if (status != errAuthorizationSuccess) { - NSLog(@"Authorization Failed! %d", status); - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't copy authorization rights", nil), - }; - *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo]; - return @""; - } - - NSString *localKey = getAdminAuthToken(authRef); - AuthorizationFree(authRef, kAuthorizationFlagDestroyRights); - - if (localKey != nil && [localKey lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > 0) { - k = localKey; - - [localKey writeToURL:authtokenURL - atomically:YES - encoding:NSUTF8StringEncoding - error:&error]; - - if (error) { - NSLog(@"Error writing token to disk: %@", error); - *err = error; - } - } - } - } - - if (k == nil) { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown error finding authorization key", nil), - }; - *err = [NSError errorWithDomain:@"com.zerotier.one" code:-1 userInfo:userInfo]; - - return @""; - } - } - return k; -} - -- (void)getNetworklist:(void (^)(NSArray *))completionHandler error:(NSError *__autoreleasing*)error -{ - NSString* key = [self key:error]; - if(*error) { - return; - } - - NSString *urlString = [[baseURL stringByAppendingString:@"/network?auth="] stringByAppendingString:key]; - - NSURL *url = [NSURL URLWithString:urlString]; - NSURLSessionDataTask *task = - [session dataTaskWithURL:url - completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - - if (err) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - _isQuitting = YES; - } - }]; - return; - } - - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; - NSInteger status = [httpResponse statusCode]; - - NSError *err2; - - if (status == 200) { - NSArray *json = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&err2]; - if (err) { - NSLog(@"Error fetching network list: %@", err2); - - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err2]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - _isQuitting = YES; - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - } - }]; - return; - } - - NSMutableArray *networks = [[NSMutableArray alloc] init]; - for(NSDictionary *dict in json) { - [networks addObject:[[Network alloc] initWithJsonData:dict]]; - } - - completionHandler(networks); - } - else if (status == 401) { - self->_resetKey = YES; - } - }]; - [task resume]; -} - -- (void)getNodeStatus:(void (^)(NodeStatus*))completionHandler error:(NSError*__autoreleasing*)error -{ - NSString *key = [self key:error]; - if(*error) { - return; - } - - NSString *urlString = [[baseURL stringByAppendingString:@"/status?auth="] stringByAppendingString:key]; - - NSURL *url = [NSURL URLWithString:urlString]; - NSURLSessionDataTask *task = - [session dataTaskWithURL:url - completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - - if(err) { - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - _isQuitting = YES; - } - }]; - return; - } - - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; - NSInteger status = [httpResponse statusCode]; - - NSError *err2; - if(status == 200) { - NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&err2]; - - if(err2) { - NSLog(@"Error fetching node status: %@", err2); - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err2]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - _isQuitting = YES; - } - }]; - return; - } - - NodeStatus *status = [[NodeStatus alloc] initWithJsonData:json]; - - completionHandler(status); - } - else if (status == 401) { - self->_resetKey = YES; - } - }]; - [task resume]; -} - -- (void)joinNetwork:(NSString*)networkId - allowManaged:(BOOL)allowManaged - allowGlobal:(BOOL)allowGlobal - allowDefault:(BOOL)allowDefault - allowDNS:(BOOL)allowDNS - error:(NSError *__autoreleasing*)error -{ - NSString *key = [self key:error]; - if(*error) { - return; - } - - NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] - stringByAppendingString:networkId] - stringByAppendingString:@"?auth="] - stringByAppendingString:key]; - - NSURL *url = [NSURL URLWithString:urlString]; - - NSMutableDictionary *jsonDict = [NSMutableDictionary dictionary]; - [jsonDict setObject:[NSNumber numberWithBool:allowManaged] forKey:@"allowManaged"]; - [jsonDict setObject:[NSNumber numberWithBool:allowGlobal] forKey:@"allowGlobal"]; - [jsonDict setObject:[NSNumber numberWithBool:allowDefault] forKey:@"allowDefault"]; - [jsonDict setObject:[NSNumber numberWithBool:allowDNS] forKey:@"allowDNS"]; - - NSError *err = nil; - - NSData *json = [NSJSONSerialization dataWithJSONObject:jsonDict - options:0 - error:&err]; - - if(err) { - NSLog(@"Error creating json data: %@", err); - *error = err; - return; - } - - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - request.HTTPMethod = @"POST"; - request.HTTPBody = json; - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; - - NSURLSessionDataTask *task = - [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - if(err) { - NSLog(@"Error posting join request: %@", err); - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - _isQuitting = YES; - } - }]; - } - - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; - NSInteger status = [httpResponse statusCode]; - - if(status == 200) { - NSLog(@"join ok"); - } - else if (status == 401) { - self->_resetKey = YES; - } - else { - NSLog(@"join error: %ld", (long)status); - } - }]; - [task resume]; -} - -- (void)leaveNetwork:(NSString*)networkId error:(NSError*__autoreleasing*)error -{ - NSString *key = [self key:error]; - if(*error) { - return; - } - - NSString *urlString = [[[[baseURL stringByAppendingString:@"/network/"] - stringByAppendingString:networkId] - stringByAppendingString:@"?auth="] - stringByAppendingString:key]; - - NSURL *url = [NSURL URLWithString:urlString]; - - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - request.HTTPMethod = @"DELETE"; - - NSURLSessionDataTask *task = - [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable err) { - if(err) { - NSLog(@"Error posting delete request: %@", err); - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - NSAlert *alert = [NSAlert alertWithError:err]; - alert.alertStyle = NSCriticalAlertStyle; - [alert addButtonWithTitle:@"Quit"]; - [alert addButtonWithTitle:@"Retry"]; - - NSModalResponse res; - if (!_isQuitting) { - res = [alert runModal]; - } - else { - return; - } - - if(res == NSAlertFirstButtonReturn) { - [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; - _isQuitting = YES; - } - }]; - return; - } - - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; - NSInteger status = httpResponse.statusCode; - - if(status == 200) { - NSLog(@"leave ok"); - } - else if (status == 401) { - self->_resetKey = YES; - } - else { - NSLog(@"leave error: %ld", status); - } - }]; - [task resume]; -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.h b/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.h deleted file mode 100644 index 6138958d..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -@class NetworkMonitor; -@class Network; - -@interface ShowNetworksViewController : NSViewController - -@property (nonatomic) NSMutableArray *networkList; -@property (nonatomic) NetworkMonitor *netMonitor; -@property (nonatomic) BOOL visible; - -@property (weak, nonatomic) IBOutlet NSTableView *tableView; - -- (void)deleteNetworkFromList:(NSString*)nwid; -- (void)setNetworks:(NSArray*)list; - - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.m b/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.m deleted file mode 100644 index acd29479..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.m +++ /dev/null @@ -1,184 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "ShowNetworksViewController.h" -#import "NetworkMonitor.h" -#import "NetworkInfoCell.h" -#import "Network.h" - -BOOL hasNetworkWithID(NSArray *list, UInt64 nwid) -{ - for(Network *n in list) { - if(n.nwid == nwid) { - return YES; - } - } - - return NO; -} - -@interface ShowNetworksViewController () - -@end - -@implementation ShowNetworksViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.networkList = [NSMutableArray array]; - - [self.tableView setDelegate:self]; - [self.tableView setDataSource:self]; - [self.tableView setBackgroundColor:[NSColor clearColor]]; -} - -- (void)viewWillAppear { - [super viewWillAppear]; - self.visible = YES; -} - -- (void)viewWillDisappear { - [super viewWillDisappear]; - self.visible = NO; -} - -- (NSInteger)findNetworkWithID:(UInt64)networkId -{ - for(int i = 0; i < [_networkList count]; ++i) { - Network *nw = [_networkList objectAtIndex:i]; - - if(nw.nwid == networkId) { - return i; - } - } - - return NSNotFound; -} - - -- (void)deleteNetworkFromList:(NSString *)nwid { - [self.netMonitor deleteSavedNetwork:nwid]; - - UInt64 netid = 0; - NSScanner *scanner = [NSScanner scannerWithString:nwid]; - [scanner scanHexLongLong:&netid]; - for (Network *n in _networkList) { - if (n.nwid == netid) { - NSInteger index = [self findNetworkWithID:netid]; - - if (index != NSNotFound) { - [_networkList removeObjectAtIndex:index]; - [_tableView reloadData]; - } - } - } -} - -- (void)setNetworks:(NSArray *)list { - for (Network *n in list) { - if ([_networkList containsObject:n]) { - // don't need to do anything here. Already an identical object in the list - continue; - } - else { - // network not in the list based on equality. Did an object change? or is it a new item? - if (hasNetworkWithID(_networkList, n.nwid)) { - - for (int i = 0; i < [_networkList count]; ++i) { - Network *n2 = [_networkList objectAtIndex:i]; - if (n.nwid == n2.nwid) - { - [_networkList replaceObjectAtIndex:i withObject:n]; - [_tableView reloadDataForRowIndexes:[NSIndexSet indexSetWithIndex:i] - columnIndexes:[NSIndexSet indexSetWithIndex:0]]; - } - } - } - else { - [_networkList addObject:n]; - [_tableView reloadData]; - } - } - } -} - -- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { - return [_networkList count]; -} - -- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row -{ - NetworkInfoCell *cell = (NetworkInfoCell*)[tableView makeViewWithIdentifier:@"NetworkInfoCell" - owner:nil]; - Network *network = [_networkList objectAtIndex:row]; - cell.parent = self; - cell.networkIdField.stringValue = [NSString stringWithFormat:@"%10llx", network.nwid]; - cell.networkNameField.stringValue = network.name; - cell.statusField.stringValue = [network statusString]; - cell.typeField.stringValue = [network typeString]; - cell.mtuField.stringValue = [NSString stringWithFormat:@"%d", network.mtu]; - cell.macField.stringValue = network.mac; - cell.broadcastField.stringValue = network.broadcastEnabled ? @"ENABLED" : @"DISABLED"; - cell.bridgingField.stringValue = network.bridge ? @"ENABLED" : @"DISABLED"; - cell.deviceField.stringValue = network.portDeviceName; - - if(network.connected) { - cell.connectedCheckbox.state = NSOnState; - - if(network.allowDefault) { - cell.allowDefault.enabled = YES; - cell.allowDefault.state = NSOnState; - } - else { - cell.allowDefault.state = NSOffState; - - if([Network defaultRouteExists:_networkList]) { - cell.allowDefault.enabled = NO; - } - else { - cell.allowDefault.enabled = YES; - } - } - - cell.allowGlobal.enabled = YES; - cell.allowManaged.enabled = YES; - cell.allowDNS.enabled = YES; - } - else { - cell.connectedCheckbox.state = NSOffState; - cell.allowDefault.enabled = NO; - cell.allowGlobal.enabled = NO; - cell.allowManaged.enabled = NO; - cell.allowDNS.enabled = NO; - } - - cell.allowGlobal.state = network.allowGlobal ? NSOnState : NSOffState; - cell.allowManaged.state = network.allowManaged ? NSOnState : NSOffState; - cell.allowDNS.state = network.allowDNS ? NSOnState : NSOffState; - - cell.addressesField.stringValue = @""; - - for(NSString *addr in network.assignedAddresses) { - cell.addressesField.stringValue = [[cell.addressesField.stringValue stringByAppendingString:addr] stringByAppendingString:@"\n"]; - } - - return cell; -} - -@end diff --git a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.xib b/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.xib deleted file mode 100644 index 485adb0c..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ShowNetworksViewController.xib +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/zerotier-one/attic/macui/ZeroTier One/ZeroTier One.entitlements b/zerotier-one/attic/macui/ZeroTier One/ZeroTier One.entitlements deleted file mode 100644 index 0c67376e..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/ZeroTier One.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/zerotier-one/attic/macui/ZeroTier One/ZeroTierIcon.icns b/zerotier-one/attic/macui/ZeroTier One/ZeroTierIcon.icns deleted file mode 100644 index 17e60d587da5167203d579a4468f4612fc403cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125598 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 diff --git a/zerotier-one/attic/macui/ZeroTier One/about.html b/zerotier-one/attic/macui/ZeroTier One/about.html deleted file mode 100644 index 09f6eb36..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/about.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - -

    -
    -

    Welcome to ZeroTier

    -

    Getting Started

    -

    Networks are identified by 16-digit network IDs. If someone invited you to join theirs you probably received one. If not you can create your own at my.zerotier.com or by running running your own network controller. -

    Your computer is identified by a 10-digit ZeroTier address. You can find it at the top of the ZeroTier app's pull-down menu or by typing "sudo zerotier-cli info" in a terminal window. This number is unique to your system and is how network administrators can recognize you. If someone invited you to a network, give them this ID so they can authorize you to join.

    -

    Starting, Stopping, and Uninstalling

    -

    The ZeroTier service is separate from the UI app and starts on system boot. The app can be started on login or only when needed. To stop the ZeroTier service use:

    -      sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist

    - Replace "unload" with "load" to start it again.

    -

    ZeroTier can be uninstalled with:

    -      sudo '/Library/Application Support/ZeroTier/One/uninstall.sh' -

    -

    For more information, visit zerotier.com.

    -
    - - \ No newline at end of file diff --git a/zerotier-one/attic/macui/ZeroTier One/main.m b/zerotier-one/attic/macui/ZeroTier One/main.m deleted file mode 100644 index 108a6bd1..00000000 --- a/zerotier-one/attic/macui/ZeroTier One/main.m +++ /dev/null @@ -1,23 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import - -int main(int argc, const char * argv[]) { - return NSApplicationMain(argc, argv); -} diff --git a/zerotier-one/attic/world/README.md b/zerotier-one/attic/world/README.md deleted file mode 100644 index dda4920a..00000000 --- a/zerotier-one/attic/world/README.md +++ /dev/null @@ -1,7 +0,0 @@ -World Definitions and Generator Code -====== - -This little bit of code is used to generate world updates. Ordinary users probably will never need this unless they want to test or experiment. - -See mkworld.cpp for documentation. To build from this directory use 'source ./build.sh'. - diff --git a/zerotier-one/attic/world/build.sh b/zerotier-one/attic/world/build.sh deleted file mode 100755 index f3bcfabc..00000000 --- a/zerotier-one/attic/world/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -c++ -std=c++11 -I../.. -I../../ext -I.. -g -o mkworld ../../node/C25519.cpp ../../node/Salsa20.cpp ../../node/SHA512.cpp ../../node/Identity.cpp ../../node/Utils.cpp ../../node/InetAddress.cpp ../../osdep/OSUtils.cpp mkworld.cpp -lm diff --git a/zerotier-one/attic/world/mkworld.cpp b/zerotier-one/attic/world/mkworld.cpp deleted file mode 100644 index 6b9bbe8d..00000000 --- a/zerotier-one/attic/world/mkworld.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2016 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* - * This utility makes the World from the configuration specified below. - * It probably won't be much use to anyone outside ZeroTier, Inc. except - * for testing and experimentation purposes. - * - * If you want to make your own World you must edit this file. - * - * When run, it expects two files in the current directory: - * - * previous.c25519 - key pair to sign this world (key from previous world) - * current.c25519 - key pair whose public key should be embedded in this world - * - * If these files do not exist, they are both created with the same key pair - * and a self-signed initial World is born. - */ - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -using namespace ZeroTier; - -int main(int argc,char **argv) -{ - std::string previous,current; - if ((!OSUtils::readFile("previous.c25519",previous))||(!OSUtils::readFile("current.c25519",current))) { - C25519::Pair np(C25519::generate()); - previous = std::string(); - previous.append((const char *)np.pub.data,ZT_C25519_PUBLIC_KEY_LEN); - previous.append((const char *)np.priv.data,ZT_C25519_PRIVATE_KEY_LEN); - current = previous; - OSUtils::writeFile("previous.c25519",previous); - OSUtils::writeFile("current.c25519",current); - fprintf(stderr,"INFO: created initial world keys: previous.c25519 and current.c25519 (both initially the same)" ZT_EOL_S); - } - - if ((previous.length() != (ZT_C25519_PUBLIC_KEY_LEN + ZT_C25519_PRIVATE_KEY_LEN))||(current.length() != (ZT_C25519_PUBLIC_KEY_LEN + ZT_C25519_PRIVATE_KEY_LEN))) { - fprintf(stderr,"FATAL: previous.c25519 or current.c25519 empty or invalid" ZT_EOL_S); - return 1; - } - C25519::Pair previousKP; - memcpy(previousKP.pub.data,previous.data(),ZT_C25519_PUBLIC_KEY_LEN); - memcpy(previousKP.priv.data,previous.data() + ZT_C25519_PUBLIC_KEY_LEN,ZT_C25519_PRIVATE_KEY_LEN); - C25519::Pair currentKP; - memcpy(currentKP.pub.data,current.data(),ZT_C25519_PUBLIC_KEY_LEN); - memcpy(currentKP.priv.data,current.data() + ZT_C25519_PUBLIC_KEY_LEN,ZT_C25519_PRIVATE_KEY_LEN); - - // ========================================================================= - // EDIT BELOW HERE - - std::vector roots; - - const uint64_t id = ZT_WORLD_ID_EARTH; - const uint64_t ts = 1567191349589ULL; // August 30th, 2019 - - // Los Angeles - roots.push_back(World::Root()); - roots.back().identity = Identity("3a46f1bf30:0:76e66fab33e28549a62ee2064d1843273c2c300ba45c3f20bef02dbad225723bb59a9bb4b13535730961aeecf5a163ace477cceb0727025b99ac14a5166a09a3"); - roots.back().stableEndpoints.push_back(InetAddress("185.180.13.82/9993")); - roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c815::/9993")); - - // Miami - roots.push_back(World::Root()); - roots.back().identity = Identity("de8950a8b2:0:1b3ada8251b91b6b6fa6535b8c7e2460918f4f729abdec97d3c7f3796868fb02f0de0b0ee554b2d59fc3524743eebfcf5315e790ed6d92db5bd10c28c09b40ef"); - roots.back().stableEndpoints.push_back(InetAddress("207.246.73.245/443")); - roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:9002:5cb:ec4:7aff:fe8f:69d9/443")); - - // Tokyo - roots.push_back(World::Root()); - roots.back().identity = Identity("34e0a5e174:0:93efb50934788f856d5cfb9ca5be88e85b40965586b75befac900df77352c145a1ba7007569d37c77bfe52c0999f3bdc67a47a4a6000b720a883ce47aa2fb7f8"); - roots.back().stableEndpoints.push_back(InetAddress("147.75.92.2/443")); - roots.back().stableEndpoints.push_back(InetAddress("2604:1380:3000:7100::1/443")); - - // Amsterdam - roots.push_back(World::Root()); - roots.back().identity = Identity("992fcf1db7:0:206ed59350b31916f749a1f85dffb3a8787dcbf83b8c6e9448d4e3ea0e3369301be716c3609344a9d1533850fb4460c50af43322bcfc8e13d3301a1f1003ceb6"); - roots.back().stableEndpoints.push_back(InetAddress("195.181.173.159/443")); - roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c024::/443")); - - // Alice - //roots.push_back(World::Root()); - //roots.back().identity = Identity("9d219039f3:0:01f0922a98e3b34ebcbff333269dc265d7a020aab69d72be4d4acc9c8c9294785771256cd1d942a90d1bd1d2dca3ea84ef7d85afe6611fb43ff0b74126d90a6e"); - //roots.back().stableEndpoints.push_back(InetAddress("188.166.94.177/9993")); // Amsterdam - //roots.back().stableEndpoints.push_back(InetAddress("2a03:b0c0:2:d0::7d:1/9993")); // Amsterdam - //roots.back().stableEndpoints.push_back(InetAddress("154.66.197.33/9993")); // Johannesburg - //roots.back().stableEndpoints.push_back(InetAddress("2c0f:f850:154:197::33/9993")); // Johannesburg - //roots.back().stableEndpoints.push_back(InetAddress("159.203.97.171/9993")); // New York - //roots.back().stableEndpoints.push_back(InetAddress("2604:a880:800:a1::54:6001/9993")); // New York - //roots.back().stableEndpoints.push_back(InetAddress("131.255.6.16/9993")); // Buenos Aires - //roots.back().stableEndpoints.push_back(InetAddress("2803:eb80:0:e::2/9993")); // Buenos Aires - //roots.back().stableEndpoints.push_back(InetAddress("107.170.197.14/9993")); // San Francisco - //roots.back().stableEndpoints.push_back(InetAddress("2604:a880:1:20::200:e001/9993")); // San Francisco - //roots.back().stableEndpoints.push_back(InetAddress("128.199.197.217/9993")); // Singapore - //roots.back().stableEndpoints.push_back(InetAddress("2400:6180:0:d0::b7:4001/9993")); // Singapore - - // Bob - //roots.push_back(World::Root()); - //roots.back().identity = Identity("8841408a2e:0:bb1d31f2c323e264e9e64172c1a74f77899555ed10751cd56e86405cde118d02dffe555d462ccf6a85b5631c12350c8d5dc409ba10b9025d0f445cf449d92b1c"); - //roots.back().stableEndpoints.push_back(InetAddress("45.32.198.130/9993")); // Dallas - //roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:6400:81c3:5400:00ff:fe18:1d61/9993")); // Dallas - //roots.back().stableEndpoints.push_back(InetAddress("46.101.160.249/9993")); // Frankfurt - //roots.back().stableEndpoints.push_back(InetAddress("2a03:b0c0:3:d0::6a:3001/9993")); // Frankfurt - //roots.back().stableEndpoints.push_back(InetAddress("107.191.46.210/9993")); // Paris - //roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:6800:83a4::64/9993")); // Paris - //roots.back().stableEndpoints.push_back(InetAddress("45.32.246.179/9993")); // Sydney - //roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:5800:8bf8:5400:ff:fe15:b39a/9993")); // Sydney - //roots.back().stableEndpoints.push_back(InetAddress("45.32.248.87/9993")); // Tokyo - //roots.back().stableEndpoints.push_back(InetAddress("2001:19f0:7000:9bc9:5400:00ff:fe15:c4f5/9993")); // Tokyo - //roots.back().stableEndpoints.push_back(InetAddress("159.203.2.154/9993")); // Toronto - //roots.back().stableEndpoints.push_back(InetAddress("2604:a880:cad:d0::26:7001/9993")); // Toronto - - // END WORLD DEFINITION - // ========================================================================= - - fprintf(stderr,"INFO: generating and signing id==%llu ts==%llu" ZT_EOL_S,(unsigned long long)id,(unsigned long long)ts); - - World nw = World::make(World::TYPE_PLANET,id,ts,currentKP.pub,roots,previousKP); - - Buffer outtmp; - nw.serialize(outtmp,false); - World testw; - testw.deserialize(outtmp,0); - if (testw != nw) { - fprintf(stderr,"FATAL: serialization test failed!" ZT_EOL_S); - return 1; - } - - OSUtils::writeFile("world.bin",std::string((const char *)outtmp.data(),outtmp.size())); - fprintf(stderr,"INFO: world.bin written with %u bytes of binary world data." ZT_EOL_S,outtmp.size()); - - fprintf(stdout,ZT_EOL_S); - fprintf(stdout,"#define ZT_DEFAULT_WORLD_LENGTH %u" ZT_EOL_S,outtmp.size()); - fprintf(stdout,"static const unsigned char ZT_DEFAULT_WORLD[ZT_DEFAULT_WORLD_LENGTH] = {"); - for(unsigned int i=0;i 0) - fprintf(stdout,","); - fprintf(stdout,"0x%.2x",(unsigned int)d[i]); - } - fprintf(stdout,"};" ZT_EOL_S); - - return 0; -} diff --git a/zerotier-one/attic/world/world.bin b/zerotier-one/attic/world/world.bin deleted file mode 100644 index 88049ccdc83167db4887d147d432c80e5102951b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%9S00000225mq)IuzEdXVj$;cS%8U9(jG8=TcQA1wyp}|Ye zuQ79arkS$)m(k77vAhI8L$5>w0Cv5- zqv&*ZY^{VBgqPDS$Gd8^9t;M{T%-RoI;u9(1Ug3Xzc2uH=5MPr;)O}3F5(7F7(*vK zEHDeCTt6Vb@GZL1C2~8pnwzw-H8pbyVXo};p<}G%cg*VtCjwiUtQ4gdY6+tN0tC6V z4N@lw1}Xw>pvV;f000000000004E9FiBPDr02?~mf>F5}Yj37gTa11rV3Chca+zv&r=oWknL@f+gs5LD8QRQ?*IY>&-O|60lNku z0U7X+0tL$s#Cre!k7?NfyENdX;dB6#@3jduc#nl`T>G4*zKG~sK$ca8w_ES5kPY{9 zQo%)`x^M?poj1pO{!+l1pF7-VqJBq$FdOF< z!(fv{snJt7Q2Rt+#R~K@BE0;L6Vosn9}ol1wg3VI!?mrS0lNk&0&bwdBme*a00000 I00001yS+X8wEzGB diff --git a/zerotier-one/attic/world/world.c b/zerotier-one/attic/world/world.c deleted file mode 100644 index ecf30e6f..00000000 --- a/zerotier-one/attic/world/world.c +++ /dev/null @@ -1,3 +0,0 @@ - -#define ZT_DEFAULT_WORLD_LENGTH 732 -static const unsigned char ZT_DEFAULT_WORLD[ZT_DEFAULT_WORLD_LENGTH] = {0x01,0x00,0x00,0x00,0x00,0x08,0xea,0xc9,0x0a,0x00,0x00,0x01,0x6b,0xd4,0x16,0x08,0xc1,0xb8,0xb3,0x88,0xa4,0x69,0x22,0x14,0x91,0xaa,0x9a,0xcd,0x66,0xcc,0x76,0x4c,0xde,0xfd,0x56,0x03,0x9f,0x10,0x67,0xae,0x15,0xe6,0x9c,0x6f,0xb4,0x2d,0x7b,0x55,0x33,0x0e,0x3f,0xda,0xac,0x52,0x9c,0x07,0x92,0xfd,0x73,0x40,0xa6,0xaa,0x21,0xab,0xa8,0xa4,0x89,0xfd,0xae,0xa4,0x4a,0x39,0xbf,0x2d,0x00,0x65,0x9a,0xc9,0xc8,0x18,0xeb,0x16,0x93,0xf4,0xe5,0xbd,0x20,0xda,0x10,0xad,0xc7,0x05,0xf4,0x99,0xfe,0x04,0x08,0x9b,0xe0,0x9e,0x77,0x1d,0x9f,0x47,0x16,0xaa,0x92,0x4f,0x10,0x16,0x3d,0xc7,0xec,0xd3,0x90,0x9e,0xd1,0x74,0xfc,0xb3,0xb5,0x07,0x9c,0x4d,0x95,0xc5,0x17,0x8b,0x3d,0x0b,0x60,0x76,0xe8,0x51,0xbb,0xb6,0x3d,0x74,0xb5,0x21,0x83,0x7b,0x95,0x1d,0x02,0x9b,0xcd,0xaf,0x5c,0x3e,0x96,0xdf,0x37,0x2c,0x56,0x6d,0xfa,0x75,0x0f,0xda,0x55,0x85,0x13,0xf4,0x76,0x1a,0x66,0x4d,0x3b,0x8d,0xcf,0x12,0xc9,0x34,0xb9,0x0d,0x61,0x03,0x3a,0x46,0xf1,0xbf,0x30,0x00,0x76,0xe6,0x6f,0xab,0x33,0xe2,0x85,0x49,0xa6,0x2e,0xe2,0x06,0x4d,0x18,0x43,0x27,0x3c,0x2c,0x30,0x0b,0xa4,0x5c,0x3f,0x20,0xbe,0xf0,0x2d,0xba,0xd2,0x25,0x72,0x3b,0xb5,0x9a,0x9b,0xb4,0xb1,0x35,0x35,0x73,0x09,0x61,0xae,0xec,0xf5,0xa1,0x63,0xac,0xe4,0x77,0xcc,0xeb,0x07,0x27,0x02,0x5b,0x99,0xac,0x14,0xa5,0x16,0x6a,0x09,0xa3,0x00,0x02,0x04,0xb9,0xb4,0x0d,0x52,0x27,0x09,0x06,0x2a,0x02,0x6e,0xa0,0xc8,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x09,0x9d,0x21,0x90,0x39,0xf3,0x00,0x01,0xf0,0x92,0x2a,0x98,0xe3,0xb3,0x4e,0xbc,0xbf,0xf3,0x33,0x26,0x9d,0xc2,0x65,0xd7,0xa0,0x20,0xaa,0xb6,0x9d,0x72,0xbe,0x4d,0x4a,0xcc,0x9c,0x8c,0x92,0x94,0x78,0x57,0x71,0x25,0x6c,0xd1,0xd9,0x42,0xa9,0x0d,0x1b,0xd1,0xd2,0xdc,0xa3,0xea,0x84,0xef,0x7d,0x85,0xaf,0xe6,0x61,0x1f,0xb4,0x3f,0xf0,0xb7,0x41,0x26,0xd9,0x0a,0x6e,0x00,0x0c,0x04,0xbc,0xa6,0x5e,0xb1,0x27,0x09,0x06,0x2a,0x03,0xb0,0xc0,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x7d,0x00,0x01,0x27,0x09,0x04,0x9a,0x42,0xc5,0x21,0x27,0x09,0x06,0x2c,0x0f,0xf8,0x50,0x01,0x54,0x01,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x27,0x09,0x04,0x9f,0xcb,0x61,0xab,0x27,0x09,0x06,0x26,0x04,0xa8,0x80,0x08,0x00,0x00,0xa1,0x00,0x00,0x00,0x00,0x00,0x54,0x60,0x01,0x27,0x09,0x04,0x83,0xff,0x06,0x10,0x27,0x09,0x06,0x28,0x03,0xeb,0x80,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x27,0x09,0x04,0x6b,0xaa,0xc5,0x0e,0x27,0x09,0x06,0x26,0x04,0xa8,0x80,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x02,0x00,0xe0,0x01,0x27,0x09,0x04,0x80,0xc7,0xc5,0xd9,0x27,0x09,0x06,0x24,0x00,0x61,0x80,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0xb7,0x40,0x01,0x27,0x09,0x88,0x41,0x40,0x8a,0x2e,0x00,0xbb,0x1d,0x31,0xf2,0xc3,0x23,0xe2,0x64,0xe9,0xe6,0x41,0x72,0xc1,0xa7,0x4f,0x77,0x89,0x95,0x55,0xed,0x10,0x75,0x1c,0xd5,0x6e,0x86,0x40,0x5c,0xde,0x11,0x8d,0x02,0xdf,0xfe,0x55,0x5d,0x46,0x2c,0xcf,0x6a,0x85,0xb5,0x63,0x1c,0x12,0x35,0x0c,0x8d,0x5d,0xc4,0x09,0xba,0x10,0xb9,0x02,0x5d,0x0f,0x44,0x5c,0xf4,0x49,0xd9,0x2b,0x1c,0x00,0x0c,0x04,0x2d,0x20,0xc6,0x82,0x27,0x09,0x06,0x20,0x01,0x19,0xf0,0x64,0x00,0x81,0xc3,0x54,0x00,0x00,0xff,0xfe,0x18,0x1d,0x61,0x27,0x09,0x04,0x2e,0x65,0xa0,0xf9,0x27,0x09,0x06,0x2a,0x03,0xb0,0xc0,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x6a,0x30,0x01,0x27,0x09,0x04,0x6b,0xbf,0x2e,0xd2,0x27,0x09,0x06,0x20,0x01,0x19,0xf0,0x68,0x00,0x83,0xa4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x27,0x09,0x04,0x2d,0x20,0xf6,0xb3,0x27,0x09,0x06,0x20,0x01,0x19,0xf0,0x58,0x00,0x8b,0xf8,0x54,0x00,0x00,0xff,0xfe,0x15,0xb3,0x9a,0x27,0x09,0x04,0x2d,0x20,0xf8,0x57,0x27,0x09,0x06,0x20,0x01,0x19,0xf0,0x70,0x00,0x9b,0xc9,0x54,0x00,0x00,0xff,0xfe,0x15,0xc4,0xf5,0x27,0x09,0x04,0x9f,0xcb,0x02,0x9a,0x27,0x09,0x06,0x26,0x04,0xa8,0x80,0x0c,0xad,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x26,0x70,0x01,0x27,0x09}; diff --git a/zerotier-one/controller/ConnectionPool.hpp b/zerotier-one/controller/ConnectionPool.hpp deleted file mode 100644 index 916f5356..00000000 --- a/zerotier-one/controller/ConnectionPool.hpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c)2021 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_CONNECTION_POOL_H_ -#define ZT_CONNECTION_POOL_H_ - - -#ifndef _DEBUG - #define _DEBUG(x) -#endif - -#include "../node/Metrics.hpp" - -#include -#include -#include -#include -#include -#include - -namespace ZeroTier { - -struct ConnectionUnavailable : std::exception { - char const* what() const throw() { - return "Unable to allocate connection"; - }; -}; - - -class Connection { -public: - virtual ~Connection() {}; -}; - -class ConnectionFactory { -public: - virtual ~ConnectionFactory() {}; - virtual std::shared_ptr create()=0; -}; - -struct ConnectionPoolStats { - size_t pool_size; - size_t borrowed_size; -}; - -template -class ConnectionPool { -public: - ConnectionPool(size_t max_pool_size, size_t min_pool_size, std::shared_ptr factory) - : m_maxPoolSize(max_pool_size) - , m_minPoolSize(min_pool_size) - , m_factory(factory) - { - Metrics::max_pool_size += max_pool_size; - Metrics::min_pool_size += min_pool_size; - while(m_pool.size() < m_minPoolSize){ - m_pool.push_back(m_factory->create()); - Metrics::pool_avail++; - } - }; - - ConnectionPoolStats get_stats() { - std::unique_lock lock(m_poolMutex); - - ConnectionPoolStats stats; - stats.pool_size = m_pool.size(); - stats.borrowed_size = m_borrowed.size(); - - return stats; - }; - - ~ConnectionPool() { - }; - - /** - * Borrow - * - * Borrow a connection for temporary use - * - * When done, either (a) call unborrow() to return it, or (b) (if it's bad) just let it go out of scope. This will cause it to automatically be replaced. - * @retval a shared_ptr to the connection object - */ - std::shared_ptr borrow() { - std::unique_lock l(m_poolMutex); - - while((m_pool.size() + m_borrowed.size()) < m_minPoolSize) { - std::shared_ptr conn = m_factory->create(); - m_pool.push_back(conn); - Metrics::pool_avail++; - } - - if(m_pool.size()==0){ - - if ((m_pool.size() + m_borrowed.size()) < m_maxPoolSize) { - try { - std::shared_ptr conn = m_factory->create(); - m_borrowed.insert(conn); - Metrics::pool_in_use++; - return std::static_pointer_cast(conn); - } catch (std::exception &e) { - Metrics::pool_errors++; - throw ConnectionUnavailable(); - } - } else { - for(auto it = m_borrowed.begin(); it != m_borrowed.end(); ++it){ - if((*it).unique()) { - // This connection has been abandoned! Destroy it and create a new connection - try { - // If we are able to create a new connection, return it - _DEBUG("Creating new connection to replace discarded connection"); - std::shared_ptr conn = m_factory->create(); - m_borrowed.erase(it); - m_borrowed.insert(conn); - return std::static_pointer_cast(conn); - } catch(std::exception& e) { - // Error creating a replacement connection - Metrics::pool_errors++; - throw ConnectionUnavailable(); - } - } - } - // Nothing available - Metrics::pool_errors++; - throw ConnectionUnavailable(); - } - } - - // Take one off the front - std::shared_ptr conn = m_pool.front(); - m_pool.pop_front(); - Metrics::pool_avail--; - // Add it to the borrowed list - m_borrowed.insert(conn); - Metrics::pool_in_use++; - return std::static_pointer_cast(conn); - }; - - /** - * Unborrow a connection - * - * Only call this if you are returning a working connection. If the connection was bad, just let it go out of scope (so the connection manager can replace it). - * @param the connection - */ - void unborrow(std::shared_ptr conn) { - // Lock - std::unique_lock lock(m_poolMutex); - m_borrowed.erase(conn); - Metrics::pool_in_use--; - if ((m_pool.size() + m_borrowed.size()) < m_maxPoolSize) { - Metrics::pool_avail++; - m_pool.push_back(conn); - } - }; -protected: - size_t m_maxPoolSize; - size_t m_minPoolSize; - std::shared_ptr m_factory; - std::deque > m_pool; - std::set > m_borrowed; - std::mutex m_poolMutex; -}; - -} - -#endif diff --git a/zerotier-one/controller/DB.cpp b/zerotier-one/controller/DB.cpp deleted file mode 100644 index b1c82014..00000000 --- a/zerotier-one/controller/DB.cpp +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "DB.hpp" -#include "EmbeddedNetworkController.hpp" -#include "../node/Metrics.hpp" - -#include -#include -#include - -using json = nlohmann::json; - -namespace ZeroTier { - -void DB::initNetwork(nlohmann::json &network) -{ - if (!network.count("private")) network["private"] = true; - if (!network.count("creationTime")) network["creationTime"] = OSUtils::now(); - if (!network.count("name")) network["name"] = ""; - if (!network.count("multicastLimit")) network["multicastLimit"] = (uint64_t)32; - if (!network.count("enableBroadcast")) network["enableBroadcast"] = true; - if (!network.count("v4AssignMode")) network["v4AssignMode"] = {{"zt",false}}; - if (!network.count("v6AssignMode")) network["v6AssignMode"] = {{"rfc4193",false},{"zt",false},{"6plane",false}}; - if (!network.count("authTokens")) network["authTokens"] = {{}}; - if (!network.count("capabilities")) network["capabilities"] = nlohmann::json::array(); - if (!network.count("tags")) network["tags"] = nlohmann::json::array(); - if (!network.count("routes")) network["routes"] = nlohmann::json::array(); - if (!network.count("ipAssignmentPools")) network["ipAssignmentPools"] = nlohmann::json::array(); - if (!network.count("mtu")) network["mtu"] = ZT_DEFAULT_MTU; - if (!network.count("remoteTraceTarget")) network["remoteTraceTarget"] = nlohmann::json(); - if (!network.count("removeTraceLevel")) network["remoteTraceLevel"] = 0; - if (!network.count("rulesSource")) network["rulesSource"] = ""; - if (!network.count("rules")) { - // If unspecified, rules are set to allow anything and behave like a flat L2 segment - network["rules"] = {{ - { "not",false }, - { "or", false }, - { "type","ACTION_ACCEPT" } - }}; - } - if (!network.count("dns")) network["dns"] = nlohmann::json::array(); - if (!network.count("ssoEnabled")) network["ssoEnabled"] = false; - if (!network.count("clientId")) network["clientId"] = ""; - if (!network.count("authorizationEndpoint")) network["authorizationEndpoint"] = ""; - - network["objtype"] = "network"; -} - -void DB::initMember(nlohmann::json &member) -{ - if (!member.count("authorized")) member["authorized"] = false; - if (!member.count("ssoExempt")) member["ssoExempt"] = false; - if (!member.count("ipAssignments")) member["ipAssignments"] = nlohmann::json::array(); - if (!member.count("activeBridge")) member["activeBridge"] = false; - if (!member.count("tags")) member["tags"] = nlohmann::json::array(); - if (!member.count("capabilities")) member["capabilities"] = nlohmann::json::array(); - if (!member.count("creationTime")) member["creationTime"] = OSUtils::now(); - if (!member.count("noAutoAssignIps")) member["noAutoAssignIps"] = false; - if (!member.count("revision")) member["revision"] = 0ULL; - if (!member.count("lastDeauthorizedTime")) member["lastDeauthorizedTime"] = 0ULL; - if (!member.count("lastAuthorizedTime")) member["lastAuthorizedTime"] = 0ULL; - if (!member.count("lastAuthorizedCredentialType")) member["lastAuthorizedCredentialType"] = nlohmann::json(); - if (!member.count("lastAuthorizedCredential")) member["lastAuthorizedCredential"] = nlohmann::json(); - if (!member.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = 0LL; - if (!member.count("vMajor")) member["vMajor"] = -1; - if (!member.count("vMinor")) member["vMinor"] = -1; - if (!member.count("vRev")) member["vRev"] = -1; - if (!member.count("vProto")) member["vProto"] = -1; - if (!member.count("remoteTraceTarget")) member["remoteTraceTarget"] = nlohmann::json(); - if (!member.count("removeTraceLevel")) member["remoteTraceLevel"] = 0; - member["objtype"] = "member"; -} - -void DB::cleanNetwork(nlohmann::json &network) -{ - network.erase("clock"); - network.erase("authorizedMemberCount"); - network.erase("activeMemberCount"); - network.erase("totalMemberCount"); - network.erase("lastModified"); -} - -void DB::cleanMember(nlohmann::json &member) -{ - member.erase("clock"); - member.erase("physicalAddr"); - member.erase("recentLog"); - member.erase("lastModified"); - member.erase("lastRequestMetaData"); - member.erase("authenticationURL"); // computed - member.erase("authenticationClientID"); // computed -} - -DB::DB() {} -DB::~DB() {} - -bool DB::get(const uint64_t networkId,nlohmann::json &network) -{ - waitForReady(); - Metrics::db_get_network++; - std::shared_ptr<_Network> nw; - { - std::shared_lock l(_networks_l); - auto nwi = _networks.find(networkId); - if (nwi == _networks.end()) - return false; - nw = nwi->second; - } - { - std::shared_lock l2(nw->lock); - network = nw->config; - } - return true; -} - -bool DB::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member) -{ - waitForReady(); - Metrics::db_get_network_and_member++; - std::shared_ptr<_Network> nw; - { - std::shared_lock l(_networks_l); - auto nwi = _networks.find(networkId); - if (nwi == _networks.end()) - return false; - nw = nwi->second; - } - { - std::shared_lock l2(nw->lock); - network = nw->config; - auto m = nw->members.find(memberId); - if (m == nw->members.end()) - return false; - member = m->second; - } - return true; -} - -bool DB::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member,NetworkSummaryInfo &info) -{ - waitForReady(); - Metrics::db_get_network_and_member_and_summary++; - std::shared_ptr<_Network> nw; - { - std::shared_lock l(_networks_l); - auto nwi = _networks.find(networkId); - if (nwi == _networks.end()) - return false; - nw = nwi->second; - } - { - std::shared_lock l2(nw->lock); - network = nw->config; - _fillSummaryInfo(nw,info); - auto m = nw->members.find(memberId); - if (m == nw->members.end()) - return false; - member = m->second; - } - return true; -} - -bool DB::get(const uint64_t networkId,nlohmann::json &network,std::vector &members) -{ - waitForReady(); - Metrics::db_get_member_list++; - std::shared_ptr<_Network> nw; - { - std::shared_lock l(_networks_l); - auto nwi = _networks.find(networkId); - if (nwi == _networks.end()) - return false; - nw = nwi->second; - } - { - std::shared_lock l2(nw->lock); - network = nw->config; - for(auto m=nw->members.begin();m!=nw->members.end();++m) { - members.push_back(m->second); - } - } - return true; -} - -void DB::networks(std::set &networks) -{ - waitForReady(); - Metrics::db_get_member_list++; - std::shared_lock l(_networks_l); - for(auto n=_networks.begin();n!=_networks.end();++n) - networks.insert(n->first); -} - -void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) -{ - Metrics::db_member_change++; - uint64_t memberId = 0; - uint64_t networkId = 0; - bool isAuth = false; - bool wasAuth = false; - std::shared_ptr<_Network> nw; - - if (old.is_object()) { - memberId = OSUtils::jsonIntHex(old["id"],0ULL); - networkId = OSUtils::jsonIntHex(old["nwid"],0ULL); - if ((memberId)&&(networkId)) { - { - std::unique_lock l(_networks_l); - auto nw2 = _networks.find(networkId); - if (nw2 != _networks.end()) { - nw = nw2->second; - } - } - if (nw) { - std::unique_lock l(nw->lock); - if (OSUtils::jsonBool(old["activeBridge"],false)) { - nw->activeBridgeMembers.erase(memberId); - } - wasAuth = OSUtils::jsonBool(old["authorized"],false); - if (wasAuth) { - nw->authorizedMembers.erase(memberId); - } - json &ips = old["ipAssignments"]; - if (ips.is_array()) { - for(unsigned long i=0;iallocatedIps.erase(ipa); - } - } - } - } - } - } - - if (memberConfig.is_object()) { - if (!nw) { - memberId = OSUtils::jsonIntHex(memberConfig["id"],0ULL); - networkId = OSUtils::jsonIntHex(memberConfig["nwid"],0ULL); - if ((!memberId)||(!networkId)) - return; - std::unique_lock l(_networks_l); - std::shared_ptr<_Network> &nw2 = _networks[networkId]; - if (!nw2) - nw2.reset(new _Network); - nw = nw2; - } - - { - std::unique_lock l(nw->lock); - - nw->members[memberId] = memberConfig; - - if (OSUtils::jsonBool(memberConfig["activeBridge"],false)) { - nw->activeBridgeMembers.insert(memberId); - } - isAuth = OSUtils::jsonBool(memberConfig["authorized"],false); - if (isAuth) { - Metrics::member_auths++; - nw->authorizedMembers.insert(memberId); - } - json &ips = memberConfig["ipAssignments"]; - if (ips.is_array()) { - for(unsigned long i=0;iallocatedIps.insert(ipa); - } - } - } - - if (!isAuth) { - const int64_t ldt = (int64_t)OSUtils::jsonInt(memberConfig["lastDeauthorizedTime"],0ULL); - if (ldt > nw->mostRecentDeauthTime) - nw->mostRecentDeauthTime = ldt; - } - } - - if (notifyListeners) { - std::unique_lock ll(_changeListeners_l); - for(auto i=_changeListeners.begin();i!=_changeListeners.end();++i) { - (*i)->onNetworkMemberUpdate(this,networkId,memberId,memberConfig); - } - } - } else if (memberId) { - if (nw) { - std::unique_lock l(nw->lock); - nw->members.erase(memberId); - } - if (networkId) { - std::unique_lock l(_networks_l); - auto er = _networkByMember.equal_range(memberId); - for(auto i=er.first;i!=er.second;++i) { - if (i->second == networkId) { - _networkByMember.erase(i); - break; - } - } - } - } - - if (notifyListeners) { - if(networkId != 0 && memberId != 0 && old.is_object() && !memberConfig.is_object()) { - // member delete - Metrics::member_count--; - } else if (networkId != 0 && memberId != 0 && !old.is_object() && memberConfig.is_object()) { - // new member - Metrics::member_count++; - } - - if (!wasAuth && isAuth) { - Metrics::member_auths++; - } else if (wasAuth && !isAuth) { - Metrics::member_deauths++; - } else { - Metrics::member_changes++; - } - } - - if ((notifyListeners)&&((wasAuth)&&(!isAuth)&&(networkId)&&(memberId))) { - std::unique_lock ll(_changeListeners_l); - for(auto i=_changeListeners.begin();i!=_changeListeners.end();++i) { - (*i)->onNetworkMemberDeauthorize(this,networkId,memberId); - } - } -} - -void DB::_networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners) -{ - Metrics::db_network_change++; - if (notifyListeners) { - if (old.is_object() && old.contains("id") && networkConfig.is_object() && networkConfig.contains("id")) { - Metrics::network_changes++; - } else if (!old.is_object() && networkConfig.is_object() && networkConfig.contains("id")) { - Metrics::network_count++; - } else if (old.is_object() && old.contains("id") && !networkConfig.is_object()) { - Metrics::network_count--; - } - } - - if (networkConfig.is_object()) { - const std::string ids = networkConfig["id"]; - const uint64_t networkId = Utils::hexStrToU64(ids.c_str()); - if (networkId) { - std::shared_ptr<_Network> nw; - { - std::unique_lock l(_networks_l); - std::shared_ptr<_Network> &nw2 = _networks[networkId]; - if (!nw2) - nw2.reset(new _Network); - nw = nw2; - } - { - std::unique_lock l2(nw->lock); - nw->config = networkConfig; - } - if (notifyListeners) { - std::unique_lock ll(_changeListeners_l); - for(auto i=_changeListeners.begin();i!=_changeListeners.end();++i) { - (*i)->onNetworkUpdate(this,networkId,networkConfig); - } - } - } - } else if (old.is_object()) { - const std::string ids = old["id"]; - const uint64_t networkId = Utils::hexStrToU64(ids.c_str()); - if (networkId) { - std::unique_lock l(_networks_l); - _networks.erase(networkId); - } - } -} - -void DB::_fillSummaryInfo(const std::shared_ptr<_Network> &nw,NetworkSummaryInfo &info) -{ - for(auto ab=nw->activeBridgeMembers.begin();ab!=nw->activeBridgeMembers.end();++ab) - info.activeBridges.push_back(Address(*ab)); - std::sort(info.activeBridges.begin(),info.activeBridges.end()); - for(auto ip=nw->allocatedIps.begin();ip!=nw->allocatedIps.end();++ip) - info.allocatedIps.push_back(*ip); - std::sort(info.allocatedIps.begin(),info.allocatedIps.end()); - info.authorizedMemberCount = (unsigned long)nw->authorizedMembers.size(); - info.totalMemberCount = (unsigned long)nw->members.size(); - info.mostRecentDeauthTime = nw->mostRecentDeauthTime; -} - -} // namespace ZeroTier diff --git a/zerotier-one/controller/DB.hpp b/zerotier-one/controller/DB.hpp deleted file mode 100644 index 89610f7c..00000000 --- a/zerotier-one/controller/DB.hpp +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_CONTROLLER_DB_HPP -#define ZT_CONTROLLER_DB_HPP - -//#define ZT_CONTROLLER_USE_LIBPQ - -#include "../node/Constants.hpp" -#include "../node/Identity.hpp" -#include "../node/InetAddress.hpp" -#include "../osdep/OSUtils.hpp" -#include "../osdep/BlockingQueue.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#define ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE 25000 - -namespace ZeroTier -{ - -struct AuthInfo -{ -public: - AuthInfo() - : enabled(false) - , version(0) - , authenticationURL() - , authenticationExpiryTime(0) - , issuerURL() - , centralAuthURL() - , ssoNonce() - , ssoState() - , ssoClientID() - , ssoProvider("default") - {} - - bool enabled; - uint64_t version; - std::string authenticationURL; - uint64_t authenticationExpiryTime; - std::string issuerURL; - std::string centralAuthURL; - std::string ssoNonce; - std::string ssoState; - std::string ssoClientID; - std::string ssoProvider; -}; - -/** - * Base class with common infrastructure for all controller DB implementations - */ -class DB -{ -public: - class ChangeListener - { - public: - ChangeListener() {} - virtual ~ChangeListener() {} - virtual void onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network) {} - virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member) {} - virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId) {} - }; - - struct NetworkSummaryInfo - { - NetworkSummaryInfo() : authorizedMemberCount(0),totalMemberCount(0),mostRecentDeauthTime(0) {} - std::vector
    activeBridges; - std::vector allocatedIps; - unsigned long authorizedMemberCount; - unsigned long totalMemberCount; - int64_t mostRecentDeauthTime; - }; - - static void initNetwork(nlohmann::json &network); - static void initMember(nlohmann::json &member); - static void cleanNetwork(nlohmann::json &network); - static void cleanMember(nlohmann::json &member); - - DB(); - virtual ~DB(); - - virtual bool waitForReady() = 0; - virtual bool isReady() = 0; - - inline bool hasNetwork(const uint64_t networkId) const - { - std::shared_lock l(_networks_l); - return (_networks.find(networkId) != _networks.end()); - } - - bool get(const uint64_t networkId,nlohmann::json &network); - bool get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member); - bool get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member,NetworkSummaryInfo &info); - bool get(const uint64_t networkId,nlohmann::json &network,std::vector &members); - - void networks(std::set &networks); - - template - inline void each(F f) - { - nlohmann::json nullJson; - std::unique_lock lck(_networks_l); - for(auto nw=_networks.begin();nw!=_networks.end();++nw) { - f(nw->first,nw->second->config,0,nullJson); // first provide network with 0 for member ID - for(auto m=nw->second->members.begin();m!=nw->second->members.end();++m) { - f(nw->first,nw->second->config,m->first,m->second); - } - } - } - - virtual bool save(nlohmann::json &record,bool notifyListeners) = 0; - virtual void eraseNetwork(const uint64_t networkId) = 0; - virtual void eraseMember(const uint64_t networkId,const uint64_t memberId) = 0; - virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0; - - virtual AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { return AuthInfo(); } - - inline void addListener(DB::ChangeListener *const listener) - { - std::unique_lock l(_changeListeners_l); - _changeListeners.push_back(listener); - } - -protected: - static inline bool _compareRecords(const nlohmann::json &a,const nlohmann::json &b) - { - if (a.is_object() == b.is_object()) { - if (a.is_object()) { - if (a.size() != b.size()) - return false; - auto amap = a.get(); - auto bmap = b.get(); - for(auto ai=amap.begin();ai!=amap.end();++ai) { - if (ai->first != "revision") { // ignore revision, compare only non-revision-counter fields - auto bi = bmap.find(ai->first); - if ((bi == bmap.end())||(bi->second != ai->second)) - return false; - } - } - return true; - } - return (a == b); - } - return false; - } - - struct _Network - { - _Network() : mostRecentDeauthTime(0) {} - nlohmann::json config; - std::unordered_map members; - std::unordered_set activeBridgeMembers; - std::unordered_set authorizedMembers; - std::unordered_set allocatedIps; - int64_t mostRecentDeauthTime; - std::shared_mutex lock; - }; - - virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners); - virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners); - void _fillSummaryInfo(const std::shared_ptr<_Network> &nw,NetworkSummaryInfo &info); - - std::vector _changeListeners; - std::unordered_map< uint64_t,std::shared_ptr<_Network> > _networks; - std::unordered_multimap< uint64_t,uint64_t > _networkByMember; - mutable std::shared_mutex _changeListeners_l; - mutable std::shared_mutex _networks_l; -}; - -} // namespace ZeroTier - -#endif diff --git a/zerotier-one/controller/DBMirrorSet.cpp b/zerotier-one/controller/DBMirrorSet.cpp deleted file mode 100644 index 9372eef6..00000000 --- a/zerotier-one/controller/DBMirrorSet.cpp +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "DBMirrorSet.hpp" - -namespace ZeroTier { - -DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener) - : _listener(listener) - , _running(true) - , _syncCheckerThread() - , _dbs() - , _dbs_l() -{ - _syncCheckerThread = std::thread([this]() { - for(;;) { - for(int i=0;i<120;++i) { // 1 minute delay between checks - if (!_running) - return; - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - - std::vector< std::shared_ptr > dbs; - { - std::unique_lock l(_dbs_l); - if (_dbs.size() <= 1) - continue; // no need to do this if there's only one DB, so skip the iteration - dbs = _dbs; - } - - for(auto db=dbs.begin();db!=dbs.end();++db) { - (*db)->each([&dbs,&db](uint64_t networkId,const nlohmann::json &network,uint64_t memberId,const nlohmann::json &member) { - try { - if (network.is_object()) { - if (memberId == 0) { - for(auto db2=dbs.begin();db2!=dbs.end();++db2) { - if (db->get() != db2->get()) { - nlohmann::json nw2; - if ((!(*db2)->get(networkId,nw2))||((nw2.is_object())&&(OSUtils::jsonInt(nw2["revision"],0) < OSUtils::jsonInt(network["revision"],0)))) { - nw2 = network; - (*db2)->save(nw2,false); - } - } - } - } else if (member.is_object()) { - for(auto db2=dbs.begin();db2!=dbs.end();++db2) { - if (db->get() != db2->get()) { - nlohmann::json nw2,m2; - if ((!(*db2)->get(networkId,nw2,memberId,m2))||((m2.is_object())&&(OSUtils::jsonInt(m2["revision"],0) < OSUtils::jsonInt(member["revision"],0)))) { - m2 = member; - (*db2)->save(m2,false); - } - } - } - } - } - } catch ( ... ) {} // skip entries that generate JSON errors - }); - } - } - }); -} - -DBMirrorSet::~DBMirrorSet() -{ - _running = false; - _syncCheckerThread.join(); -} - -bool DBMirrorSet::hasNetwork(const uint64_t networkId) const -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if ((*d)->hasNetwork(networkId)) - return true; - } - return false; -} - -bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if ((*d)->get(networkId,network)) { - return true; - } - } - return false; -} - -bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if ((*d)->get(networkId,network,memberId,member)) - return true; - } - return false; -} - -bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member,DB::NetworkSummaryInfo &info) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if ((*d)->get(networkId,network,memberId,member,info)) - return true; - } - return false; -} - -bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vector &members) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if ((*d)->get(networkId,network,members)) - return true; - } - return false; -} - -AuthInfo DBMirrorSet::getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - AuthInfo info = (*d)->getSSOAuthInfo(member, redirectURL); - if (info.enabled) { - return info; - } - } - return AuthInfo(); -} - -void DBMirrorSet::networks(std::set &networks) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - (*d)->networks(networks); - } -} - -bool DBMirrorSet::waitForReady() -{ - bool r = false; - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - r |= (*d)->waitForReady(); - } - return r; -} - -bool DBMirrorSet::isReady() -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if (!(*d)->isReady()) - return false; - } - return true; -} - -bool DBMirrorSet::save(nlohmann::json &record,bool notifyListeners) -{ - std::vector< std::shared_ptr > dbs; - { - std::unique_lock l(_dbs_l); - dbs = _dbs; - } - if (notifyListeners) { - for(auto d=dbs.begin();d!=dbs.end();++d) { - if ((*d)->save(record,true)) - return true; - } - return false; - } else { - bool modified = false; - for(auto d=dbs.begin();d!=dbs.end();++d) { - modified |= (*d)->save(record,false); - } - return modified; - } -} - -void DBMirrorSet::eraseNetwork(const uint64_t networkId) -{ - std::unique_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - (*d)->eraseNetwork(networkId); - } -} - -void DBMirrorSet::eraseMember(const uint64_t networkId,const uint64_t memberId) -{ - std::unique_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - (*d)->eraseMember(networkId,memberId); - } -} - -void DBMirrorSet::nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) -{ - std::shared_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - (*d)->nodeIsOnline(networkId,memberId,physicalAddress); - } -} - -void DBMirrorSet::onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network) -{ - nlohmann::json record(network); - std::unique_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if (d->get() != db) { - (*d)->save(record,false); - } - } - _listener->onNetworkUpdate(this,networkId,network); -} - -void DBMirrorSet::onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member) -{ - nlohmann::json record(member); - std::unique_lock l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - if (d->get() != db) { - (*d)->save(record,false); - } - } - _listener->onNetworkMemberUpdate(this,networkId,memberId,member); -} - -void DBMirrorSet::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId) -{ - _listener->onNetworkMemberDeauthorize(this,networkId,memberId); -} - -} // namespace ZeroTier diff --git a/zerotier-one/controller/DBMirrorSet.hpp b/zerotier-one/controller/DBMirrorSet.hpp deleted file mode 100644 index e33b63ec..00000000 --- a/zerotier-one/controller/DBMirrorSet.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_DBMIRRORSET_HPP -#define ZT_DBMIRRORSET_HPP - -#include "DB.hpp" - -#include -#include -#include -#include -#include - -namespace ZeroTier { - -class DBMirrorSet : public DB::ChangeListener -{ -public: - DBMirrorSet(DB::ChangeListener *listener); - virtual ~DBMirrorSet(); - - bool hasNetwork(const uint64_t networkId) const; - - bool get(const uint64_t networkId,nlohmann::json &network); - bool get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member); - bool get(const uint64_t networkId,nlohmann::json &network,const uint64_t memberId,nlohmann::json &member,DB::NetworkSummaryInfo &info); - bool get(const uint64_t networkId,nlohmann::json &network,std::vector &members); - - void networks(std::set &networks); - - bool waitForReady(); - bool isReady(); - bool save(nlohmann::json &record,bool notifyListeners); - void eraseNetwork(const uint64_t networkId); - void eraseMember(const uint64_t networkId,const uint64_t memberId); - void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress); - - // These are called by various DB instances when changes occur. - virtual void onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network); - virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member); - virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId); - - AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL); - - inline void addDB(const std::shared_ptr &db) - { - db->addListener(this); - std::unique_lock l(_dbs_l); - _dbs.push_back(db); - } - -private: - DB::ChangeListener *const _listener; - std::atomic_bool _running; - std::thread _syncCheckerThread; - std::vector< std::shared_ptr< DB > > _dbs; - mutable std::shared_mutex _dbs_l; -}; - -} // namespace ZeroTier - -#endif diff --git a/zerotier-one/controller/EmbeddedNetworkController.cpp b/zerotier-one/controller/EmbeddedNetworkController.cpp deleted file mode 100644 index a01b68a9..00000000 --- a/zerotier-one/controller/EmbeddedNetworkController.cpp +++ /dev/null @@ -1,2046 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include -#include -#include -#include -#include -#include - -#ifndef _WIN32 -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../include/ZeroTierOne.h" -#include "../version.h" - -#include "EmbeddedNetworkController.hpp" -#include "LFDB.hpp" -#include "FileDB.hpp" -#ifdef ZT_CONTROLLER_USE_LIBPQ -#include "PostgreSQL.hpp" -#endif - -#include "../node/Node.hpp" -#include "../node/CertificateOfMembership.hpp" -#include "../node/NetworkConfig.hpp" -#include "../node/Dictionary.hpp" -#include "../node/MAC.hpp" - -using json = nlohmann::json; - -// API version reported via JSON control plane -#define ZT_NETCONF_CONTROLLER_API_VERSION 4 - -// Min duration between requests for an address/nwid combo to prevent floods -#define ZT_NETCONF_MIN_REQUEST_PERIOD 1000 - -// Global maximum size of arrays in JSON objects -#define ZT_CONTROLLER_MAX_ARRAY_SIZE 16384 - -namespace ZeroTier { - -namespace { - -static json _renderRule(ZT_VirtualNetworkRule &rule) -{ - char tmp[128]; - json r = json::object(); - const ZT_VirtualNetworkRuleType rt = (ZT_VirtualNetworkRuleType)(rule.t & 0x3f); - - switch(rt) { - case ZT_NETWORK_RULE_ACTION_DROP: - r["type"] = "ACTION_DROP"; - break; - case ZT_NETWORK_RULE_ACTION_ACCEPT: - r["type"] = "ACTION_ACCEPT"; - break; - case ZT_NETWORK_RULE_ACTION_TEE: - r["type"] = "ACTION_TEE"; - r["address"] = Address(rule.v.fwd.address).toString(tmp); - r["flags"] = (unsigned int)rule.v.fwd.flags; - r["length"] = (unsigned int)rule.v.fwd.length; - break; - case ZT_NETWORK_RULE_ACTION_WATCH: - r["type"] = "ACTION_WATCH"; - r["address"] = Address(rule.v.fwd.address).toString(tmp); - r["flags"] = (unsigned int)rule.v.fwd.flags; - r["length"] = (unsigned int)rule.v.fwd.length; - break; - case ZT_NETWORK_RULE_ACTION_REDIRECT: - r["type"] = "ACTION_REDIRECT"; - r["address"] = Address(rule.v.fwd.address).toString(tmp); - r["flags"] = (unsigned int)rule.v.fwd.flags; - break; - case ZT_NETWORK_RULE_ACTION_BREAK: - r["type"] = "ACTION_BREAK"; - break; - default: - break; - } - - if (r.empty()) { - switch(rt) { - case ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS: - r["type"] = "MATCH_SOURCE_ZEROTIER_ADDRESS"; - r["zt"] = Address(rule.v.zt).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS: - r["type"] = "MATCH_DEST_ZEROTIER_ADDRESS"; - r["zt"] = Address(rule.v.zt).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_VLAN_ID: - r["type"] = "MATCH_VLAN_ID"; - r["vlanId"] = (unsigned int)rule.v.vlanId; - break; - case ZT_NETWORK_RULE_MATCH_VLAN_PCP: - r["type"] = "MATCH_VLAN_PCP"; - r["vlanPcp"] = (unsigned int)rule.v.vlanPcp; - break; - case ZT_NETWORK_RULE_MATCH_VLAN_DEI: - r["type"] = "MATCH_VLAN_DEI"; - r["vlanDei"] = (unsigned int)rule.v.vlanDei; - break; - case ZT_NETWORK_RULE_MATCH_MAC_SOURCE: - r["type"] = "MATCH_MAC_SOURCE"; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(unsigned int)rule.v.mac[0],(unsigned int)rule.v.mac[1],(unsigned int)rule.v.mac[2],(unsigned int)rule.v.mac[3],(unsigned int)rule.v.mac[4],(unsigned int)rule.v.mac[5]); - r["mac"] = tmp; - break; - case ZT_NETWORK_RULE_MATCH_MAC_DEST: - r["type"] = "MATCH_MAC_DEST"; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(unsigned int)rule.v.mac[0],(unsigned int)rule.v.mac[1],(unsigned int)rule.v.mac[2],(unsigned int)rule.v.mac[3],(unsigned int)rule.v.mac[4],(unsigned int)rule.v.mac[5]); - r["mac"] = tmp; - break; - case ZT_NETWORK_RULE_MATCH_IPV4_SOURCE: - r["type"] = "MATCH_IPV4_SOURCE"; - r["ip"] = InetAddress(&(rule.v.ipv4.ip),4,(unsigned int)rule.v.ipv4.mask).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_IPV4_DEST: - r["type"] = "MATCH_IPV4_DEST"; - r["ip"] = InetAddress(&(rule.v.ipv4.ip),4,(unsigned int)rule.v.ipv4.mask).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_IPV6_SOURCE: - r["type"] = "MATCH_IPV6_SOURCE"; - r["ip"] = InetAddress(rule.v.ipv6.ip,16,(unsigned int)rule.v.ipv6.mask).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_IPV6_DEST: - r["type"] = "MATCH_IPV6_DEST"; - r["ip"] = InetAddress(rule.v.ipv6.ip,16,(unsigned int)rule.v.ipv6.mask).toString(tmp); - break; - case ZT_NETWORK_RULE_MATCH_IP_TOS: - r["type"] = "MATCH_IP_TOS"; - r["mask"] = (unsigned int)rule.v.ipTos.mask; - r["start"] = (unsigned int)rule.v.ipTos.value[0]; - r["end"] = (unsigned int)rule.v.ipTos.value[1]; - break; - case ZT_NETWORK_RULE_MATCH_IP_PROTOCOL: - r["type"] = "MATCH_IP_PROTOCOL"; - r["ipProtocol"] = (unsigned int)rule.v.ipProtocol; - break; - case ZT_NETWORK_RULE_MATCH_ETHERTYPE: - r["type"] = "MATCH_ETHERTYPE"; - r["etherType"] = (unsigned int)rule.v.etherType; - break; - case ZT_NETWORK_RULE_MATCH_ICMP: - r["type"] = "MATCH_ICMP"; - r["icmpType"] = (unsigned int)rule.v.icmp.type; - if ((rule.v.icmp.flags & 0x01) != 0) - r["icmpCode"] = (unsigned int)rule.v.icmp.code; - else r["icmpCode"] = json(); - break; - case ZT_NETWORK_RULE_MATCH_IP_SOURCE_PORT_RANGE: - r["type"] = "MATCH_IP_SOURCE_PORT_RANGE"; - r["start"] = (unsigned int)rule.v.port[0]; - r["end"] = (unsigned int)rule.v.port[1]; - break; - case ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE: - r["type"] = "MATCH_IP_DEST_PORT_RANGE"; - r["start"] = (unsigned int)rule.v.port[0]; - r["end"] = (unsigned int)rule.v.port[1]; - break; - case ZT_NETWORK_RULE_MATCH_CHARACTERISTICS: - r["type"] = "MATCH_CHARACTERISTICS"; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.16llx",rule.v.characteristics); - r["mask"] = tmp; - break; - case ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE: - r["type"] = "MATCH_FRAME_SIZE_RANGE"; - r["start"] = (unsigned int)rule.v.frameSize[0]; - r["end"] = (unsigned int)rule.v.frameSize[1]; - break; - case ZT_NETWORK_RULE_MATCH_RANDOM: - r["type"] = "MATCH_RANDOM"; - r["probability"] = (unsigned long)rule.v.randomProbability; - break; - case ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE: - r["type"] = "MATCH_TAGS_DIFFERENCE"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_AND: - r["type"] = "MATCH_TAGS_BITWISE_AND"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_OR: - r["type"] = "MATCH_TAGS_BITWISE_OR"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_XOR: - r["type"] = "MATCH_TAGS_BITWISE_XOR"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAGS_EQUAL: - r["type"] = "MATCH_TAGS_EQUAL"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAG_SENDER: - r["type"] = "MATCH_TAG_SENDER"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_TAG_RECEIVER: - r["type"] = "MATCH_TAG_RECEIVER"; - r["id"] = rule.v.tag.id; - r["value"] = rule.v.tag.value; - break; - case ZT_NETWORK_RULE_MATCH_INTEGER_RANGE: - r["type"] = "INTEGER_RANGE"; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.16llx",rule.v.intRange.start); - r["start"] = tmp; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.16llx",rule.v.intRange.start + (uint64_t)rule.v.intRange.end); - r["end"] = tmp; - r["idx"] = rule.v.intRange.idx; - r["little"] = ((rule.v.intRange.format & 0x80) != 0); - r["bits"] = (rule.v.intRange.format & 63) + 1; - break; - default: - break; - } - - if (!r.empty()) { - r["not"] = ((rule.t & 0x80) != 0); - r["or"] = ((rule.t & 0x40) != 0); - } - } - - return r; -} - -static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule) -{ - if (!r.is_object()) - return false; - - const std::string t(OSUtils::jsonString(r["type"],"")); - memset(&rule,0,sizeof(ZT_VirtualNetworkRule)); - - if (OSUtils::jsonBool(r["not"],false)) - rule.t = 0x80; - else rule.t = 0x00; - if (OSUtils::jsonBool(r["or"],false)) - rule.t |= 0x40; - - bool tag = false; - if (t == "ACTION_DROP") { - rule.t |= ZT_NETWORK_RULE_ACTION_DROP; - return true; - } else if (t == "ACTION_ACCEPT") { - rule.t |= ZT_NETWORK_RULE_ACTION_ACCEPT; - return true; - } else if (t == "ACTION_TEE") { - rule.t |= ZT_NETWORK_RULE_ACTION_TEE; - rule.v.fwd.address = Utils::hexStrToU64(OSUtils::jsonString(r["address"],"0").c_str()) & 0xffffffffffULL; - rule.v.fwd.flags = (uint32_t)(OSUtils::jsonInt(r["flags"],0ULL) & 0xffffffffULL); - rule.v.fwd.length = (uint16_t)(OSUtils::jsonInt(r["length"],0ULL) & 0xffffULL); - return true; - } else if (t == "ACTION_WATCH") { - rule.t |= ZT_NETWORK_RULE_ACTION_WATCH; - rule.v.fwd.address = Utils::hexStrToU64(OSUtils::jsonString(r["address"],"0").c_str()) & 0xffffffffffULL; - rule.v.fwd.flags = (uint32_t)(OSUtils::jsonInt(r["flags"],0ULL) & 0xffffffffULL); - rule.v.fwd.length = (uint16_t)(OSUtils::jsonInt(r["length"],0ULL) & 0xffffULL); - return true; - } else if (t == "ACTION_REDIRECT") { - rule.t |= ZT_NETWORK_RULE_ACTION_REDIRECT; - rule.v.fwd.address = Utils::hexStrToU64(OSUtils::jsonString(r["address"],"0").c_str()) & 0xffffffffffULL; - rule.v.fwd.flags = (uint32_t)(OSUtils::jsonInt(r["flags"],0ULL) & 0xffffffffULL); - return true; - } else if (t == "ACTION_BREAK") { - rule.t |= ZT_NETWORK_RULE_ACTION_BREAK; - return true; - } else if (t == "MATCH_SOURCE_ZEROTIER_ADDRESS") { - rule.t |= ZT_NETWORK_RULE_MATCH_SOURCE_ZEROTIER_ADDRESS; - rule.v.zt = Utils::hexStrToU64(OSUtils::jsonString(r["zt"],"0").c_str()) & 0xffffffffffULL; - return true; - } else if (t == "MATCH_DEST_ZEROTIER_ADDRESS") { - rule.t |= ZT_NETWORK_RULE_MATCH_DEST_ZEROTIER_ADDRESS; - rule.v.zt = Utils::hexStrToU64(OSUtils::jsonString(r["zt"],"0").c_str()) & 0xffffffffffULL; - return true; - } else if (t == "MATCH_VLAN_ID") { - rule.t |= ZT_NETWORK_RULE_MATCH_VLAN_ID; - rule.v.vlanId = (uint16_t)(OSUtils::jsonInt(r["vlanId"],0ULL) & 0xffffULL); - return true; - } else if (t == "MATCH_VLAN_PCP") { - rule.t |= ZT_NETWORK_RULE_MATCH_VLAN_PCP; - rule.v.vlanPcp = (uint8_t)(OSUtils::jsonInt(r["vlanPcp"],0ULL) & 0xffULL); - return true; - } else if (t == "MATCH_VLAN_DEI") { - rule.t |= ZT_NETWORK_RULE_MATCH_VLAN_DEI; - rule.v.vlanDei = (uint8_t)(OSUtils::jsonInt(r["vlanDei"],0ULL) & 0xffULL); - return true; - } else if (t == "MATCH_MAC_SOURCE") { - rule.t |= ZT_NETWORK_RULE_MATCH_MAC_SOURCE; - const std::string mac(OSUtils::jsonString(r["mac"],"0")); - Utils::unhex(mac.c_str(),(unsigned int)mac.length(),rule.v.mac,6); - return true; - } else if (t == "MATCH_MAC_DEST") { - rule.t |= ZT_NETWORK_RULE_MATCH_MAC_DEST; - const std::string mac(OSUtils::jsonString(r["mac"],"0")); - Utils::unhex(mac.c_str(),(unsigned int)mac.length(),rule.v.mac,6); - return true; - } else if (t == "MATCH_IPV4_SOURCE") { - rule.t |= ZT_NETWORK_RULE_MATCH_IPV4_SOURCE; - InetAddress ip(OSUtils::jsonString(r["ip"],"0.0.0.0").c_str()); - rule.v.ipv4.ip = reinterpret_cast(&ip)->sin_addr.s_addr; - rule.v.ipv4.mask = Utils::ntoh(reinterpret_cast(&ip)->sin_port) & 0xff; - if (rule.v.ipv4.mask > 32) rule.v.ipv4.mask = 32; - return true; - } else if (t == "MATCH_IPV4_DEST") { - rule.t |= ZT_NETWORK_RULE_MATCH_IPV4_DEST; - InetAddress ip(OSUtils::jsonString(r["ip"],"0.0.0.0").c_str()); - rule.v.ipv4.ip = reinterpret_cast(&ip)->sin_addr.s_addr; - rule.v.ipv4.mask = Utils::ntoh(reinterpret_cast(&ip)->sin_port) & 0xff; - if (rule.v.ipv4.mask > 32) rule.v.ipv4.mask = 32; - return true; - } else if (t == "MATCH_IPV6_SOURCE") { - rule.t |= ZT_NETWORK_RULE_MATCH_IPV6_SOURCE; - InetAddress ip(OSUtils::jsonString(r["ip"],"::0").c_str()); - memcpy(rule.v.ipv6.ip,reinterpret_cast(&ip)->sin6_addr.s6_addr,16); - rule.v.ipv6.mask = Utils::ntoh(reinterpret_cast(&ip)->sin6_port) & 0xff; - if (rule.v.ipv6.mask > 128) rule.v.ipv6.mask = 128; - return true; - } else if (t == "MATCH_IPV6_DEST") { - rule.t |= ZT_NETWORK_RULE_MATCH_IPV6_DEST; - InetAddress ip(OSUtils::jsonString(r["ip"],"::0").c_str()); - memcpy(rule.v.ipv6.ip,reinterpret_cast(&ip)->sin6_addr.s6_addr,16); - rule.v.ipv6.mask = Utils::ntoh(reinterpret_cast(&ip)->sin6_port) & 0xff; - if (rule.v.ipv6.mask > 128) rule.v.ipv6.mask = 128; - return true; - } else if (t == "MATCH_IP_TOS") { - rule.t |= ZT_NETWORK_RULE_MATCH_IP_TOS; - rule.v.ipTos.mask = (uint8_t)(OSUtils::jsonInt(r["mask"],0ULL) & 0xffULL); - rule.v.ipTos.value[0] = (uint8_t)(OSUtils::jsonInt(r["start"],0ULL) & 0xffULL); - rule.v.ipTos.value[1] = (uint8_t)(OSUtils::jsonInt(r["end"],0ULL) & 0xffULL); - return true; - } else if (t == "MATCH_IP_PROTOCOL") { - rule.t |= ZT_NETWORK_RULE_MATCH_IP_PROTOCOL; - rule.v.ipProtocol = (uint8_t)(OSUtils::jsonInt(r["ipProtocol"],0ULL) & 0xffULL); - return true; - } else if (t == "MATCH_ETHERTYPE") { - rule.t |= ZT_NETWORK_RULE_MATCH_ETHERTYPE; - rule.v.etherType = (uint16_t)(OSUtils::jsonInt(r["etherType"],0ULL) & 0xffffULL); - return true; - } else if (t == "MATCH_ICMP") { - rule.t |= ZT_NETWORK_RULE_MATCH_ICMP; - rule.v.icmp.type = (uint8_t)(OSUtils::jsonInt(r["icmpType"],0ULL) & 0xffULL); - json &code = r["icmpCode"]; - if (code.is_null()) { - rule.v.icmp.code = 0; - rule.v.icmp.flags = 0x00; - } else { - rule.v.icmp.code = (uint8_t)(OSUtils::jsonInt(code,0ULL) & 0xffULL); - rule.v.icmp.flags = 0x01; - } - return true; - } else if (t == "MATCH_IP_SOURCE_PORT_RANGE") { - rule.t |= ZT_NETWORK_RULE_MATCH_IP_SOURCE_PORT_RANGE; - rule.v.port[0] = (uint16_t)(OSUtils::jsonInt(r["start"],0ULL) & 0xffffULL); - rule.v.port[1] = (uint16_t)(OSUtils::jsonInt(r["end"],(uint64_t)rule.v.port[0]) & 0xffffULL); - return true; - } else if (t == "MATCH_IP_DEST_PORT_RANGE") { - rule.t |= ZT_NETWORK_RULE_MATCH_IP_DEST_PORT_RANGE; - rule.v.port[0] = (uint16_t)(OSUtils::jsonInt(r["start"],0ULL) & 0xffffULL); - rule.v.port[1] = (uint16_t)(OSUtils::jsonInt(r["end"],(uint64_t)rule.v.port[0]) & 0xffffULL); - return true; - } else if (t == "MATCH_CHARACTERISTICS") { - rule.t |= ZT_NETWORK_RULE_MATCH_CHARACTERISTICS; - if (r.count("mask")) { - json &v = r["mask"]; - if (v.is_number()) { - rule.v.characteristics = v; - } else { - std::string tmp = v; - rule.v.characteristics = Utils::hexStrToU64(tmp.c_str()); - } - } - return true; - } else if (t == "MATCH_FRAME_SIZE_RANGE") { - rule.t |= ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE; - rule.v.frameSize[0] = (uint16_t)(OSUtils::jsonInt(r["start"],0ULL) & 0xffffULL); - rule.v.frameSize[1] = (uint16_t)(OSUtils::jsonInt(r["end"],(uint64_t)rule.v.frameSize[0]) & 0xffffULL); - return true; - } else if (t == "MATCH_RANDOM") { - rule.t |= ZT_NETWORK_RULE_MATCH_RANDOM; - rule.v.randomProbability = (uint32_t)(OSUtils::jsonInt(r["probability"],0ULL) & 0xffffffffULL); - return true; - } else if (t == "MATCH_TAGS_DIFFERENCE") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE; - tag = true; - } else if (t == "MATCH_TAGS_BITWISE_AND") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_AND; - tag = true; - } else if (t == "MATCH_TAGS_BITWISE_OR") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_OR; - tag = true; - } else if (t == "MATCH_TAGS_BITWISE_XOR") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_BITWISE_XOR; - tag = true; - } else if (t == "MATCH_TAGS_EQUAL") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_EQUAL; - tag = true; - } else if (t == "MATCH_TAG_SENDER") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAG_SENDER; - tag = true; - } else if (t == "MATCH_TAG_RECEIVER") { - rule.t |= ZT_NETWORK_RULE_MATCH_TAG_RECEIVER; - tag = true; - } else if (t == "INTEGER_RANGE") { - json &s = r["start"]; - if (s.is_string()) { - std::string tmp = s; - rule.v.intRange.start = Utils::hexStrToU64(tmp.c_str()); - } else { - rule.v.intRange.start = OSUtils::jsonInt(s,0ULL); - } - json &e = r["end"]; - if (e.is_string()) { - std::string tmp = e; - rule.v.intRange.end = (uint32_t)(Utils::hexStrToU64(tmp.c_str()) - rule.v.intRange.start); - } else { - rule.v.intRange.end = (uint32_t)(OSUtils::jsonInt(e,0ULL) - rule.v.intRange.start); - } - rule.v.intRange.idx = (uint16_t)OSUtils::jsonInt(r["idx"],0ULL); - rule.v.intRange.format = (OSUtils::jsonBool(r["little"],false)) ? 0x80 : 0x00; - rule.v.intRange.format |= (uint8_t)((OSUtils::jsonInt(r["bits"],1ULL) - 1) & 63); - } - - if (tag) { - rule.v.tag.id = (uint32_t)(OSUtils::jsonInt(r["id"],0ULL) & 0xffffffffULL); - rule.v.tag.value = (uint32_t)(OSUtils::jsonInt(r["value"],0ULL) & 0xffffffffULL); - return true; - } - - return false; -} - -} // anonymous namespace - -EmbeddedNetworkController::EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort, RedisConfig *rc) - : _startTime(OSUtils::now()) - , _listenPort(listenPort) - , _node(node) - , _ztPath(ztPath) - , _path(dbPath) - , _signingId() - , _signingIdAddressString() - , _sender((NetworkController::Sender *)0) - , _db(this) - , _queue() - , _threads() - , _threads_l() - , _memberStatus() - , _memberStatus_l() - , _expiringSoon() - , _expiringSoon_l() - , _rc(rc) - , _ssoExpiryRunning(true) - , _ssoExpiry(std::thread(&EmbeddedNetworkController::_ssoExpiryThread, this)) - -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - , _member_status_lookup{"nc_member_status_lookup",""} - , _member_status_lookup_count{"nc_member_status_lookup_count",""} - , _node_is_online{"nc_node_is_online",""} - , _node_is_online_count{"nc_node_is_online_count",""} - , _get_and_init_member{"nc_get_and_init_member",""} - , _get_and_init_member_count{"nc_get_and_init_member_count",""} - , _have_identity{"nc_have_identity",""} - , _have_identity_count{"nc_have_identity_count",""} - , _determine_auth{"nc_determine_auth",""} - , _determine_auth_count{"nc_determine_auth_count",""} - , _sso_check{"nc_sso_check",""} - , _sso_check_count{"nc_sso_check_count",""} - , _auth_check{"nc_auth_check",""} - , _auth_check_count{"nc_auth_check_count",""} - , _json_schlep{"nc_json_schlep",""} - , _json_schlep_count{"nc_json_schlep_count",""} - , _issue_certificate{"nc_issue_certificate", ""} - , _issue_certificate_count{"nc_issue_certificate_count",""} - , _save_member{"nc_save_member",""} - , _save_member_count{"nc_save_member_count",""} - , _send_netconf{"nc_send_netconf2",""} - , _send_netconf_count{"nc_send_netconf2_count",""} -#endif -{ -} - -EmbeddedNetworkController::~EmbeddedNetworkController() -{ - std::lock_guard l(_threads_l); - _queue.stop(); - for(auto t=_threads.begin();t!=_threads.end();++t) { - t->join(); - } - _ssoExpiryRunning = false; - _ssoExpiry.join(); -} - -void EmbeddedNetworkController::setSSORedirectURL(const std::string &url) { - _ssoRedirectURL = url; -} - -void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender) -{ - char tmp[64]; - _signingId = signingId; - _sender = sender; - _signingIdAddressString = signingId.address().toString(tmp); - -#ifdef ZT_CONTROLLER_USE_LIBPQ - if ((_path.length() > 9)&&(_path.substr(0,9) == "postgres:")) { - _db.addDB(std::shared_ptr(new PostgreSQL(_signingId,_path.substr(9).c_str(), _listenPort, _rc))); - } else { -#endif - _db.addDB(std::shared_ptr(new FileDB(_path.c_str()))); -#ifdef ZT_CONTROLLER_USE_LIBPQ - } -#endif - - std::string lfJSON; - OSUtils::readFile((_ztPath + ZT_PATH_SEPARATOR_S "local.conf").c_str(),lfJSON); - if (lfJSON.length() > 0) { - nlohmann::json lfConfig(OSUtils::jsonParse(lfJSON)); - nlohmann::json &settings = lfConfig["settings"]; - if (settings.is_object()) { - nlohmann::json &controllerDb = settings["controllerDb"]; - if (controllerDb.is_object()) { - std::string type = controllerDb["type"]; - if (type == "lf") { - std::string lfOwner = controllerDb["owner"]; - std::string lfHost = controllerDb["host"]; - int lfPort = controllerDb["port"]; - bool storeOnlineState = controllerDb["storeOnlineState"]; - if ((lfOwner.length())&&(lfHost.length())&&(lfPort > 0)&&(lfPort < 65536)) { - std::size_t pubHdrLoc = lfOwner.find("Public: "); - if ((pubHdrLoc > 0)&&((pubHdrLoc + 8) < lfOwner.length())) { - std::string lfOwnerPublic = lfOwner.substr(pubHdrLoc + 8); - std::size_t pubHdrEnd = lfOwnerPublic.find_first_of("\n\r\t "); - if (pubHdrEnd != std::string::npos) { - lfOwnerPublic = lfOwnerPublic.substr(0,pubHdrEnd); - _db.addDB(std::shared_ptr(new LFDB(_signingId,_path.c_str(),lfOwner.c_str(),lfOwnerPublic.c_str(),lfHost.c_str(),lfPort,storeOnlineState))); - } - } - } - } - } - } - } - - _db.waitForReady(); -} - -void EmbeddedNetworkController::request( - uint64_t nwid, - const InetAddress &fromAddr, - uint64_t requestPacketId, - const Identity &identity, - const Dictionary &metaData) -{ - if (((!_signingId)||(!_signingId.hasPrivate()))||(_signingId.address().toInt() != (nwid >> 24))||(!_sender)) - return; - _startThreads(); - - const int64_t now = OSUtils::now(); - - if (requestPacketId) { - std::lock_guard l(_memberStatus_l); - _MemberStatus &ms = _memberStatus[_MemberStatusKey(nwid,identity.address().toInt())]; - if ((now - ms.lastRequestTime) <= ZT_NETCONF_MIN_REQUEST_PERIOD) { - return; - } - ms.lastRequestTime = now; - } - - _RQEntry *qe = new _RQEntry; - qe->nwid = nwid; - qe->requestPacketId = requestPacketId; - qe->fromAddr = fromAddr; - qe->identity = identity; - qe->metaData = metaData; - qe->type = _RQEntry::RQENTRY_TYPE_REQUEST; - _queue.post(qe); -} - -std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networkID, const std::string &body) -{ - json b = OSUtils::jsonParse(body); - - char nwids[24]; - OSUtils::ztsnprintf(nwids, sizeof(nwids), "%.16llx", networkID); - - json network; - _db.get(networkID, network); - DB::initNetwork(network); - if (b.count("name")) network["name"] = OSUtils::jsonString(b["name"],""); - if (b.count("private")) network["private"] = OSUtils::jsonBool(b["private"],true); - if (b.count("enableBroadcast")) network["enableBroadcast"] = OSUtils::jsonBool(b["enableBroadcast"],false); - if (b.count("multicastLimit")) network["multicastLimit"] = OSUtils::jsonInt(b["multicastLimit"],32ULL); - if (b.count("mtu")) network["mtu"] = std::max(std::min((unsigned int)OSUtils::jsonInt(b["mtu"],ZT_DEFAULT_MTU),(unsigned int)ZT_MAX_MTU),(unsigned int)ZT_MIN_MTU); - - if (b.count("remoteTraceTarget")) { - const std::string rtt(OSUtils::jsonString(b["remoteTraceTarget"],"")); - if (rtt.length() == 10) { - network["remoteTraceTarget"] = rtt; - } else { - network["remoteTraceTarget"] = json(); - } - } - if (b.count("remoteTraceLevel")) network["remoteTraceLevel"] = OSUtils::jsonInt(b["remoteTraceLevel"],0ULL); - - if (b.count("v4AssignMode")) { - json nv4m; - json &v4m = b["v4AssignMode"]; - if (v4m.is_string()) { // backward compatibility - nv4m["zt"] = (OSUtils::jsonString(v4m,"") == "zt"); - } else if (v4m.is_object()) { - nv4m["zt"] = OSUtils::jsonBool(v4m["zt"],false); - } else nv4m["zt"] = false; - network["v4AssignMode"] = nv4m; - } - - if (b.count("v6AssignMode")) { - json nv6m; - json &v6m = b["v6AssignMode"]; - if (!nv6m.is_object()) nv6m = json::object(); - if (v6m.is_string()) { // backward compatibility - std::vector v6ms(OSUtils::split(OSUtils::jsonString(v6m,"").c_str(),",","","")); - std::sort(v6ms.begin(),v6ms.end()); - v6ms.erase(std::unique(v6ms.begin(),v6ms.end()),v6ms.end()); - nv6m["rfc4193"] = false; - nv6m["zt"] = false; - nv6m["6plane"] = false; - for(std::vector::iterator i(v6ms.begin());i!=v6ms.end();++i) { - if (*i == "rfc4193") - nv6m["rfc4193"] = true; - else if (*i == "zt") - nv6m["zt"] = true; - else if (*i == "6plane") - nv6m["6plane"] = true; - } - } else if (v6m.is_object()) { - if (v6m.count("rfc4193")) nv6m["rfc4193"] = OSUtils::jsonBool(v6m["rfc4193"],false); - if (v6m.count("zt")) nv6m["zt"] = OSUtils::jsonBool(v6m["zt"],false); - if (v6m.count("6plane")) nv6m["6plane"] = OSUtils::jsonBool(v6m["6plane"],false); - } else { - nv6m["rfc4193"] = false; - nv6m["zt"] = false; - nv6m["6plane"] = false; - } - network["v6AssignMode"] = nv6m; - } - - if (b.count("routes")) { - json &rts = b["routes"]; - if (rts.is_array()) { - json nrts = json::array(); - for(unsigned long i=0;i().c_str()); - InetAddress v; - if (via.is_string()) v.fromString(via.get().c_str()); - if ( ((t.ss_family == AF_INET)||(t.ss_family == AF_INET6)) && (t.netmaskBitsValid()) ) { - json tmp; - char tmp2[64]; - tmp["target"] = t.toString(tmp2); - if (v.ss_family == t.ss_family) - tmp["via"] = v.toIpString(tmp2); - else tmp["via"] = json(); - nrts.push_back(tmp); - if (nrts.size() >= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - } - } - } - network["routes"] = nrts; - } - } - - if (b.count("ipAssignmentPools")) { - json &ipp = b["ipAssignmentPools"]; - if (ipp.is_array()) { - json nipp = json::array(); - for(unsigned long i=0;i= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - } - } - network["ipAssignmentPools"] = nipp; - } - } - - if (b.count("rules")) { - json &rules = b["rules"]; - if (rules.is_array()) { - json nrules = json::array(); - for(unsigned long i=0;i= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - } - } - network["rules"] = nrules; - } - } - - if (b.count("authTokens")) { - json &authTokens = b["authTokens"]; - if (authTokens.is_object()) { - json nat; - for(json::iterator t(authTokens.begin());t!=authTokens.end();++t) { - if ((t.value().is_number())&&(t.value() >= 0)) - nat[t.key()] = t.value(); - } - network["authTokens"] = nat; - } else { - network["authTokens"] = {{}}; - } - } - - if (b.count("capabilities")) { - json &capabilities = b["capabilities"]; - if (capabilities.is_array()) { - std::map< uint64_t,json > ncaps; - for(unsigned long i=0;i= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - } - } - } - ncap["rules"] = nrules; - - ncaps[capId] = ncap; - } - } - - json ncapsa = json::array(); - for(std::map< uint64_t,json >::iterator c(ncaps.begin());c!=ncaps.end();++c) { - ncapsa.push_back(c->second); - if (ncapsa.size() >= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - network["capabilities"] = ncapsa; - } - } - - if (b.count("tags")) { - json &tags = b["tags"]; - if (tags.is_array()) { - std::map< uint64_t,json > ntags; - for(unsigned long i=0;i::iterator t(ntags.begin());t!=ntags.end();++t) { - ntagsa.push_back(t->second); - if (ntagsa.size() >= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - network["tags"] = ntagsa; - } - } - - if (b.count("dns")) { - json &dns = b["dns"]; - if (dns.is_object()) { - json nd; - - nd["domain"] = dns["domain"]; - - json &srv = dns["servers"]; - if (srv.is_array()) { - json ns = json::array(); - for(unsigned int i=0;i setContent) -{ - // Control plane Endpoints - std::string controllerPath = "/controller"; - std::string networkListPath = "/controller/network"; - std::string networkPath = "/controller/network/([0-9a-fA-F]{16})"; - std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______"; - std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member"; - std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})"; - - auto controllerGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { - char tmp[4096]; - const bool dbOk = _db.isReady(); - OSUtils::ztsnprintf( - tmp, - sizeof(tmp), - "{\n\t\"controller\": true,\n\t\"apiVersion\": %d,\n\t\"clock\": %llu,\n\t\"databaseReady\": %s\n}\n", - ZT_NETCONF_CONTROLLER_API_VERSION, - (unsigned long long)OSUtils::now(), - dbOk ? "true" : "false"); - - if (!dbOk) { - res.status = 503; - } - - setContent(req, res, tmp); - }; - s.Get(controllerPath, controllerGet); - sv6.Get(controllerPath, controllerGet); - - auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { - std::set networkIds; - _db.networks(networkIds); - char tmp[64]; - - auto out = json::array(); - for(std::set::const_iterator i(networkIds.begin()); i != networkIds.end(); ++i) { - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", *i); - out.push_back(tmp); - } - - setContent(req, res, out.dump()); - }; - s.Get(networkListPath, networkListGet); - sv6.Get(networkListPath, networkListGet); - - auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1]; - uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); - json network; - if (!_db.get(nwid, network)) { - res.status = 404; - return; - } - - setContent(req, res, network.dump()); - }; - s.Get(networkPath, networkGet); - sv6.Get(networkPath, networkGet); - - auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) { - fprintf(stderr, "creating new network (new style)\n"); - uint64_t nwid = 0; - uint64_t nwidPrefix = (Utils::hexStrToU64(_signingIdAddressString.c_str()) << 24) & 0xffffffffff000000ULL; - uint64_t nwidPostfix = 0; - for(unsigned long k=0;k<100000;++k) { // sanity limit on trials - Utils::getSecureRandom(&nwidPostfix,sizeof(nwidPostfix)); - uint64_t tryNwid = nwidPrefix | (nwidPostfix & 0xffffffULL); - if ((tryNwid & 0xffffffULL) == 0ULL) tryNwid |= 1ULL; - if (!_db.hasNetwork(tryNwid)) { - nwid = tryNwid; - break; - } - } - if (!nwid) { - res.status = 503; - return; - } - - setContent(req, res, networkUpdateFromPostData(nwid, req.body)); - }; - s.Put(networkListPath, createNewNetwork); - s.Post(networkListPath, createNewNetwork); - sv6.Put(networkListPath, createNewNetwork); - sv6.Post(networkListPath, createNewNetwork); - - auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto inID = req.matches[1].str(); - - if (inID != _signingIdAddressString) { - res.status = 400; - return; - } - - uint64_t nwid = 0; - uint64_t nwidPrefix = (Utils::hexStrToU64(inID.c_str()) << 24) & 0xffffffffff000000ULL; - uint64_t nwidPostfix = 0; - for(unsigned long k=0;k<100000;++k) { // sanity limit on trials - Utils::getSecureRandom(&nwidPostfix,sizeof(nwidPostfix)); - uint64_t tryNwid = nwidPrefix | (nwidPostfix & 0xffffffULL); - if ((tryNwid & 0xffffffULL) == 0ULL) tryNwid |= 1ULL; - if (!_db.hasNetwork(tryNwid)) { - nwid = tryNwid; - break; - } - } - if (!nwid) { - res.status = 503; - return; - } - setContent(req, res, networkUpdateFromPostData(nwid, req.body)); - }; - s.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); - s.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); - sv6.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); - sv6.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted); - - auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1].str(); - uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); - - res.status = 200; - setContent(req, res, networkUpdateFromPostData(nwid, req.body)); - }; - s.Put(networkPath, networkPost); - s.Post(networkPath, networkPost); - sv6.Put(networkPath, networkPost); - sv6.Post(networkPath, networkPost); - - auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1].str(); - uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); - - json network; - if (!_db.get(nwid,network)) { - res.status = 404; - return; - } - - _db.eraseNetwork(nwid); - setContent(req, res, network.dump()); - }; - s.Delete(networkPath, networkDelete); - sv6.Delete(networkPath, networkDelete); - - auto memberListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1]; - uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); - json network; - if (!_db.get(nwid, network)) { - res.status = 404; - return; - } - - json out = json::object(); - std::vector memTmp; - if (_db.get(nwid, network, memTmp)) { - for (auto m = memTmp.begin(); m != memTmp.end(); ++m) { - int revision = OSUtils::jsonInt((*m)["revision"], 0); - std::string id = OSUtils::jsonString((*m)["id"], ""); - if (id.length() == 10) { - out[id] = revision; - } - } - } - - setContent(req, res, out.dump()); - }; - s.Get(memberListPath, memberListGet); - sv6.Get(memberListPath, memberListGet); - - auto memberGet = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1]; - auto memberID = req.matches[2]; - uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str()); - uint64_t memid = Utils::hexStrToU64(memberID.str().c_str()); - json network; - json member; - if (!_db.get(nwid, network, memid, member)) { - res.status = 404; - return; - } - - setContent(req, res, member.dump()); - }; - s.Get(memberPath, memberGet); - sv6.Get(memberPath, memberGet); - - auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1].str(); - auto memberID = req.matches[2].str(); - uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); - uint64_t memid = Utils::hexStrToU64(memberID.c_str()); - json network; - json member; - _db.get(nwid, network, memid, member); - DB::initMember(member); - - json b = OSUtils::jsonParse(req.body); - - if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"], false); - if (b.count("noAutoAssignIps")) member["noAutoAssignIps"] = OSUtils::jsonBool(b["noAutoAssignIps"], false); - if (b.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = (uint64_t)OSUtils::jsonInt(b["authenticationExpiryTime"], 0ULL); - if (b.count("authenticationURL")) member["authenticationURL"] = OSUtils::jsonString(b["authenticationURL"], ""); - - if (b.count("remoteTraceTarget")) { - const std::string rtt(OSUtils::jsonString(b["remoteTraceTarget"],"")); - if (rtt.length() == 10) { - member["remoteTraceTarget"] = rtt; - } else { - member["remoteTraceTarget"] = json(); - } - } - if (b.count("remoteTraceLevel")) member["remoteTraceLevel"] = OSUtils::jsonInt(b["remoteTraceLevel"],0ULL); - - if (b.count("authorized")) { - const bool newAuth = OSUtils::jsonBool(b["authorized"],false); - if (newAuth != OSUtils::jsonBool(member["authorized"],false)) { - member["authorized"] = newAuth; - member[((newAuth) ? "lastAuthorizedTime" : "lastDeauthorizedTime")] = OSUtils::now(); - if (newAuth) { - member["lastAuthorizedCredentialType"] = "api"; - member["lastAuthorizedCredential"] = json(); - } - } - } - - if (b.count("ipAssignments")) { - json &ipa = b["ipAssignments"]; - if (ipa.is_array()) { - json mipa(json::array()); - for(unsigned long i=0;i= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - } - member["ipAssignments"] = mipa; - } - } - - if (b.count("tags")) { - json &tags = b["tags"]; - if (tags.is_array()) { - std::map mtags; - for(unsigned long i=0;i::iterator t(mtags.begin());t!=mtags.end();++t) { - json ta = json::array(); - ta.push_back(t->first); - ta.push_back(t->second); - mtagsa.push_back(ta); - if (mtagsa.size() >= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - member["tags"] = mtagsa; - } - } - - if (b.count("capabilities")) { - json &capabilities = b["capabilities"]; - if (capabilities.is_array()) { - json mcaps = json::array(); - for(unsigned long i=0;i= ZT_CONTROLLER_MAX_ARRAY_SIZE) - break; - } - std::sort(mcaps.begin(),mcaps.end()); - mcaps.erase(std::unique(mcaps.begin(),mcaps.end()),mcaps.end()); - member["capabilities"] = mcaps; - } - } - - member["id"] = memberID; - member["address"] = memberID; - member["nwid"] = networkID; - - DB::cleanMember(member); - _db.save(member, true); - - setContent(req, res, member.dump()); - }; - s.Put(memberPath, memberPost); - s.Post(memberPath, memberPost); - sv6.Put(memberPath, memberPost); - sv6.Post(memberPath, memberPost); - - auto memberDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) { - auto networkID = req.matches[1].str(); - auto memberID = req.matches[2].str(); - - uint64_t nwid = Utils::hexStrToU64(networkID.c_str()); - uint64_t address = Utils::hexStrToU64(memberID.c_str()); - json network, member; - - if (!_db.get(nwid, network, address, member)) { - res.status = 404; - return; - } - - if (!member.size()) { - res.status = 404; - return; - } - - _db.eraseMember(nwid, address); - - setContent(req, res, member.dump()); - }; - s.Delete(memberPath, memberDelete); - sv6.Delete(memberPath, memberDelete); -} - -void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt) -{ - static volatile unsigned long idCounter = 0; - char id[128],tmp[128]; - std::string k,v; - - try { - // Convert Dictionary into JSON object - json d; - char *saveptr = (char *)0; - for(char *l=Utils::stok(rt.data,"\n",&saveptr);(l);l=Utils::stok((char *)0,"\n",&saveptr)) { - char *eq = strchr(l,'='); - if (eq > l) { - k.assign(l,(unsigned long)(eq - l)); - v.clear(); - ++eq; - while (*eq) { - if (*eq == '\\') { - ++eq; - if (*eq) { - switch(*eq) { - case 'r': v.push_back('\r'); break; - case 'n': v.push_back('\n'); break; - case '0': v.push_back((char)0); break; - case 'e': v.push_back('='); break; - default: v.push_back(*eq); break; - } - ++eq; - } - } else { - v.push_back(*(eq++)); - } - } - if ((k.length() > 0)&&(v.length() > 0)) - d[k] = v; - } - } - - const int64_t now = OSUtils::now(); - OSUtils::ztsnprintf(id,sizeof(id),"%.10llx-%.16llx-%.10llx-%.4x",_signingId.address().toInt(),now,rt.origin,(unsigned int)(idCounter++ & 0xffff)); - d["id"] = id; - d["objtype"] = "trace"; - d["ts"] = now; - d["nodeId"] = Utils::hex10(rt.origin,tmp); - _db.save(d,true); - } catch ( ... ) { - // drop invalid trace messages if an error occurs - } -} - -void EmbeddedNetworkController::onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network) -{ - // Send an update to all members of the network that are online - const int64_t now = OSUtils::now(); - std::lock_guard l(_memberStatus_l); - for(auto i=_memberStatus.begin();i!=_memberStatus.end();++i) { - if ((i->first.networkId == networkId)&&(i->second.online(now))&&(i->second.lastRequestMetaData)) - request(networkId,InetAddress(),0,i->second.identity,i->second.lastRequestMetaData); - } -} - -void EmbeddedNetworkController::onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member) -{ - // Push update to member if online - try { - std::lock_guard l(_memberStatus_l); - _MemberStatus &ms = _memberStatus[_MemberStatusKey(networkId,memberId)]; - if ((ms.online(OSUtils::now()))&&(ms.lastRequestMetaData)) - request(networkId,InetAddress(),0,ms.identity,ms.lastRequestMetaData); - } catch ( ... ) {} -} - -void EmbeddedNetworkController::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId) -{ - const int64_t now = OSUtils::now(); - Revocation rev((uint32_t)_node->prng(),networkId,0,now,ZT_REVOCATION_FLAG_FAST_PROPAGATE,Address(memberId),Revocation::CREDENTIAL_TYPE_COM); - rev.sign(_signingId); - { - std::lock_guard l(_memberStatus_l); - for(auto i=_memberStatus.begin();i!=_memberStatus.end();++i) { - if ((i->first.networkId == networkId)&&(i->second.online(now))) - _node->ncSendRevocation(Address(i->first.nodeId),rev); - } - } -} - -void EmbeddedNetworkController::_request( - uint64_t nwid, - const InetAddress &fromAddr, - uint64_t requestPacketId, - const Identity &identity, - const Dictionary &metaData) -{ - Metrics::network_config_request++; - auto tid = std::this_thread::get_id(); - std::stringstream ss; ss << tid; - std::string threadID = ss.str(); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b1 = _member_status_lookup.Add({{"thread", threadID}}); - auto c1 = _member_status_lookup_count.Add({{"thread", threadID}}); - c1++; - b1.start(); -#endif - - char nwids[24]; - DB::NetworkSummaryInfo ns; - json network,member; - - if (((!_signingId)||(!_signingId.hasPrivate()))||(_signingId.address().toInt() != (nwid >> 24))||(!_sender)) { - return; - } - - const int64_t now = OSUtils::now(); - -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b1.stop(); - auto b2 = _node_is_online.Add({{"thread",threadID}}); - auto c2 = _node_is_online_count.Add({{"thread",threadID}}); - c2++; - b2.start(); -#endif - _db.nodeIsOnline(nwid,identity.address().toInt(),fromAddr); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b2.stop(); - - auto b3 = _get_and_init_member.Add({{"thread", threadID}}); - auto c3 = _get_and_init_member_count.Add({{"thread",threadID}}); - c3++; - b3.start(); -#endif - Utils::hex(nwid,nwids); - _db.get(nwid,network,identity.address().toInt(),member,ns); - if ((!network.is_object())||(network.empty())) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND, nullptr, 0); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b3.stop(); -#endif - return; - } - const bool newMember = ((!member.is_object())||(member.empty())); - DB::initMember(member); - _MemberStatusKey msk(nwid,identity.address().toInt()); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b3.stop(); -#endif - - { -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b4 = _have_identity.Add({{"thread",threadID}}); - auto c4 = _have_identity_count.Add({{"thread",threadID}}); - c4++; - b4.start(); -#endif - const std::string haveIdStr(OSUtils::jsonString(member["identity"],"")); - if (haveIdStr.length() > 0) { - // If we already know this member's identity perform a full compare. This prevents - // a "collision" from being able to auth onto our network in place of an already - // known member. - try { - if (Identity(haveIdStr.c_str()) != identity) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); - #ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b4.stop(); - #endif - return; - } - } catch ( ... ) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); - #ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b4.stop(); - #endif - return; - } - } else { - // If we do not yet know this member's identity, learn it. - char idtmp[1024]; - member["identity"] = identity.toString(false,idtmp); - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b4.stop(); -#endif - } - - // These are always the same, but make sure they are set - { - char tmpid[128]; - const std::string addrs(identity.address().toString(tmpid)); - member["id"] = addrs; - member["address"] = addrs; - member["nwid"] = nwids; - } - - // Determine whether and how member is authorized -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b5 = _determine_auth.Add({{"thread",threadID}}); - auto c5 = _determine_auth_count.Add({{"thread",threadID}}); - c5++; - b5.start(); -#endif - bool authorized = false; - bool autoAuthorized = false; - json autoAuthCredentialType,autoAuthCredential; - if (OSUtils::jsonBool(member["authorized"],false)) { - authorized = true; - } else if (!OSUtils::jsonBool(network["private"],true)) { - authorized = true; - autoAuthorized = true; - autoAuthCredentialType = "public"; - } else { - char presentedAuth[512]; - if (metaData.get(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_AUTH,presentedAuth,sizeof(presentedAuth)) > 0) { - presentedAuth[511] = (char)0; // sanity check - if ((strlen(presentedAuth) > 6)&&(!strncmp(presentedAuth,"token:",6))) { - const char *const presentedToken = presentedAuth + 6; - json authTokens(network["authTokens"]); - json &tokenExpires = authTokens[presentedToken]; - if (tokenExpires.is_number()) { - if ((tokenExpires == 0)||(tokenExpires > now)) { - authorized = true; - autoAuthorized = true; - autoAuthCredentialType = "token"; - autoAuthCredential = presentedToken; - } - } - } - } - } - - // If we auto-authorized, update member record - if ((autoAuthorized)&&(authorized)) { - member["authorized"] = true; - member["lastAuthorizedTime"] = now; - member["lastAuthorizedCredentialType"] = autoAuthCredentialType; - member["lastAuthorizedCredential"] = autoAuthCredential; - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b5.stop(); -#endif - - // Should we check SSO Stuff? - // If network is configured with SSO, and the member is not marked exempt: yes - // Otherwise no, we use standard auth logic. -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b6 = _sso_check.Add({{"thread",threadID}}); - auto c6 = _sso_check_count.Add({{"thread",threadID}}); - c6++; - b6.start(); -#endif - AuthInfo info; - int64_t authenticationExpiryTime = -1; - bool networkSSOEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); - bool memberSSOExempt = OSUtils::jsonBool(member["ssoExempt"], false); - if (networkSSOEnabled && !memberSSOExempt) { - authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); - info = _db.getSSOAuthInfo(member, _ssoRedirectURL); - assert(info.enabled == networkSSOEnabled); - if (authenticationExpiryTime <= now) { - if (info.version == 0) { - Dictionary<4096> authInfo; - authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, (uint64_t)0ULL); - authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str()); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); - } else if (info.version == 1) { - Dictionary<8192> authInfo; - authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, info.version); - authInfo.add(ZT_AUTHINFO_DICT_KEY_ISSUER_URL, info.issuerURL.c_str()); - authInfo.add(ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL, info.centralAuthURL.c_str()); - authInfo.add(ZT_AUTHINFO_DICT_KEY_NONCE, info.ssoNonce.c_str()); - authInfo.add(ZT_AUTHINFO_DICT_KEY_STATE, info.ssoState.c_str()); - authInfo.add(ZT_AUTHINFO_DICT_KEY_CLIENT_ID, info.ssoClientID.c_str()); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); - } - DB::cleanMember(member); - _db.save(member,true); - #ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b6.stop(); - #endif - return; - } - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b6.stop(); - - auto b7 = _auth_check.Add({{"thread",threadID}}); - auto c7 = _auth_check_count.Add({{"thread",threadID}}); - c7++; - b7.start(); -#endif - if (authorized) { - // Update version info and meta-data if authorized and if this is a genuine request - if (requestPacketId) { - const uint64_t vMajor = metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MAJOR_VERSION,0); - const uint64_t vMinor = metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MINOR_VERSION,0); - const uint64_t vRev = metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_REVISION,0); - const uint64_t vProto = metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_PROTOCOL_VERSION,0); - - member["vMajor"] = vMajor; - member["vMinor"] = vMinor; - member["vRev"] = vRev; - member["vProto"] = vProto; - - { - std::lock_guard l(_memberStatus_l); - _MemberStatus &ms = _memberStatus[msk]; - ms.authenticationExpiryTime = authenticationExpiryTime; - ms.vMajor = (int)vMajor; - ms.vMinor = (int)vMinor; - ms.vRev = (int)vRev; - ms.vProto = (int)vProto; - ms.lastRequestMetaData = metaData; - ms.identity = identity; - } - - if (authenticationExpiryTime > 0) { - std::lock_guard l(_expiringSoon_l); - _expiringSoon.insert(std::pair(authenticationExpiryTime, msk)); - } - } - } else { - // If they are not authorized, STOP! - DB::cleanMember(member); - _db.save(member,true); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); - #ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b7.stop(); - #endif - return; - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b7.stop(); -#endif - - // ------------------------------------------------------------------------- - // If we made it this far, they are authorized (and authenticated). - // ------------------------------------------------------------------------- - - // Default timeout: 15 minutes. Maximum: two hours. Can be specified by an optional field in the network config - // if something longer than 15 minutes is desired. Minimum is 5 minutes since shorter than that would be flaky. -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b8 = _json_schlep.Add({{"thread",threadID}}); - auto c8 = _json_schlep_count.Add({{"thread", threadID}}); - c8++; - b8.start(); -#endif - int64_t credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_DFL_MAX_DELTA; - if (network.contains("certificateTimeoutWindowSize")) { - credentialtmd = (int64_t)network["certificateTimeoutWindowSize"]; - } - credentialtmd = std::max(std::min(credentialtmd, ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA), ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MIN_MAX_DELTA); - - std::unique_ptr nc(new NetworkConfig()); - - nc->networkId = nwid; - nc->type = OSUtils::jsonBool(network["private"],true) ? ZT_NETWORK_TYPE_PRIVATE : ZT_NETWORK_TYPE_PUBLIC; - nc->timestamp = now; - nc->credentialTimeMaxDelta = credentialtmd; - nc->revision = OSUtils::jsonInt(network["revision"],0ULL); - nc->issuedTo = identity.address(); - if (OSUtils::jsonBool(network["enableBroadcast"],true)) nc->flags |= ZT_NETWORKCONFIG_FLAG_ENABLE_BROADCAST; - Utils::scopy(nc->name,sizeof(nc->name),OSUtils::jsonString(network["name"],"").c_str()); - nc->mtu = std::max(std::min((unsigned int)OSUtils::jsonInt(network["mtu"],ZT_DEFAULT_MTU),(unsigned int)ZT_MAX_MTU),(unsigned int)ZT_MIN_MTU); - nc->multicastLimit = (unsigned int)OSUtils::jsonInt(network["multicastLimit"],32ULL); - - nc->ssoEnabled = networkSSOEnabled; //OSUtils::jsonBool(network["ssoEnabled"], false); - nc->ssoVersion = info.version; - - if (info.version == 0) { - nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); - if (!info.authenticationURL.empty()) { - Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), info.authenticationURL.c_str()); - } - } - else if (info.version == 1) { - nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); - if (!info.authenticationURL.empty()) { - Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), info.authenticationURL.c_str()); - } - if (!info.centralAuthURL.empty()) { - Utils::scopy(nc->centralAuthURL, sizeof(nc->centralAuthURL), info.centralAuthURL.c_str()); - } - if (!info.issuerURL.empty()) { - #ifdef ZT_DEBUG - fprintf(stderr, "copying issuerURL to nc: %s\n", info.issuerURL.c_str()); - #endif - Utils::scopy(nc->issuerURL, sizeof(nc->issuerURL), info.issuerURL.c_str()); - } - if (!info.ssoNonce.empty()) { - Utils::scopy(nc->ssoNonce, sizeof(nc->ssoNonce), info.ssoNonce.c_str()); - } - if (!info.ssoState.empty()) { - Utils::scopy(nc->ssoState, sizeof(nc->ssoState), info.ssoState.c_str()); - } - if (!info.ssoClientID.empty()) { - Utils::scopy(nc->ssoClientID, sizeof(nc->ssoClientID), info.ssoClientID.c_str()); - } - } - - std::string rtt(OSUtils::jsonString(member["remoteTraceTarget"],"")); - if (rtt.length() == 10) { - nc->remoteTraceTarget = Address(Utils::hexStrToU64(rtt.c_str())); - nc->remoteTraceLevel = (Trace::Level)OSUtils::jsonInt(member["remoteTraceLevel"],0ULL); - } else { - rtt = OSUtils::jsonString(network["remoteTraceTarget"],""); - if (rtt.length() == 10) { - nc->remoteTraceTarget = Address(Utils::hexStrToU64(rtt.c_str())); - } else { - nc->remoteTraceTarget.zero(); - } - nc->remoteTraceLevel = (Trace::Level)OSUtils::jsonInt(network["remoteTraceLevel"],0ULL); - } - - for(std::vector
    ::const_iterator ab(ns.activeBridges.begin());ab!=ns.activeBridges.end();++ab) { - nc->addSpecialist(*ab,ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE); - } - - json &v4AssignMode = network["v4AssignMode"]; - json &v6AssignMode = network["v6AssignMode"]; - json &ipAssignmentPools = network["ipAssignmentPools"]; - json &routes = network["routes"]; - json &rules = network["rules"]; - json &capabilities = network["capabilities"]; - json &tags = network["tags"]; - json &memberCapabilities = member["capabilities"]; - json &memberTags = member["tags"]; - json &dns = network["dns"]; - - //fprintf(stderr, "IP Assignment Pools for Network %s: %s\n", nwids, OSUtils::jsonDump(ipAssignmentPools, 2).c_str()); - - if (metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_RULES_ENGINE_REV,0) <= 0) { - // Old versions with no rules engine support get an allow everything rule. - // Since rules are enforced bidirectionally, newer versions *will* still - // enforce rules on the inbound side. - nc->ruleCount = 1; - nc->rules[0].t = ZT_NETWORK_RULE_ACTION_ACCEPT; - } else { - if (rules.is_array()) { - for(unsigned long i=0;iruleCount >= ZT_MAX_NETWORK_RULES) - break; - if (_parseRule(rules[i],nc->rules[nc->ruleCount])) - ++nc->ruleCount; - } - } - - std::map< uint64_t,json * > capsById; - if (!memberCapabilities.is_array()) - memberCapabilities = json::array(); - if (capabilities.is_array()) { - for(unsigned long i=0;i::const_iterator ctmp = capsById.find(capId); - if (ctmp != capsById.end()) { - json *cap = ctmp->second; - if ((cap)&&(cap->is_object())&&(!cap->empty())) { - ZT_VirtualNetworkRule capr[ZT_MAX_CAPABILITY_RULES]; - unsigned int caprc = 0; - json &caprj = (*cap)["rules"]; - if ((caprj.is_array())&&(!caprj.empty())) { - for(unsigned long j=0;j= ZT_MAX_CAPABILITY_RULES) - break; - if (_parseRule(caprj[j],capr[caprc])) - ++caprc; - } - } - nc->capabilities[nc->capabilityCount] = Capability((uint32_t)capId,nwid,now,1,capr,caprc); - if (nc->capabilities[nc->capabilityCount].sign(_signingId,identity.address())) - ++nc->capabilityCount; - if (nc->capabilityCount >= ZT_MAX_NETWORK_CAPABILITIES) - break; - } - } - } - - std::map< uint32_t,uint32_t > memberTagsById; - if (memberTags.is_array()) { - for(unsigned long i=0;i::const_iterator t(memberTagsById.begin());t!=memberTagsById.end();++t) { - if (nc->tagCount >= ZT_MAX_NETWORK_TAGS) - break; - nc->tags[nc->tagCount] = Tag(nwid,now,identity.address(),t->first,t->second); - if (nc->tags[nc->tagCount].sign(_signingId)) - ++nc->tagCount; - } - } - - if (routes.is_array()) { - for(unsigned long i=0;irouteCount >= ZT_MAX_NETWORK_ROUTES) - break; - json &route = routes[i]; - json &target = route["target"]; - json &via = route["via"]; - if (target.is_string()) { - const InetAddress t(target.get().c_str()); - InetAddress v; - if (via.is_string()) v.fromString(via.get().c_str()); - if ((t.ss_family == AF_INET)||(t.ss_family == AF_INET6)) { - ZT_VirtualNetworkRoute *r = &(nc->routes[nc->routeCount]); - *(reinterpret_cast(&(r->target))) = t; - if (v.ss_family == t.ss_family) - *(reinterpret_cast(&(r->via))) = v; - ++nc->routeCount; - } - } - } - } - - const bool noAutoAssignIps = OSUtils::jsonBool(member["noAutoAssignIps"],false); - - if ((v6AssignMode.is_object())&&(!noAutoAssignIps)) { - if ((OSUtils::jsonBool(v6AssignMode["rfc4193"],false))&&(nc->staticIpCount < ZT_MAX_ZT_ASSIGNED_ADDRESSES)) { - nc->staticIps[nc->staticIpCount++] = InetAddress::makeIpv6rfc4193(nwid,identity.address().toInt()); - nc->flags |= ZT_NETWORKCONFIG_FLAG_ENABLE_IPV6_NDP_EMULATION; - } - if ((OSUtils::jsonBool(v6AssignMode["6plane"],false))&&(nc->staticIpCount < ZT_MAX_ZT_ASSIGNED_ADDRESSES)) { - nc->staticIps[nc->staticIpCount++] = InetAddress::makeIpv66plane(nwid,identity.address().toInt()); - nc->flags |= ZT_NETWORKCONFIG_FLAG_ENABLE_IPV6_NDP_EMULATION; - } - } - - bool haveManagedIpv4AutoAssignment = false; - bool haveManagedIpv6AutoAssignment = false; // "special" NDP-emulated address types do not count - json ipAssignments = member["ipAssignments"]; // we want to make a copy - if (ipAssignments.is_array()) { - for(unsigned long i=0;irouteCount;++rk) { - if (reinterpret_cast(&(nc->routes[rk].target))->containsAddress(ip)) { - const int nb = (int)(reinterpret_cast(&(nc->routes[rk].target))->netmaskBits()); - if (nb > routedNetmaskBits) - routedNetmaskBits = nb; - } - } - - if (routedNetmaskBits >= 0) { - if (nc->staticIpCount < ZT_MAX_ZT_ASSIGNED_ADDRESSES) { - ip.setPort(routedNetmaskBits); - nc->staticIps[nc->staticIpCount++] = ip; - } - if (ip.ss_family == AF_INET) - haveManagedIpv4AutoAssignment = true; - else if (ip.ss_family == AF_INET6) - haveManagedIpv6AutoAssignment = true; - } - } - } - } else { - ipAssignments = json::array(); - } - - if ( (ipAssignmentPools.is_array()) && ((v6AssignMode.is_object())&&(OSUtils::jsonBool(v6AssignMode["zt"],false))) && (!haveManagedIpv6AutoAssignment) && (!noAutoAssignIps) ) { - for(unsigned long p=0;((p s[1])&&((e[1] - s[1]) >= 0xffffffffffULL)) { - // First see if we can just cram a ZeroTier ID into the higher 64 bits. If so do that. - xx[0] = Utils::hton(x[0]); - xx[1] = Utils::hton(x[1] + identity.address().toInt()); - } else { - // Otherwise pick random addresses -- this technically doesn't explore the whole range if the lower 64 bit range is >= 1 but that won't matter since that would be huge anyway - Utils::getSecureRandom((void *)xx,16); - if ((e[0] > s[0])) - xx[0] %= (e[0] - s[0]); - else xx[0] = 0; - if ((e[1] > s[1])) - xx[1] %= (e[1] - s[1]); - else xx[1] = 0; - xx[0] = Utils::hton(x[0] + xx[0]); - xx[1] = Utils::hton(x[1] + xx[1]); - } - - InetAddress ip6((const void *)xx,16,0); - - // Check if this IP is within a local-to-Ethernet routed network - int routedNetmaskBits = 0; - for(unsigned int rk=0;rkrouteCount;++rk) { - if ( (!nc->routes[rk].via.ss_family) && (nc->routes[rk].target.ss_family == AF_INET6) && (reinterpret_cast(&(nc->routes[rk].target))->containsAddress(ip6)) ) - routedNetmaskBits = reinterpret_cast(&(nc->routes[rk].target))->netmaskBits(); - } - - // If it's routed, then try to claim and assign it and if successful end loop - if ( (routedNetmaskBits > 0) && (!std::binary_search(ns.allocatedIps.begin(),ns.allocatedIps.end(),ip6)) ) { - char tmpip[64]; - const std::string ipStr(ip6.toIpString(tmpip)); - if (std::find(ipAssignments.begin(),ipAssignments.end(),ipStr) == ipAssignments.end()) { - ipAssignments.push_back(ipStr); - member["ipAssignments"] = ipAssignments; - ip6.setPort((unsigned int)routedNetmaskBits); - if (nc->staticIpCount < ZT_MAX_ZT_ASSIGNED_ADDRESSES) - nc->staticIps[nc->staticIpCount++] = ip6; - haveManagedIpv6AutoAssignment = true; - break; - } - } - } - } - } - } - } - - if ( (ipAssignmentPools.is_array()) && ((v4AssignMode.is_object())&&(OSUtils::jsonBool(v4AssignMode["zt"],false))) && (!haveManagedIpv4AutoAssignment) && (!noAutoAssignIps) ) { - for(unsigned long p=0;((p(&ipRangeStartIA)->sin_addr.s_addr)); - uint32_t ipRangeEnd = Utils::ntoh((uint32_t)(reinterpret_cast(&ipRangeEndIA)->sin_addr.s_addr)); - - if ((ipRangeEnd < ipRangeStart)||(ipRangeStart == 0)) - continue; - uint32_t ipRangeLen = ipRangeEnd - ipRangeStart; - - // Start with the LSB of the member's address - uint32_t ipTrialCounter = (uint32_t)(identity.address().toInt() & 0xffffffff); - - for(uint32_t k=ipRangeStart,trialCount=0;((k<=ipRangeEnd)&&(trialCount < 1000));++k,++trialCount) { - uint32_t ip = (ipRangeLen > 0) ? (ipRangeStart + (ipTrialCounter % ipRangeLen)) : ipRangeStart; - ++ipTrialCounter; - if ((ip & 0x000000ff) == 0x000000ff) { - continue; // don't allow addresses that end in .255 - } - - // Check if this IP is within a local-to-Ethernet routed network - int routedNetmaskBits = -1; - for(unsigned int rk=0;rkrouteCount;++rk) { - if (nc->routes[rk].target.ss_family == AF_INET) { - uint32_t targetIp = Utils::ntoh((uint32_t)(reinterpret_cast(&(nc->routes[rk].target))->sin_addr.s_addr)); - int targetBits = Utils::ntoh((uint16_t)(reinterpret_cast(&(nc->routes[rk].target))->sin_port)); - if ((ip & (0xffffffff << (32 - targetBits))) == targetIp) { - routedNetmaskBits = targetBits; - break; - } - } - } - - // If it's routed, then try to claim and assign it and if successful end loop - const InetAddress ip4(Utils::hton(ip),0); - if ( (routedNetmaskBits > 0) && (!std::binary_search(ns.allocatedIps.begin(),ns.allocatedIps.end(),ip4)) ) { - char tmpip[64]; - const std::string ipStr(ip4.toIpString(tmpip)); - if (std::find(ipAssignments.begin(),ipAssignments.end(),ipStr) == ipAssignments.end()) { - ipAssignments.push_back(ipStr); - member["ipAssignments"] = ipAssignments; - if (nc->staticIpCount < ZT_MAX_ZT_ASSIGNED_ADDRESSES) { - struct sockaddr_in *const v4ip = reinterpret_cast(&(nc->staticIps[nc->staticIpCount++])); - v4ip->sin_family = AF_INET; - v4ip->sin_port = Utils::hton((uint16_t)routedNetmaskBits); - v4ip->sin_addr.s_addr = Utils::hton(ip); - } - haveManagedIpv4AutoAssignment = true; - break; - } - } - } - } - } - } - } - - if(dns.is_object()) { - std::string domain = OSUtils::jsonString(dns["domain"],""); - memcpy(nc->dns.domain, domain.c_str(), domain.size()); - json &addrArray = dns["servers"]; - if (addrArray.is_array()) { - for(unsigned int j = 0; j < addrArray.size() && j < ZT_MAX_DNS_SERVERS; ++j) { - json &addr = addrArray[j]; - nc->dns.server_addr[j] = InetAddress(OSUtils::jsonString(addr,"").c_str()); - } - } - } else { - dns = json::object(); - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b8.stop(); -#endif - - // Issue a certificate of ownership for all static IPs -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - auto b9 = _issue_certificate.Add({{"thread",threadID}}); - auto c9 = _issue_certificate_count.Add({{"thread",threadID}}); - c9++; - b9.start(); -#endif - if (nc->staticIpCount) { - nc->certificatesOfOwnership[0] = CertificateOfOwnership(nwid,now,identity.address(),1); - for(unsigned int i=0;istaticIpCount;++i) { - nc->certificatesOfOwnership[0].addThing(nc->staticIps[i]); - } - nc->certificatesOfOwnership[0].sign(_signingId); - nc->certificateOfOwnershipCount = 1; - } - - CertificateOfMembership com(now,credentialtmd,nwid,identity); - if (com.sign(_signingId)) { - nc->com = com; - } else { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR, nullptr, 0); - #ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b9.stop(); - #endif - return; - } -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b9.stop(); - - auto b10 = _save_member.Add({{"thread",threadID}}); - auto c10 = _save_member_count.Add({{"thread",threadID}}); - c10++; - b10.start(); -#endif - DB::cleanMember(member); - _db.save(member,true); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b10.stop(); - - auto b11 = _send_netconf.Add({{"thread",threadID}}); - auto c11 = _send_netconf_count.Add({{"thread",threadID}}); - c11++; - b11.start(); -#endif - _sender->ncSendConfig(nwid,requestPacketId,identity.address(),*(nc.get()),metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_VERSION,0) < 6); -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - b11.stop(); -#endif -} - -void EmbeddedNetworkController::_startThreads() -{ - std::lock_guard l(_threads_l); - if (!_threads.empty()) { - return; - } - const long hwc = std::max((long)std::thread::hardware_concurrency(),(long)1); - for(long t=0;t::STOP) { - break; - } else if (timedWaitResult == BlockingQueue<_RQEntry *>::OK) { - if (qe) { - try { - _request(qe->nwid,qe->fromAddr,qe->requestPacketId,qe->identity,qe->metaData); - } catch (std::exception &e) { - fprintf(stderr,"ERROR: exception in controller request handling thread: %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: exception in controller request handling thread: unknown exception" ZT_EOL_S); - } - delete qe; - qe = nullptr; - } - } - } - Metrics::network_config_request_threads--; - }); - } -} - -void EmbeddedNetworkController::_ssoExpiryThread() { - while(_ssoExpiryRunning) { - std::vector<_MemberStatusKey> expired; - nlohmann::json network, member; - int64_t now = OSUtils::now(); - { - std::lock_guard l(_expiringSoon_l); - for(auto s=_expiringSoon.begin();s!=_expiringSoon.end();) { - Metrics::sso_expiration_checks++; - const int64_t when = s->first; - if (when <= now) { - // The user may have re-authorized, so we must actually look it up and check. - network.clear(); - member.clear(); - if (_db.get(s->second.networkId, network, s->second.nodeId, member)) { - int64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); - if (authenticationExpiryTime <= now) { - expired.push_back(s->second); - } - } - s = _expiringSoon.erase(s); - } else { - // Don't bother going further into the future than necessary. - break; - } - } - } - for(auto e=expired.begin();e!=expired.end();++e) { - Metrics::sso_member_deauth++; - onNetworkMemberDeauthorize(nullptr, e->networkId, e->nodeId); - } - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } -} - -} // namespace ZeroTier diff --git a/zerotier-one/controller/EmbeddedNetworkController.hpp b/zerotier-one/controller/EmbeddedNetworkController.hpp deleted file mode 100644 index 4ea00b65..00000000 --- a/zerotier-one/controller/EmbeddedNetworkController.hpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_SQLITENETWORKCONTROLLER_HPP -#define ZT_SQLITENETWORKCONTROLLER_HPP - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../node/Constants.hpp" -#include "../node/NetworkController.hpp" -#include "../node/Utils.hpp" -#include "../node/Address.hpp" -#include "../node/InetAddress.hpp" - -#include "../osdep/OSUtils.hpp" -#include "../osdep/Thread.hpp" -#include "../osdep/BlockingQueue.hpp" - -#include - -#include - -#include "DB.hpp" -#include "DBMirrorSet.hpp" - -namespace ZeroTier { - -class Node; -struct RedisConfig; - -class EmbeddedNetworkController : public NetworkController,public DB::ChangeListener -{ -public: - /** - * @param node Parent node - * @param dbPath Database path (file path or database credentials) - */ - EmbeddedNetworkController(Node *node,const char *ztPath,const char *dbPath, int listenPort, RedisConfig *rc); - virtual ~EmbeddedNetworkController(); - - virtual void init(const Identity &signingId,Sender *sender); - - void setSSORedirectURL(const std::string &url); - - virtual void request( - uint64_t nwid, - const InetAddress &fromAddr, - uint64_t requestPacketId, - const Identity &identity, - const Dictionary &metaData); - - void configureHTTPControlPlane( - httplib::Server &s, - httplib::Server &sV6, - const std::function); - - void handleRemoteTrace(const ZT_RemoteTrace &rt); - - virtual void onNetworkUpdate(const void *db,uint64_t networkId,const nlohmann::json &network); - virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member); - virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId); - -private: - void _request(uint64_t nwid,const InetAddress &fromAddr,uint64_t requestPacketId,const Identity &identity,const Dictionary &metaData); - void _startThreads(); - void _ssoExpiryThread(); - - std::string networkUpdateFromPostData(uint64_t networkID, const std::string &body); - - struct _RQEntry - { - uint64_t nwid; - uint64_t requestPacketId; - InetAddress fromAddr; - Identity identity; - Dictionary metaData; - enum { - RQENTRY_TYPE_REQUEST = 0 - } type; - }; - - struct _MemberStatusKey - { - _MemberStatusKey() : networkId(0),nodeId(0) {} - _MemberStatusKey(const uint64_t nwid,const uint64_t nid) : networkId(nwid),nodeId(nid) {} - uint64_t networkId; - uint64_t nodeId; - inline bool operator==(const _MemberStatusKey &k) const { return ((k.networkId == networkId)&&(k.nodeId == nodeId)); } - inline bool operator<(const _MemberStatusKey &k) const { return (k.networkId < networkId) || ((k.networkId == networkId)&&(k.nodeId < nodeId)); } - }; - struct _MemberStatus - { - _MemberStatus() : lastRequestTime(0),authenticationExpiryTime(-1),vMajor(-1),vMinor(-1),vRev(-1),vProto(-1) {} - int64_t lastRequestTime; - int64_t authenticationExpiryTime; - int vMajor,vMinor,vRev,vProto; - Dictionary lastRequestMetaData; - Identity identity; - inline bool online(const int64_t now) const { return ((now - lastRequestTime) < (ZT_NETWORK_AUTOCONF_DELAY * 2)); } - }; - struct _MemberStatusHash - { - inline std::size_t operator()(const _MemberStatusKey &networkIdNodeId) const - { - return (std::size_t)(networkIdNodeId.networkId + networkIdNodeId.nodeId); - } - }; - - const int64_t _startTime; - int _listenPort; - Node *const _node; - std::string _ztPath; - std::string _path; - Identity _signingId; - std::string _signingIdAddressString; - NetworkController::Sender *_sender; - - DBMirrorSet _db; - BlockingQueue< _RQEntry * > _queue; - - std::vector _threads; - std::mutex _threads_l; - - std::unordered_map< _MemberStatusKey,_MemberStatus,_MemberStatusHash > _memberStatus; - std::mutex _memberStatus_l; - - std::set< std::pair > _expiringSoon; - std::mutex _expiringSoon_l; - - RedisConfig *_rc; - std::string _ssoRedirectURL; - - bool _ssoExpiryRunning; - std::thread _ssoExpiry; - -#ifdef CENTRAL_CONTROLLER_REQUEST_BENCHMARK - prometheus::simpleapi::benchmark_family_t _member_status_lookup; - prometheus::simpleapi::counter_family_t _member_status_lookup_count; - prometheus::simpleapi::benchmark_family_t _node_is_online; - prometheus::simpleapi::counter_family_t _node_is_online_count; - prometheus::simpleapi::benchmark_family_t _get_and_init_member; - prometheus::simpleapi::counter_family_t _get_and_init_member_count; - prometheus::simpleapi::benchmark_family_t _have_identity; - prometheus::simpleapi::counter_family_t _have_identity_count; - prometheus::simpleapi::benchmark_family_t _determine_auth; - prometheus::simpleapi::counter_family_t _determine_auth_count; - prometheus::simpleapi::benchmark_family_t _sso_check; - prometheus::simpleapi::counter_family_t _sso_check_count; - prometheus::simpleapi::benchmark_family_t _auth_check; - prometheus::simpleapi::counter_family_t _auth_check_count; - prometheus::simpleapi::benchmark_family_t _json_schlep; - prometheus::simpleapi::counter_family_t _json_schlep_count; - prometheus::simpleapi::benchmark_family_t _issue_certificate; - prometheus::simpleapi::counter_family_t _issue_certificate_count; - prometheus::simpleapi::benchmark_family_t _save_member; - prometheus::simpleapi::counter_family_t _save_member_count; - prometheus::simpleapi::benchmark_family_t _send_netconf; - prometheus::simpleapi::counter_family_t _send_netconf_count; -#endif -}; - -} // namespace ZeroTier - -#endif diff --git a/zerotier-one/controller/FileDB.cpp b/zerotier-one/controller/FileDB.cpp deleted file mode 100644 index 0ced1226..00000000 --- a/zerotier-one/controller/FileDB.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "FileDB.hpp" - -#include "../node/Metrics.hpp" - -namespace ZeroTier -{ - -FileDB::FileDB(const char *path) : - DB(), - _path(path), - _networksPath(_path + ZT_PATH_SEPARATOR_S + "network"), - _tracePath(_path + ZT_PATH_SEPARATOR_S + "trace"), - _running(true) -{ - OSUtils::mkdir(_path.c_str()); - OSUtils::lockDownFile(_path.c_str(),true); - OSUtils::mkdir(_networksPath.c_str()); - OSUtils::mkdir(_tracePath.c_str()); - - std::vector networks(OSUtils::listDirectory(_networksPath.c_str(),false)); - std::string buf; - for(auto n=networks.begin();n!=networks.end();++n) { - buf.clear(); - if ((n->length() == 21)&&(OSUtils::readFile((_networksPath + ZT_PATH_SEPARATOR_S + *n).c_str(),buf))) { - try { - nlohmann::json network(OSUtils::jsonParse(buf)); - const std::string nwids = network["id"]; - if (nwids.length() == 16) { - nlohmann::json nullJson; - _networkChanged(nullJson,network,false); - Metrics::network_count++; - std::string membersPath(_networksPath + ZT_PATH_SEPARATOR_S + nwids + ZT_PATH_SEPARATOR_S "member"); - std::vector members(OSUtils::listDirectory(membersPath.c_str(),false)); - for(auto m=members.begin();m!=members.end();++m) { - buf.clear(); - if ((m->length() == 15)&&(OSUtils::readFile((membersPath + ZT_PATH_SEPARATOR_S + *m).c_str(),buf))) { - try { - nlohmann::json member(OSUtils::jsonParse(buf)); - const std::string addrs = member["id"]; - if (addrs.length() == 10) { - nlohmann::json nullJson2; - _memberChanged(nullJson2,member,false); - Metrics::member_count++; - } - } catch ( ... ) {} - } - } - } - } catch ( ... ) {} - } - } -} - -FileDB::~FileDB() -{ - try { - _online_l.lock(); - _running = false; - _online_l.unlock(); - _onlineUpdateThread.join(); - } catch ( ... ) {} -} - -bool FileDB::waitForReady() { return true; } -bool FileDB::isReady() { return true; } - -bool FileDB::save(nlohmann::json &record,bool notifyListeners) -{ - char p1[4096],p2[4096],pb[4096]; - bool modified = false; - try { - const std::string objtype = record["objtype"]; - if (objtype == "network") { - - const uint64_t nwid = OSUtils::jsonIntHex(record["id"],0ULL); - if (nwid) { - nlohmann::json old; - get(nwid,old); - if ((!old.is_object())||(!_compareRecords(old,record))) { - record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; - OSUtils::ztsnprintf(p1,sizeof(p1),"%s" ZT_PATH_SEPARATOR_S "%.16llx.json",_networksPath.c_str(),nwid); - if (!OSUtils::writeFile(p1,OSUtils::jsonDump(record,-1))) { - fprintf(stderr,"WARNING: controller unable to write to path: %s" ZT_EOL_S,p1); - } - _networkChanged(old,record,notifyListeners); - modified = true; - } - } - - } else if (objtype == "member") { - - const uint64_t id = OSUtils::jsonIntHex(record["id"],0ULL); - const uint64_t nwid = OSUtils::jsonIntHex(record["nwid"],0ULL); - if ((id)&&(nwid)) { - nlohmann::json network,old; - get(nwid,network,id,old); - if ((!old.is_object())||(!_compareRecords(old,record))) { - record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; - OSUtils::ztsnprintf(pb,sizeof(pb),"%s" ZT_PATH_SEPARATOR_S "%.16llx" ZT_PATH_SEPARATOR_S "member",_networksPath.c_str(),(unsigned long long)nwid); - OSUtils::ztsnprintf(p1,sizeof(p1),"%s" ZT_PATH_SEPARATOR_S "%.10llx.json",pb,(unsigned long long)id); - if (!OSUtils::writeFile(p1,OSUtils::jsonDump(record,-1))) { - OSUtils::ztsnprintf(p2,sizeof(p2),"%s" ZT_PATH_SEPARATOR_S "%.16llx",_networksPath.c_str(),(unsigned long long)nwid); - OSUtils::mkdir(p2); - OSUtils::mkdir(pb); - if (!OSUtils::writeFile(p1,OSUtils::jsonDump(record,-1))) { - fprintf(stderr,"WARNING: controller unable to write to path: %s" ZT_EOL_S,p1); - } - } - _memberChanged(old,record,notifyListeners); - modified = true; - } - } - - } - } catch ( ... ) {} // drop invalid records missing fields - return modified; -} - -void FileDB::eraseNetwork(const uint64_t networkId) -{ - nlohmann::json network,nullJson; - get(networkId,network); - char p[16384]; - OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx.json",_networksPath.c_str(),networkId); - OSUtils::rm(p); - OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx" ZT_PATH_SEPARATOR_S "member",_networksPath.c_str(),(unsigned long long)networkId); - OSUtils::rmDashRf(p); - _networkChanged(network,nullJson,true); - std::lock_guard l(this->_online_l); - this->_online.erase(networkId); -} - -void FileDB::eraseMember(const uint64_t networkId,const uint64_t memberId) -{ - nlohmann::json network,member,nullJson; - get(networkId,network,memberId,member); - char p[4096]; - OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx" ZT_PATH_SEPARATOR_S "member" ZT_PATH_SEPARATOR_S "%.10llx.json",_networksPath.c_str(),networkId,memberId); - OSUtils::rm(p); - _memberChanged(member,nullJson,true); - std::lock_guard l(this->_online_l); - this->_online[networkId].erase(memberId); -} - -void FileDB::nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) -{ - char mid[32],atmp[64]; - OSUtils::ztsnprintf(mid,sizeof(mid),"%.10llx",(unsigned long long)memberId); - physicalAddress.toString(atmp); - std::lock_guard l(this->_online_l); - this->_online[networkId][memberId][OSUtils::now()] = physicalAddress; -} - -} // namespace ZeroTier diff --git a/zerotier-one/controller/FileDB.hpp b/zerotier-one/controller/FileDB.hpp deleted file mode 100644 index 545d26e3..00000000 --- a/zerotier-one/controller/FileDB.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_CONTROLLER_FILEDB_HPP -#define ZT_CONTROLLER_FILEDB_HPP - -#include "DB.hpp" - -namespace ZeroTier -{ - -class FileDB : public DB -{ -public: - FileDB(const char *path); - virtual ~FileDB(); - - virtual bool waitForReady(); - virtual bool isReady(); - virtual bool save(nlohmann::json &record,bool notifyListeners); - virtual void eraseNetwork(const uint64_t networkId); - virtual void eraseMember(const uint64_t networkId,const uint64_t memberId); - virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress); - -protected: - std::string _path; - std::string _networksPath; - std::string _tracePath; - std::thread _onlineUpdateThread; - std::map< uint64_t,std::map > > _online; - std::mutex _online_l; - bool _running; -}; - -} // namespace ZeroTier - -#endif diff --git a/zerotier-one/controller/LFDB.cpp b/zerotier-one/controller/LFDB.cpp deleted file mode 100644 index b935ecf5..00000000 --- a/zerotier-one/controller/LFDB.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "LFDB.hpp" - -#include -#include -#include -#include - -#include "../osdep/OSUtils.hpp" -#include "../ext/cpp-httplib/httplib.h" - -namespace ZeroTier -{ - -LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,const char *lfOwnerPublic,const char *lfNodeHost,int lfNodePort,bool storeOnlineState) : - DB(), - _myId(myId), - _lfOwnerPrivate((lfOwnerPrivate) ? lfOwnerPrivate : ""), - _lfOwnerPublic((lfOwnerPublic) ? lfOwnerPublic : ""), - _lfNodeHost((lfNodeHost) ? lfNodeHost : "127.0.0.1"), - _lfNodePort(((lfNodePort > 0)&&(lfNodePort < 65536)) ? lfNodePort : 9980), - _running(true), - _ready(false), - _storeOnlineState(storeOnlineState) -{ - _syncThread = std::thread([this]() { - char controllerAddress[24]; - const uint64_t controllerAddressInt = _myId.address().toInt(); - _myId.address().toString(controllerAddress); - std::string networksSelectorName("com.zerotier.controller.lfdb:"); networksSelectorName.append(controllerAddress); networksSelectorName.append("/network"); - - // LF record masking key is the first 32 bytes of SHA512(controller private key) in hex, - // hiding record values from anything but the controller or someone who has its key. - uint8_t sha512pk[64]; - _myId.sha512PrivateKey(sha512pk); - char maskingKey [128]; - Utils::hex(sha512pk,32,maskingKey); - - httplib::Client htcli(_lfNodeHost.c_str(),_lfNodePort); - int64_t timeRangeStart = 0; - while (_running.load()) { - { - std::lock_guard sl(_state_l); - for(auto ns=_state.begin();ns!=_state.end();++ns) { - if (ns->second.dirty) { - nlohmann::json network; - if (get(ns->first,network)) { - nlohmann::json newrec,selector0; - selector0["Name"] = networksSelectorName; - selector0["Ordinal"] = ns->first; - newrec["Selectors"].push_back(selector0); - newrec["Value"] = network.dump(); - newrec["OwnerPrivate"] = _lfOwnerPrivate; - newrec["MaskingKey"] = maskingKey; - newrec["PulseIfUnchanged"] = true; - try { - auto resp = htcli.Post("/makerecord",newrec.dump(),"application/json"); - if (resp) { - if (resp->status == 200) { - ns->second.dirty = false; - //printf("SET network %.16llx %s\n",ns->first,resp->body.c_str()); - } else { - fprintf(stderr,"ERROR: LFDB: %d from node (create/update network): %s" ZT_EOL_S,resp->status,resp->body.c_str()); - } - } else { - fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S); - } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update network): %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update network): unknown exception" ZT_EOL_S); - } - } - } - - for(auto ms=ns->second.members.begin();ms!=ns->second.members.end();++ms) { - if ((_storeOnlineState)&&(ms->second.lastOnlineDirty)&&(ms->second.lastOnlineAddress)) { - nlohmann::json newrec,selector0,selector1,selectors,ip; - char tmp[1024],tmp2[128]; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"com.zerotier.controller.lfdb:%s/network/%.16llx/online",controllerAddress,(unsigned long long)ns->first); - ms->second.lastOnlineAddress.toIpString(tmp2); - selector0["Name"] = tmp; - selector0["Ordinal"] = ms->first; - selector1["Name"] = tmp2; - selector1["Ordinal"] = 0; - selectors.push_back(selector0); - selectors.push_back(selector1); - newrec["Selectors"] = selectors; - const uint8_t *const rawip = (const uint8_t *)ms->second.lastOnlineAddress.rawIpData(); - switch(ms->second.lastOnlineAddress.ss_family) { - case AF_INET: - for(int j=0;j<4;++j) - ip.push_back((unsigned int)rawip[j]); - break; - case AF_INET6: - for(int j=0;j<16;++j) - ip.push_back((unsigned int)rawip[j]); - break; - default: - ip = tmp2; // should never happen since only IP transport is currently supported - break; - } - newrec["Value"] = ip; - newrec["OwnerPrivate"] = _lfOwnerPrivate; - newrec["MaskingKey"] = maskingKey; - newrec["Timestamp"] = ms->second.lastOnlineTime; - newrec["PulseIfUnchanged"] = true; - try { - auto resp = htcli.Post("/makerecord",newrec.dump(),"application/json"); - if (resp) { - if (resp->status == 200) { - ms->second.lastOnlineDirty = false; - //printf("SET member online %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str()); - } else { - fprintf(stderr,"ERROR: LFDB: %d from node (create/update member online status): %s" ZT_EOL_S,resp->status,resp->body.c_str()); - } - } else { - fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S); - } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update member online status): %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update member online status): unknown exception" ZT_EOL_S); - } - } - - if (ms->second.dirty) { - nlohmann::json network,member; - if (get(ns->first,network,ms->first,member)) { - nlohmann::json newrec,selector0,selector1,selectors; - selector0["Name"] = networksSelectorName; - selector0["Ordinal"] = ns->first; - selector1["Name"] = "member"; - selector1["Ordinal"] = ms->first; - selectors.push_back(selector0); - selectors.push_back(selector1); - newrec["Selectors"] = selectors; - newrec["Value"] = member.dump(); - newrec["OwnerPrivate"] = _lfOwnerPrivate; - newrec["MaskingKey"] = maskingKey; - newrec["PulseIfUnchanged"] = true; - try { - auto resp = htcli.Post("/makerecord",newrec.dump(),"application/json"); - if (resp) { - if (resp->status == 200) { - ms->second.dirty = false; - //printf("SET member %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str()); - } else { - fprintf(stderr,"ERROR: LFDB: %d from node (create/update member): %s" ZT_EOL_S,resp->status,resp->body.c_str()); - } - } else { - fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S); - } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update member): %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (create/update member): unknown exception" ZT_EOL_S); - } - } - } - } - } - } - - try { - std::ostringstream query; - query << - "{" - "\"Ranges\":[{" - "\"Name\":\"" << networksSelectorName << "\"," - "\"Range\":[0,18446744073709551615]" - "}]," - "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807]," - "\"MaskingKey\":\"" << maskingKey << "\"," - "\"Owners\":[\"" << _lfOwnerPublic << "\"]" - "}"; - auto resp = htcli.Post("/query",query.str(),"application/json"); - if (resp) { - if (resp->status == 200) { - nlohmann::json results(OSUtils::jsonParse(resp->body)); - if ((results.is_array())&&(!results.empty())) { - for(std::size_t ri=0;ri> 24) == controllerAddressInt) { // sanity check - - nlohmann::json oldNetwork; - if ((timeRangeStart > 0)&&(get(id,oldNetwork))) { - const uint64_t revision = network["revision"]; - const uint64_t prevRevision = oldNetwork["revision"]; - if (prevRevision < revision) { - _networkChanged(oldNetwork,network,timeRangeStart > 0); - } - } else { - nlohmann::json nullJson; - _networkChanged(nullJson,network,timeRangeStart > 0); - } - - } - } - } - } - - } - } - } - } else { - fprintf(stderr,"ERROR: LFDB: %d from node (check for network updates): %s" ZT_EOL_S,resp->status,resp->body.c_str()); - } - } else { - fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S); - } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (check for network updates): %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (check for network updates): unknown exception" ZT_EOL_S); - } - - try { - std::ostringstream query; - query << - "{" - "\"Ranges\":[{" - "\"Name\":\"" << networksSelectorName << "\"," - "\"Range\":[0,18446744073709551615]" - "},{" - "\"Name\":\"member\"," - "\"Range\":[0,18446744073709551615]" - "}]," - "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807]," - "\"MaskingKey\":\"" << maskingKey << "\"," - "\"Owners\":[\"" << _lfOwnerPublic << "\"]" - "}"; - auto resp = htcli.Post("/query",query.str(),"application/json"); - if (resp) { - if (resp->status == 200) { - nlohmann::json results(OSUtils::jsonParse(resp->body)); - if ((results.is_array())&&(!results.empty())) { - for(std::size_t ri=0;ri> 24) == controllerAddressInt)) { // sanity check - - nlohmann::json network,oldMember; - if ((timeRangeStart > 0)&&(get(nwid,network,id,oldMember))) { - const uint64_t revision = member["revision"]; - const uint64_t prevRevision = oldMember["revision"]; - if (prevRevision < revision) - _memberChanged(oldMember,member,timeRangeStart > 0); - } else if (hasNetwork(nwid)) { - nlohmann::json nullJson; - _memberChanged(nullJson,member,timeRangeStart > 0); - } - - } - } - } - } - - } - } - } - } else { - fprintf(stderr,"ERROR: LFDB: %d from node (check for member updates): %s" ZT_EOL_S,resp->status,resp->body.c_str()); - } - } else { - fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S); - } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (check for member updates): %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: LFDB: unexpected exception querying node (check for member updates): unknown exception" ZT_EOL_S); - } - - timeRangeStart = time(nullptr) - 120; // start next query 2m before now to avoid losing updates - _ready.store(true); - - for(int k=0;k<4;++k) { // 2s delay between queries for remotely modified networks or members - if (!_running.load()) - return; - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - } - }); -} - -LFDB::~LFDB() -{ - _running.store(false); - _syncThread.join(); -} - -bool LFDB::waitForReady() -{ - while (!_ready.load()) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - return true; -} - -bool LFDB::isReady() -{ - return (_ready.load()); -} - -bool LFDB::save(nlohmann::json &record,bool notifyListeners) -{ - bool modified = false; - const std::string objtype = record["objtype"]; - if (objtype == "network") { - const uint64_t nwid = OSUtils::jsonIntHex(record["id"],0ULL); - if (nwid) { - nlohmann::json old; - get(nwid,old); - if ((!old.is_object())||(!_compareRecords(old,record))) { - record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; - _networkChanged(old,record,notifyListeners); - { - std::lock_guard l(_state_l); - _state[nwid].dirty = true; - } - modified = true; - } - } - } else if (objtype == "member") { - const uint64_t nwid = OSUtils::jsonIntHex(record["nwid"],0ULL); - const uint64_t id = OSUtils::jsonIntHex(record["id"],0ULL); - if ((id)&&(nwid)) { - nlohmann::json network,old; - get(nwid,network,id,old); - if ((!old.is_object())||(!_compareRecords(old,record))) { - record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; - _memberChanged(old,record,notifyListeners); - { - std::lock_guard l(_state_l); - _state[nwid].members[id].dirty = true; - } - modified = true; - } - } - } - return modified; -} - -void LFDB::eraseNetwork(const uint64_t networkId) -{ - // TODO -} - -void LFDB::eraseMember(const uint64_t networkId,const uint64_t memberId) -{ - // TODO -} - -void LFDB::nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) -{ - std::lock_guard l(_state_l); - auto nw = _state.find(networkId); - if (nw != _state.end()) { - auto m = nw->second.members.find(memberId); - if (m != nw->second.members.end()) { - m->second.lastOnlineTime = OSUtils::now(); - if (physicalAddress) - m->second.lastOnlineAddress = physicalAddress; - m->second.lastOnlineDirty = true; - } - } -} - -} // namespace ZeroTier diff --git a/zerotier-one/controller/LFDB.hpp b/zerotier-one/controller/LFDB.hpp deleted file mode 100644 index 9f654bfb..00000000 --- a/zerotier-one/controller/LFDB.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_CONTROLLER_LFDB_HPP -#define ZT_CONTROLLER_LFDB_HPP - -#include "DB.hpp" - -#include -#include -#include -#include - -namespace ZeroTier { - -/** - * DB implementation for controller that stores data in LF - */ -class LFDB : public DB -{ -public: - /** - * @param myId This controller's identity - * @param path Base path for ZeroTier node itself - * @param lfOwnerPrivate LF owner private in PEM format - * @param lfOwnerPublic LF owner public in @base62 format - * @param lfNodeHost LF node host - * @param lfNodePort LF node http (not https) port - * @param storeOnlineState If true, store online/offline state and IP info in LF (a lot of data, only for private networks!) - */ - LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,const char *lfOwnerPublic,const char *lfNodeHost,int lfNodePort,bool storeOnlineState); - virtual ~LFDB(); - - virtual bool waitForReady(); - virtual bool isReady(); - virtual bool save(nlohmann::json &record,bool notifyListeners); - virtual void eraseNetwork(const uint64_t networkId); - virtual void eraseMember(const uint64_t networkId,const uint64_t memberId); - virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress); - -protected: - const Identity _myId; - - std::string _lfOwnerPrivate,_lfOwnerPublic; - std::string _lfNodeHost; - int _lfNodePort; - - struct _MemberState - { - _MemberState() : - lastOnlineAddress(), - lastOnlineTime(0), - dirty(false), - lastOnlineDirty(false) {} - InetAddress lastOnlineAddress; - int64_t lastOnlineTime; - bool dirty; - bool lastOnlineDirty; - }; - struct _NetworkState - { - _NetworkState() : - members(), - dirty(false) {} - std::unordered_map members; - bool dirty; - }; - std::unordered_map _state; - std::mutex _state_l; - - std::atomic_bool _running; - std::atomic_bool _ready; - std::thread _syncThread; - bool _storeOnlineState; -}; - -} // namespace ZeroTier - -#endif diff --git a/zerotier-one/controller/PostgreSQL.hpp b/zerotier-one/controller/PostgreSQL.hpp deleted file mode 100644 index 8eea3608..00000000 --- a/zerotier-one/controller/PostgreSQL.hpp +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c)2019 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "DB.hpp" - -#ifdef ZT_CONTROLLER_USE_LIBPQ - -#ifndef ZT_CONTROLLER_LIBPQ_HPP -#define ZT_CONTROLLER_LIBPQ_HPP - -#define ZT_CENTRAL_CONTROLLER_COMMIT_THREADS 4 - -#include "ConnectionPool.hpp" -#include - -#include -#include - -#include "../node/Metrics.hpp" - -extern "C" { -typedef struct pg_conn PGconn; -} - -namespace ZeroTier { - -struct RedisConfig; - - -class PostgresConnection : public Connection { -public: - virtual ~PostgresConnection() { - } - - std::shared_ptr c; - int a; -}; - - -class PostgresConnFactory : public ConnectionFactory { -public: - PostgresConnFactory(std::string &connString) - : m_connString(connString) - { - } - - virtual std::shared_ptr create() { - Metrics::conn_counter++; - auto c = std::shared_ptr(new PostgresConnection()); - c->c = std::make_shared(m_connString); - return std::static_pointer_cast(c); - } -private: - std::string m_connString; -}; - -class PostgreSQL; - -class MemberNotificationReceiver : public pqxx::notification_receiver { -public: - MemberNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); - virtual ~MemberNotificationReceiver() { - fprintf(stderr, "MemberNotificationReceiver destroyed\n"); - } - - virtual void operator() (const std::string &payload, int backendPid); -private: - PostgreSQL *_psql; -}; - -class NetworkNotificationReceiver : public pqxx::notification_receiver { -public: - NetworkNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); - virtual ~NetworkNotificationReceiver() { - fprintf(stderr, "NetworkNotificationReceiver destroyed\n"); - }; - - virtual void operator() (const std::string &payload, int packend_pid); -private: - PostgreSQL *_psql; -}; - -/** - * A controller database driver that talks to PostgreSQL - * - * This is for use with ZeroTier Central. Others are free to build and use it - * but be aware that we might change it at any time. - */ -class PostgreSQL : public DB -{ - friend class MemberNotificationReceiver; - friend class NetworkNotificationReceiver; -public: - PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc); - virtual ~PostgreSQL(); - - virtual bool waitForReady(); - virtual bool isReady(); - virtual bool save(nlohmann::json &record,bool notifyListeners); - virtual void eraseNetwork(const uint64_t networkId); - virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); - virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress &physicalAddress); - virtual AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL); - -protected: - struct _PairHasher - { - inline std::size_t operator()(const std::pair &p) const { return (std::size_t)(p.first ^ p.second); } - }; - virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) { - DB::_memberChanged(old, memberConfig, notifyListeners); - } - - virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners) { - DB::_networkChanged(old, networkConfig, notifyListeners); - } - -private: - void initializeNetworks(); - void initializeMembers(); - void heartbeat(); - void membersDbWatcher(); - void _membersWatcher_Postgres(); - void networksDbWatcher(); - void _networksWatcher_Postgres(); - - void _membersWatcher_Redis(); - void _networksWatcher_Redis(); - - void commitThread(); - void onlineNotificationThread(); - void onlineNotification_Postgres(); - void onlineNotification_Redis(); - uint64_t _doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, - std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); - - enum OverrideMode { - ALLOW_PGBOUNCER_OVERRIDE = 0, - NO_OVERRIDE = 1 - }; - - std::shared_ptr > _pool; - - const Identity _myId; - const Address _myAddress; - std::string _myAddressStr; - std::string _connString; - - BlockingQueue< std::pair > _commitQueue; - - std::thread _heartbeatThread; - std::thread _membersDbWatcher; - std::thread _networksDbWatcher; - std::thread _commitThread[ZT_CENTRAL_CONTROLLER_COMMIT_THREADS]; - std::thread _onlineNotificationThread; - - std::unordered_map< std::pair,std::pair,_PairHasher > _lastOnline; - - mutable std::mutex _lastOnline_l; - mutable std::mutex _readyLock; - std::atomic _ready, _connected, _run; - mutable volatile bool _waitNoticePrinted; - - int _listenPort; - uint8_t _ssoPsk[48]; - - RedisConfig *_rc; - std::shared_ptr _redis; - std::shared_ptr _cluster; - bool _redisMemberStatus; -}; - -} // namespace ZeroTier - -#endif // ZT_CONTROLLER_LIBPQ_HPP - -#endif // ZT_CONTROLLER_USE_LIBPQ diff --git a/zerotier-one/controller/Redis.hpp b/zerotier-one/controller/Redis.hpp deleted file mode 100644 index 095419b0..00000000 --- a/zerotier-one/controller/Redis.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef ZT_CONTROLLER_REDIS_HPP -#define ZT_CONTROLLER_REDIS_HPP - -#include - -namespace ZeroTier { -struct RedisConfig { - std::string hostname; - int port; - std::string password; - bool clusterMode; -}; -} - -#endif \ No newline at end of file diff --git a/zerotier-one/debian/changelog b/zerotier-one/debian/changelog index 6f935761..01ef8cf6 100644 --- a/zerotier-one/debian/changelog +++ b/zerotier-one/debian/changelog @@ -1,3 +1,27 @@ +zerotier-one (1.16.0) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Thu, 21 Aug 2025 01:00:00 -0700 + +zerotier-one (1.14.2) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Wed, 23 Oct 2024 01:00:00 -0700 + +zerotier-one (1.14.1) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Wed, 11 Sep 2024 01:00:00 -0700 + +zerotier-one (1.14.0) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Tue, 19 Mar 2024 01:00:00 -0700 + zerotier-one (1.12.2) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/zerotier-one/debian/copyright b/zerotier-one/debian/copyright index d22affa2..da3678d5 100644 --- a/zerotier-one/debian/copyright +++ b/zerotier-one/debian/copyright @@ -12,7 +12,7 @@ License: ZeroTier BSL 1.1 Use of this software is governed by the Business Source License included in the LICENSE.TXT file in the project's root directory. - Change Date: 2025-01-01 + Change Date: 2026-01-01 On the date above, in accordance with the Business Source License, use of this software will be governed by version 2.0 of the Apache License. diff --git a/zerotier-one/doc/README.md b/zerotier-one/doc/README.md index 707c64a9..681954cc 100644 --- a/zerotier-one/doc/README.md +++ b/zerotier-one/doc/README.md @@ -3,4 +3,4 @@ Manual Pages and Other Documentation Use "./build.sh" to build the manual pages. -You'll need either NodeJS/npm installed (script will then automatically install the npm *marked-man* package) or */usr/bin/ronn*. The latter is a Ruby program packaged on some distributions as *rubygem-ronn* or *ruby-ronn* or installable as *gem install ronn*. The Node *marked-man* package and *ronn* from rubygems are two roughly equivalent alternatives for compiling MarkDown into roff/man format. +You'll need either Node.js/npm installed (script will then automatically install the npm *marked-man* package) or */usr/bin/ronn*. The latter is a Ruby program packaged on some distributions as *rubygem-ronn* or *ruby-ronn* or installable as *gem install ronn*. The Node *marked-man* package and *ronn* from RubyGems are two roughly equivalent alternatives for compiling Markdown into roff/man format. diff --git a/zerotier-one/entrypoint.sh.release b/zerotier-one/entrypoint.sh.release index 284a3d41..da9b8f8c 100644 --- a/zerotier-one/entrypoint.sh.release +++ b/zerotier-one/entrypoint.sh.release @@ -9,15 +9,16 @@ mkztfile() { file=$1 mode=$2 content=$3 - + echo "creating $file" mkdir -p /var/lib/zerotier-one - echo "$content" > "/var/lib/zerotier-one/$file" + echo -n "$content" > "/var/lib/zerotier-one/$file" chmod "$mode" "/var/lib/zerotier-one/$file" } if [ "x$ZEROTIER_API_SECRET" != "x" ] then mkztfile authtoken.secret 0600 "$ZEROTIER_API_SECRET" + mkztfile metricstoken.secret 0600 "$ZEROTIER_API_SECRET" fi if [ "x$ZEROTIER_IDENTITY_PUBLIC" != "x" ] @@ -30,6 +31,11 @@ then mkztfile identity.secret 0600 "$ZEROTIER_IDENTITY_SECRET" fi +if [ "x$ZEROTIER_LOCAL_CONF" != "x" ] +then + mkztfile local.conf 0644 "$ZEROTIER_LOCAL_CONF" +fi + mkztfile zerotier-one.port 0600 "9993" killzerotier() { diff --git a/zerotier-one/ext/central-controller-docker/Dockerfile b/zerotier-one/ext/central-controller-docker/Dockerfile index c134cbdc..29670ec6 100644 --- a/zerotier-one/ext/central-controller-docker/Dockerfile +++ b/zerotier-one/ext/central-controller-docker/Dockerfile @@ -1,11 +1,17 @@ # Dockerfile for ZeroTier Central Controllers -FROM registry.zerotier.com/zerotier/ctlbuild:latest as builder -MAINTAINER Adam Ierymekno , Grant Limberg +FROM registry.zerotier.com/zerotier/ctlbuild:2025-07-14 AS builder ADD . /ZeroTierOne RUN export PATH=$PATH:~/.cargo/bin && cd ZeroTierOne && make clean && make central-controller -j8 -FROM registry.zerotier.com/zerotier/ctlrun:latest +FROM golang:bookworm AS go_base +RUN go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest + +FROM registry.zerotier.com/zerotier/ctlrun:2025-07-14 AS run_base COPY --from=builder /ZeroTierOne/zerotier-one /usr/local/bin/zerotier-one +COPY --from=builder /ZeroTierOne/ext/opentelemetry-cpp-1.21.0/localinstall/lib/*.so /usr/local/lib64/ +COPY --from=go_base /go/bin/migrate /usr/local/bin/migrate +COPY ext/central-controller-docker/migrations /migrations + RUN chmod a+x /usr/local/bin/zerotier-one RUN echo "/usr/local/lib64" > /etc/ld.so.conf.d/usr-local-lib64.conf && ldconfig diff --git a/zerotier-one/ext/central-controller-docker/Dockerfile.builder b/zerotier-one/ext/central-controller-docker/Dockerfile.builder index edbcc228..6e10db88 100644 --- a/zerotier-one/ext/central-controller-docker/Dockerfile.builder +++ b/zerotier-one/ext/central-controller-docker/Dockerfile.builder @@ -1,8 +1,5 @@ # Dockerfile for building ZeroTier Central Controllers -FROM ubuntu:jammy as builder -MAINTAINER Adam Ierymekno , Grant Limberg - -ARG git_branch=master +FROM debian:bookworm RUN apt update && apt upgrade -y RUN apt -y install \ @@ -19,7 +16,19 @@ RUN apt -y install \ postgresql-client \ postgresql-client-common \ curl \ + libcurl4-openssl-dev \ google-perftools \ - libgoogle-perftools-dev + libgoogle-perftools-dev \ + protobuf-compiler \ + protobuf-compiler-grpc \ + protobuf-c-compiler \ + grpc-proto \ + libgrpc++1.51 \ + libgrpc++-dev \ + libgrpc-dev \ + libgrpc29 \ + cmake \ + git + RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y diff --git a/zerotier-one/ext/central-controller-docker/Dockerfile.run_base b/zerotier-one/ext/central-controller-docker/Dockerfile.run_base index c0a18ca6..fb5d0e2d 100644 --- a/zerotier-one/ext/central-controller-docker/Dockerfile.run_base +++ b/zerotier-one/ext/central-controller-docker/Dockerfile.run_base @@ -1,14 +1,19 @@ -FROM ubuntu:jammy +FROM debian:bookworm + + RUN apt update && apt upgrade -y - RUN apt -y install \ + netcat-traditional \ postgresql-client \ postgresql-client-common \ libjemalloc2 \ libpq5 \ curl \ binutils \ - linux-tools-gke \ perf-tools-unstable \ - google-perftools + google-perftools \ + gnupg \ + libgrpc++1.51 \ + libgrpc29 + diff --git a/zerotier-one/ext/central-controller-docker/Makefile b/zerotier-one/ext/central-controller-docker/Makefile index 46ec8ee1..2318d290 100644 --- a/zerotier-one/ext/central-controller-docker/Makefile +++ b/zerotier-one/ext/central-controller-docker/Makefile @@ -10,7 +10,7 @@ buildx: @echo docker buildx inspect --bootstrap controller-builder: buildx - docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t $(registry)/ctlbuild:latest -f Dockerfile.builder . --push + docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t $(registry)/ctlbuild:$(shell date +"%Y-%m-%d") -f Dockerfile.builder . --push controller-runbase: buildx - docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t $(registry)/ctlrun:latest -f Dockerfile.run_base . --push + docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t $(registry)/ctlrun:$(shell date +"%Y-%m-%d") -f Dockerfile.run_base . --push diff --git a/zerotier-one/ext/central-controller-docker/main.sh b/zerotier-one/ext/central-controller-docker/main.sh index 1ec8e10f..b1c4b4cb 100755 --- a/zerotier-one/ext/central-controller-docker/main.sh +++ b/zerotier-one/ext/central-controller-docker/main.sh @@ -1,9 +1,5 @@ #!/bin/bash -if [ -z "$ZT_IDENTITY_PATH" ]; then - echo '*** FAILED: ZT_IDENTITY_PATH environment variable is not defined' - exit 1 -fi if [ -z "$ZT_DB_HOST" ]; then echo '*** FAILED: ZT_DB_HOST environment variable not defined' exit 1 @@ -24,6 +20,9 @@ if [ -z "$ZT_DB_PASSWORD" ]; then echo '*** FAILED: ZT_DB_PASSWORD environment variable not defined' exit 1 fi +if [ -z "$ZT_DB_TYPE" ]; then + ZT_DB_TYPE="postgres" +fi REDIS="" if [ "$ZT_USE_REDIS" == "true" ]; then @@ -56,10 +55,14 @@ fi mkdir -p /var/lib/zerotier-one pushd /var/lib/zerotier-one -ln -s $ZT_IDENTITY_PATH/identity.public identity.public -ln -s $ZT_IDENTITY_PATH/identity.secret identity.secret -if [ -f "$ZT_IDENTITY_PATH/authtoken.secret" ]; then - ln -s $ZT_IDENTITY_PATH/authtoken.secret authtoken.secret +if [ -d "$ZT_IDENTITY_PATH" ]; then + echo '*** Using existing ZT identity from path $ZT_IDENTITY_PATH' + + ln -s $ZT_IDENTITY_PATH/identity.public identity.public + ln -s $ZT_IDENTITY_PATH/identity.secret identity.secret + if [ -f "$ZT_IDENTITY_PATH/authtoken.secret" ]; then + ln -s $ZT_IDENTITY_PATH/authtoken.secret authtoken.secret + fi fi popd @@ -70,7 +73,7 @@ APP_NAME="controller-$(cat /var/lib/zerotier-one/identity.public | cut -d ':' -f echo "{ \"settings\": { - \"controllerDbPath\": \"postgres:host=${ZT_DB_HOST} port=${ZT_DB_PORT} dbname=${ZT_DB_NAME} user=${ZT_DB_USER} password=${ZT_DB_PASSWORD} application_name=${APP_NAME} sslmode=prefer sslcert=${DB_CLIENT_CERT} sslkey=${DB_CLIENT_KEY} sslrootcert=${DB_SERVER_CA}\", + \"controllerDbPath\": \"${ZT_DB_TYPE}:host=${ZT_DB_HOST} port=${ZT_DB_PORT} dbname=${ZT_DB_NAME} user=${ZT_DB_USER} password=${ZT_DB_PASSWORD} application_name=${APP_NAME} sslmode=prefer sslcert=${DB_CLIENT_CERT} sslkey=${DB_CLIENT_KEY} sslrootcert=${DB_SERVER_CA}\", \"portMappingEnabled\": true, \"softwareUpdate\": \"disable\", \"interfacePrefixBlacklist\": [ @@ -80,6 +83,10 @@ echo "{ \"lowBandwidthMode\": ${ZT_LB_MODE:-$DEFAULT_LB_MODE}, \"ssoRedirectURL\": \"${ZT_SSO_REDIRECT_URL}\", \"allowManagementFrom\": [\"127.0.0.1\", \"::1\", \"10.0.0.0/8\"], + \"otel\": { + \"exporterEndpoint\": \"${ZT_EXPORTER_ENDPOINT}\", + \"exporterSampleRate\": ${ZT_EXPORTER_SAMPLE_RATE:-0} + }, ${REDIS} } } @@ -100,6 +107,24 @@ else done fi +if [ "$ZT_DB_TYPE" == "cv2" ]; then + echo "Migrating database (if needed)..." + if [ -n "$DB_SERVER_CA" ]; then + /usr/local/bin/migrate -source file:///migrations -database "postgres://$ZT_DB_USER:$ZT_DB_PASSWORD@$ZT_DB_HOST:$ZT_DB_PORT/$ZT_DB_NAME?x-migrations-table=controller_migrations&sslmode=verify-full&sslrootcert=$DB_SERVER_CA&sslcert=$DB_CLIENT_CERT&sslkey=$DB_CLIENT_KEY" up + else + /usr/local/bin/migrate -source file:///migrations -database "postgres://$ZT_DB_USER:$ZT_DB_PASSWORD@$ZT_DB_HOST:$ZT_DB_PORT/$ZT_DB_NAME?x-migrations-table=controller_migrations&sslmode=disable" up + fi +fi + +if [ -n "$ZT_TEMPORAL_HOST" ] && [ -n "$ZT_TEMPORAL_PORT" ]; then + echo "waiting for temporal..." + while ! nc -z ${ZT_TEMPORAL_HOST} ${ZT_TEMPORAL_PORT}; do + echo "waiting..."; + sleep 1; + done + echo "Temporal is up" +fi + export GLIBCXX_FORCE_NEW=1 export GLIBCPP_FORCE_NEW=1 export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" diff --git a/zerotier-one/ext/central-controller-docker/migrations/0001_init.down.sql b/zerotier-one/ext/central-controller-docker/migrations/0001_init.down.sql new file mode 100644 index 00000000..03dc63c8 --- /dev/null +++ b/zerotier-one/ext/central-controller-docker/migrations/0001_init.down.sql @@ -0,0 +1,3 @@ +DROP TABLE IF EXISTS network_memberships_ctl; +DROP TABLE IF EXISTS networks_ctl; +DROP TABLE IF EXISTS controllers_ctl; \ No newline at end of file diff --git a/zerotier-one/ext/central-controller-docker/migrations/0001_init.up.sql b/zerotier-one/ext/central-controller-docker/migrations/0001_init.up.sql new file mode 100644 index 00000000..90d29e88 --- /dev/null +++ b/zerotier-one/ext/central-controller-docker/migrations/0001_init.up.sql @@ -0,0 +1,47 @@ +-- inits controller db schema + +CREATE TABLE IF NOT EXISTS controllers_ctl ( + id text NOT NULL PRIMARY KEY, + hostname text, + last_heartbeat timestamp with time zone, + public_identity text NOT NULL, + version text +); + +CREATE TABLE IF NOT EXISTS networks_ctl ( + id character varying(22) NOT NULL PRIMARY KEY, + name text NOT NULL, + configuration jsonb DEFAULT '{}'::jsonb NOT NULL, + controller_id text REFERENCES controllers_ctl(id), + revision integer DEFAULT 0 NOT NULL, + last_modified timestamp with time zone DEFAULT now(), + creation_time timestamp with time zone DEFAULT now() +); + +CREATE TABLE IF NOT EXISTS network_memberships_ctl ( + device_id character varying(22) NOT NULL, + network_id character varying(22) NOT NULL REFERENCES networks_ctl(id), + authorized boolean, + active_bridge boolean, + ip_assignments text[], + no_auto_assign_ips boolean, + sso_exempt boolean, + authentication_expiry_time timestamp with time zone, + capabilities jsonb, + creation_time timestamp with time zone DEFAULT now(), + last_modified timestamp with time zone DEFAULT now(), + identity text DEFAULT ''::text, + last_authorized_credential text, + last_authorized_time timestamp with time zone, + last_deauthorized_time timestamp with time zone, + last_seen jsonb DEFAULT '{}'::jsonb NOT NULL, -- in the context of the network + remote_trace_level integer DEFAULT 0 NOT NULL, + remote_trace_target text DEFAULT ''::text NOT NULL, + revision integer DEFAULT 0 NOT NULL, + tags jsonb, + version_major integer DEFAULT 0 NOT NULL, + version_minor integer DEFAULT 0 NOT NULL, + version_revision integer DEFAULT 0 NOT NULL, + version_protocol integer DEFAULT 0 NOT NULL, + PRIMARY KEY (device_id, network_id) +); diff --git a/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.down.sql b/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.down.sql new file mode 100644 index 00000000..3c90f0a2 --- /dev/null +++ b/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE network_memberships_ctl + DROP COLUMN os, + DROP COLUMN arch; \ No newline at end of file diff --git a/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.up.sql b/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.up.sql new file mode 100644 index 00000000..095f7c69 --- /dev/null +++ b/zerotier-one/ext/central-controller-docker/migrations/0002_os_arch.up.sql @@ -0,0 +1,3 @@ +ALTER TABLE network_memberships_ctl + ADD COLUMN os TEXT NOT NULL DEFAULT 'unknown', + ADD COLUMN arch TEXT NOT NULL DEFAULT 'unknown'; \ No newline at end of file diff --git a/zerotier-one/ext/cpp-httplib/httplib.h b/zerotier-one/ext/cpp-httplib/httplib.h index 28746000..862e97e9 100644 --- a/zerotier-one/ext/cpp-httplib/httplib.h +++ b/zerotier-one/ext/cpp-httplib/httplib.h @@ -1,14 +1,14 @@ // // httplib.h // -// Copyright (c) 2023 Yuji Hirose. All rights reserved. +// Copyright (c) 2024 Yuji Hirose. All rights reserved. // MIT License // #ifndef CPPHTTPLIB_HTTPLIB_H #define CPPHTTPLIB_HTTPLIB_H -#define CPPHTTPLIB_VERSION "0.12.2" +#define CPPHTTPLIB_VERSION "0.15.3" /* * Configuration @@ -82,6 +82,10 @@ #define CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH 8192 #endif +#ifndef CPPHTTPLIB_RANGE_MAX_COUNT +#define CPPHTTPLIB_RANGE_MAX_COUNT 1024 +#endif + #ifndef CPPHTTPLIB_TCP_NODELAY #define CPPHTTPLIB_TCP_NODELAY false #endif @@ -141,11 +145,11 @@ using ssize_t = long; #endif // _MSC_VER #ifndef S_ISREG -#define S_ISREG(m) (((m)&S_IFREG) == S_IFREG) +#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG) #endif // S_ISREG #ifndef S_ISDIR -#define S_ISDIR(m) (((m)&S_IFDIR) == S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFDIR) == S_IFDIR) #endif // S_ISDIR #ifndef NOMINMAX @@ -160,10 +164,6 @@ using ssize_t = long; #define WSA_FLAG_NO_HANDLE_INHERIT 0x80 #endif -#ifndef strcasecmp -#define strcasecmp _stricmp -#endif // strcasecmp - using socket_t = SOCKET; #ifdef CPPHTTPLIB_USE_POLL #define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) @@ -172,9 +172,15 @@ using socket_t = SOCKET; #else // not _WIN32 #include -#ifndef _AIX +#if !defined(_AIX) && !defined(__MVS__) #include #endif +#ifdef __MVS__ +#include +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif +#endif #include #include #include @@ -187,6 +193,7 @@ using socket_t = SOCKET; #endif #include #include +#include #include #include #include @@ -207,6 +214,7 @@ using socket_t = int; #include #include #include +#include #include #include #include @@ -223,6 +231,9 @@ using socket_t = int; #include #include #include +#include +#include +#include #ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef _WIN32 @@ -237,7 +248,6 @@ using socket_t = int; #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") -#pragma comment(lib, "cryptui.lib") #endif #elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) #include @@ -259,10 +269,8 @@ using socket_t = int; #include #include -#if OPENSSL_VERSION_NUMBER < 0x1010100fL -#error Sorry, OpenSSL versions prior to 1.1.1 are not supported -#elif OPENSSL_VERSION_NUMBER < 0x30000000L -#define SSL_get1_peer_certificate SSL_get_peer_certificate +#if OPENSSL_VERSION_NUMBER < 0x30000000L +#error Sorry, OpenSSL versions prior to 3.0.0 are not supported #endif #endif @@ -321,7 +329,7 @@ struct scope_exit { explicit scope_exit(std::function &&f) : exit_function(std::move(f)), execute_on_destruction{true} {} - scope_exit(scope_exit &&rhs) + scope_exit(scope_exit &&rhs) noexcept : exit_function(std::move(rhs.exit_function)), execute_on_destruction{rhs.execute_on_destruction} { rhs.release(); @@ -344,6 +352,81 @@ private: } // namespace detail +enum StatusCode { + // Information responses + Continue_100 = 100, + SwitchingProtocol_101 = 101, + Processing_102 = 102, + EarlyHints_103 = 103, + + // Successful responses + OK_200 = 200, + Created_201 = 201, + Accepted_202 = 202, + NonAuthoritativeInformation_203 = 203, + NoContent_204 = 204, + ResetContent_205 = 205, + PartialContent_206 = 206, + MultiStatus_207 = 207, + AlreadyReported_208 = 208, + IMUsed_226 = 226, + + // Redirection messages + MultipleChoices_300 = 300, + MovedPermanently_301 = 301, + Found_302 = 302, + SeeOther_303 = 303, + NotModified_304 = 304, + UseProxy_305 = 305, + unused_306 = 306, + TemporaryRedirect_307 = 307, + PermanentRedirect_308 = 308, + + // Client error responses + BadRequest_400 = 400, + Unauthorized_401 = 401, + PaymentRequired_402 = 402, + Forbidden_403 = 403, + NotFound_404 = 404, + MethodNotAllowed_405 = 405, + NotAcceptable_406 = 406, + ProxyAuthenticationRequired_407 = 407, + RequestTimeout_408 = 408, + Conflict_409 = 409, + Gone_410 = 410, + LengthRequired_411 = 411, + PreconditionFailed_412 = 412, + PayloadTooLarge_413 = 413, + UriTooLong_414 = 414, + UnsupportedMediaType_415 = 415, + RangeNotSatisfiable_416 = 416, + ExpectationFailed_417 = 417, + ImATeapot_418 = 418, + MisdirectedRequest_421 = 421, + UnprocessableContent_422 = 422, + Locked_423 = 423, + FailedDependency_424 = 424, + TooEarly_425 = 425, + UpgradeRequired_426 = 426, + PreconditionRequired_428 = 428, + TooManyRequests_429 = 429, + RequestHeaderFieldsTooLarge_431 = 431, + UnavailableForLegalReasons_451 = 451, + + // Server error responses + InternalServerError_500 = 500, + NotImplemented_501 = 501, + BadGateway_502 = 502, + ServiceUnavailable_503 = 503, + GatewayTimeout_504 = 504, + HttpVersionNotSupported_505 = 505, + VariantAlsoNegotiates_506 = 506, + InsufficientStorage_507 = 507, + LoopDetected_508 = 508, + NotExtended_510 = 510, + NetworkAuthenticationRequired_511 = 511, +}; + using Headers = std::multimap; using Params = std::multimap; @@ -373,6 +456,7 @@ public: DataSink &operator=(DataSink &&) = delete; std::function write; + std::function is_writable; std::function done; std::function done_with_trailer; std::ostream os; @@ -383,7 +467,7 @@ private: explicit data_sink_streambuf(DataSink &sink) : sink_(sink) {} protected: - std::streamsize xsputn(const char *s, std::streamsize n) { + std::streamsize xsputn(const char *s, std::streamsize n) override { sink_.write(s, static_cast(n)); return n; } @@ -465,6 +549,7 @@ struct Request { MultipartFormDataMap files; Ranges ranges; Match matches; + std::unordered_map path_params; // for client ResponseHandler response_handler; @@ -476,8 +561,7 @@ struct Request { bool has_header(const std::string &key) const; std::string get_header_value(const std::string &key, size_t id = 0) const; - template - T get_header_value(const std::string &key, size_t id = 0) const; + uint64_t get_header_value_u64(const std::string &key, size_t id = 0) const; size_t get_header_value_count(const std::string &key) const; void set_header(const std::string &key, const std::string &val); @@ -509,14 +593,14 @@ struct Response { bool has_header(const std::string &key) const; std::string get_header_value(const std::string &key, size_t id = 0) const; - template - T get_header_value(const std::string &key, size_t id = 0) const; + uint64_t get_header_value_u64(const std::string &key, size_t id = 0) const; size_t get_header_value_count(const std::string &key) const; void set_header(const std::string &key, const std::string &val); - void set_redirect(const std::string &url, int status = 302); + void set_redirect(const std::string &url, int status = StatusCode::Found_302); void set_content(const char *s, size_t n, const std::string &content_type); void set_content(const std::string &s, const std::string &content_type); + void set_content(std::string &&s, const std::string &content_type); void set_content_provider( size_t length, const std::string &content_type, ContentProvider provider, @@ -573,7 +657,7 @@ public: TaskQueue() = default; virtual ~TaskQueue() = default; - virtual void enqueue(std::function fn) = 0; + virtual bool enqueue(std::function fn) = 0; virtual void shutdown() = 0; virtual void on_idle() {} @@ -581,7 +665,8 @@ public: class ThreadPool : public TaskQueue { public: - explicit ThreadPool(size_t n) : shutdown_(false) { + explicit ThreadPool(size_t n, size_t mqr = 0) + : shutdown_(false), max_queued_requests_(mqr) { while (n) { threads_.emplace_back(worker(*this)); n--; @@ -591,13 +676,17 @@ public: ThreadPool(const ThreadPool &) = delete; ~ThreadPool() override = default; - void enqueue(std::function fn) override { + bool enqueue(std::function fn) override { { std::unique_lock lock(mutex_); + if (max_queued_requests_ > 0 && jobs_.size() >= max_queued_requests_) { + return false; + } jobs_.push_back(std::move(fn)); } cond_.notify_one(); + return true; } void shutdown() override { @@ -647,6 +736,7 @@ private: std::list> jobs_; bool shutdown_; + size_t max_queued_requests_ = 0; std::condition_variable cond_; std::mutex mutex_; @@ -658,6 +748,82 @@ using SocketOptions = std::function; void default_socket_options(socket_t sock); +const char *status_message(int status); + +std::string get_bearer_token_auth(const Request &req); + +namespace detail { + +class MatcherBase { +public: + virtual ~MatcherBase() = default; + + // Match request path and populate its matches and + virtual bool match(Request &request) const = 0; +}; + +/** + * Captures parameters in request path and stores them in Request::path_params + * + * Capture name is a substring of a pattern from : to /. + * The rest of the pattern is matched agains the request path directly + * Parameters are captured starting from the next character after + * the end of the last matched static pattern fragment until the next /. + * + * Example pattern: + * "/path/fragments/:capture/more/fragments/:second_capture" + * Static fragments: + * "/path/fragments/", "more/fragments/" + * + * Given the following request path: + * "/path/fragments/:1/more/fragments/:2" + * the resulting capture will be + * {{"capture", "1"}, {"second_capture", "2"}} + */ +class PathParamsMatcher : public MatcherBase { +public: + PathParamsMatcher(const std::string &pattern); + + bool match(Request &request) const override; + +private: + static constexpr char marker = ':'; + // Treat segment separators as the end of path parameter capture + // Does not need to handle query parameters as they are parsed before path + // matching + static constexpr char separator = '/'; + + // Contains static path fragments to match against, excluding the '/' after + // path params + // Fragments are separated by path params + std::vector static_fragments_; + // Stores the names of the path parameters to be used as keys in the + // Request::path_params map + std::vector param_names_; +}; + +/** + * Performs std::regex_match on request path + * and stores the result in Request::matches + * + * Note that regex match is performed directly on the whole request. + * This means that wildcard patterns may match multiple path segments with /: + * "/begin/(.*)/end" will match both "/begin/middle/end" and "/begin/1/2/end". + */ +class RegexMatcher : public MatcherBase { +public: + RegexMatcher(const std::string &pattern) : regex_(pattern) {} + + bool match(Request &request) const override; + +private: + std::regex regex_; +}; + +ssize_t write_headers(Stream &strm, const Headers &headers); + +} // namespace detail + class Server { public: using Handler = std::function; @@ -702,6 +868,7 @@ public: bool remove_mount_point(const std::string &mount_point); Server &set_file_extension_and_mimetype_mapping(const std::string &ext, const std::string &mime); + Server &set_default_file_mimetype(const std::string &mime); Server &set_file_request_handler(Handler handler); Server &set_error_handler(HandlerWithResponse handler); @@ -718,6 +885,8 @@ public: Server &set_socket_options(SocketOptions socket_options); Server &set_default_headers(Headers headers); + Server & + set_header_writer(std::function const &writer); Server &set_keep_alive_max_count(size_t count); Server &set_keep_alive_timeout(time_t sec); @@ -748,6 +917,8 @@ public: std::function new_task_queue; + bool routing(Request &req, Response &res, Stream &strm); + protected: bool process_request(Stream &strm, bool close_connection, bool &connection_closed, @@ -765,9 +936,14 @@ protected: size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; private: - using Handlers = std::vector>; + using Handlers = + std::vector, Handler>>; using HandlersForContentReader = - std::vector>; + std::vector, + HandlerWithContentReader>>; + + static std::unique_ptr + make_matcher(const std::string &pattern); socket_t create_server_socket(const std::string &host, int port, int socket_flags, @@ -775,19 +951,18 @@ private: int bind_internal(const std::string &host, int port, int socket_flags); bool listen_internal(); - bool routing(Request &req, Response &res, Stream &strm); bool handle_file_request(const Request &req, Response &res, bool head = false); - bool dispatch_request(Request &req, Response &res, const Handlers &handlers); - bool - dispatch_request_for_content_reader(Request &req, Response &res, - ContentReader content_reader, - const HandlersForContentReader &handlers); + bool dispatch_request(Request &req, Response &res, + const Handlers &handlers) const; + bool dispatch_request_for_content_reader( + Request &req, Response &res, ContentReader content_reader, + const HandlersForContentReader &handlers) const; - bool parse_request_line(const char *s, Request &req); + bool parse_request_line(const char *s, Request &req) const; void apply_ranges(const Request &req, Response &res, - std::string &content_type, std::string &boundary); - bool write_response(Stream &strm, bool close_connection, const Request &req, + std::string &content_type, std::string &boundary) const; + bool write_response(Stream &strm, bool close_connection, Request &req, Response &res); bool write_response_with_content(Stream &strm, bool close_connection, const Request &req, Response &res); @@ -806,21 +981,23 @@ private: bool read_content_core(Stream &strm, Request &req, Response &res, ContentReceiver receiver, MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver); + ContentReceiver multipart_receiver) const; virtual bool process_and_close_socket(socket_t sock); + std::atomic is_running_{false}; + std::atomic done_{false}; + struct MountPointEntry { std::string mount_point; std::string base_dir; Headers headers; }; std::vector base_dirs_; - - std::atomic is_running_{false}; - std::atomic done_{false}; std::map file_extension_and_mimetype_map_; + std::string default_file_mimetype_ = "application/octet-stream"; Handler file_request_handler_; + Handlers get_handlers_; Handlers post_handlers_; HandlersForContentReader post_handlers_for_content_reader_; @@ -831,18 +1008,22 @@ private: Handlers delete_handlers_; HandlersForContentReader delete_handlers_for_content_reader_; Handlers options_handlers_; + HandlerWithResponse error_handler_; ExceptionHandler exception_handler_; HandlerWithResponse pre_routing_handler_; Handler post_routing_handler_; - Logger logger_; Expect100ContinueHandler expect_100_continue_handler_; + Logger logger_; + int address_family_ = AF_UNSPEC; bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; SocketOptions socket_options_ = default_socket_options; Headers default_headers_; + std::function header_writer_ = + detail::write_headers; }; enum class Error { @@ -860,17 +1041,19 @@ enum class Error { UnsupportedMultipartBoundaryChars, Compression, ConnectionTimeout, + ProxyConnection, // For internal use only SSLPeerCouldBeClosed_, }; -std::string to_string(const Error error); +std::string to_string(Error error); std::ostream &operator<<(std::ostream &os, const Error &obj); class Result { public: + Result() = default; Result(std::unique_ptr &&res, Error err, Headers &&request_headers = Headers{}) : res_(std::move(res)), err_(err), @@ -893,13 +1076,13 @@ public: bool has_request_header(const std::string &key) const; std::string get_request_header_value(const std::string &key, size_t id = 0) const; - template - T get_request_header_value(const std::string &key, size_t id = 0) const; + uint64_t get_request_header_value_u64(const std::string &key, + size_t id = 0) const; size_t get_request_header_value_count(const std::string &key) const; private: std::unique_ptr res_; - Error err_; + Error err_ = Error::Unknown; Headers request_headers_; }; @@ -1059,16 +1242,21 @@ public: bool send(Request &req, Response &res, Error &error); Result send(const Request &req); - size_t is_socket_open() const; - - socket_t socket() const; - void stop(); + std::string host() const; + int port() const; + + size_t is_socket_open() const; + socket_t socket() const; + void set_hostname_addr_map(std::map addr_map); void set_default_headers(Headers headers); + void + set_header_writer(std::function const &writer); + void set_address_family(int family); void set_tcp_nodelay(bool on); void set_socket_options(SocketOptions socket_options); @@ -1117,6 +1305,7 @@ public: void set_ca_cert_path(const std::string &ca_cert_file_path, const std::string &ca_cert_dir_path = std::string()); void set_ca_cert_store(X509_STORE *ca_cert_store); + X509_STORE *create_ca_cert_store(const char *ca_cert, std::size_t size) const; #endif #ifdef CPPHTTPLIB_OPENSSL_SUPPORT @@ -1145,14 +1334,14 @@ protected: // Also, shutdown_ssl and close_socket should also NOT be called concurrently // with a DIFFERENT thread sending requests using that socket. virtual void shutdown_ssl(Socket &socket, bool shutdown_gracefully); - void shutdown_socket(Socket &socket); + void shutdown_socket(Socket &socket) const; void close_socket(Socket &socket); bool process_request(Stream &strm, Request &req, Response &res, bool close_connection, Error &error); bool write_content_with_provider(Stream &strm, const Request &req, - Error &error); + Error &error) const; void copy_settings(const ClientImpl &rhs); @@ -1177,6 +1366,10 @@ protected: // Default headers Headers default_headers_; + // Header writer + std::function header_writer_ = + detail::write_headers; + // Settings std::string client_cert_path_; std::string client_key_path_; @@ -1239,7 +1432,8 @@ private: Result send_(Request &&req); socket_t create_client_socket(Error &error) const; - bool read_response_line(Stream &strm, const Request &req, Response &res); + bool read_response_line(Stream &strm, const Request &req, + Response &res) const; bool write_request(Stream &strm, Request &req, bool close_connection, Error &error); bool redirect(Request &req, Response &res, Error &error); @@ -1258,7 +1452,7 @@ private: const std::string &content_type); ContentProviderWithoutLength get_multipart_content_provider( const std::string &boundary, const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items); + const MultipartFormDataProviderItems &provider_items) const; std::string adjust_host_string(const std::string &host) const; @@ -1431,16 +1625,21 @@ public: bool send(Request &req, Response &res, Error &error); Result send(const Request &req); - size_t is_socket_open() const; - - socket_t socket() const; - void stop(); + std::string host() const; + int port() const; + + size_t is_socket_open() const; + socket_t socket() const; + void set_hostname_addr_map(std::map addr_map); void set_default_headers(Headers headers); + void + set_header_writer(std::function const &writer); + void set_address_family(int family); void set_tcp_nodelay(bool on); void set_socket_options(SocketOptions socket_options); @@ -1497,6 +1696,7 @@ public: const std::string &ca_cert_dir_path = std::string()); void set_ca_cert_store(X509_STORE *ca_cert_store); + void load_ca_cert_store(const char *ca_cert, std::size_t size); long get_openssl_verify_result() const; @@ -1556,6 +1756,7 @@ public: bool is_valid() const override; void set_ca_cert_store(X509_STORE *ca_cert_store); + void load_ca_cert_store(const char *ca_cert, std::size_t size); long get_openssl_verify_result() const; @@ -1564,7 +1765,7 @@ public: private: bool create_and_connect_socket(Socket &socket, Error &error) override; void shutdown_ssl(Socket &socket, bool shutdown_gracefully) override; - void shutdown_ssl_impl(Socket &socket, bool shutdown_socket); + void shutdown_ssl_impl(Socket &socket, bool shutdown_gracefully); bool process_socket(const Socket &socket, std::function callback) override; @@ -1608,15 +1809,9 @@ inline void duration_to_sec_and_usec(const T &duration, U callback) { callback(static_cast(sec), static_cast(usec)); } -template -inline T get_header_value(const Headers & /*headers*/, - const std::string & /*key*/, size_t /*id*/ = 0, - uint64_t /*def*/ = 0) {} - -template <> -inline uint64_t get_header_value(const Headers &headers, - const std::string &key, size_t id, - uint64_t def) { +inline uint64_t get_header_value_u64(const Headers &headers, + const std::string &key, size_t id, + uint64_t def) { auto rng = headers.equal_range(key); auto it = rng.first; std::advance(it, static_cast(id)); @@ -1628,14 +1823,14 @@ inline uint64_t get_header_value(const Headers &headers, } // namespace detail -template -inline T Request::get_header_value(const std::string &key, size_t id) const { - return detail::get_header_value(headers, key, id, 0); +inline uint64_t Request::get_header_value_u64(const std::string &key, + size_t id) const { + return detail::get_header_value_u64(headers, key, id, 0); } -template -inline T Response::get_header_value(const std::string &key, size_t id) const { - return detail::get_header_value(headers, key, id, 0); +inline uint64_t Response::get_header_value_u64(const std::string &key, + size_t id) const { + return detail::get_header_value_u64(headers, key, id, 0); } template @@ -1665,21 +1860,106 @@ inline ssize_t Stream::write_format(const char *fmt, const Args &...args) { inline void default_socket_options(socket_t sock) { int yes = 1; #ifdef _WIN32 - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + reinterpret_cast(&yes), sizeof(yes)); setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, - reinterpret_cast(&yes), sizeof(yes)); + reinterpret_cast(&yes), sizeof(yes)); #else #ifdef SO_REUSEPORT - setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), - sizeof(yes)); + setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, + reinterpret_cast(&yes), sizeof(yes)); #else - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + reinterpret_cast(&yes), sizeof(yes)); #endif #endif } +inline const char *status_message(int status) { + switch (status) { + case StatusCode::Continue_100: return "Continue"; + case StatusCode::SwitchingProtocol_101: return "Switching Protocol"; + case StatusCode::Processing_102: return "Processing"; + case StatusCode::EarlyHints_103: return "Early Hints"; + case StatusCode::OK_200: return "OK"; + case StatusCode::Created_201: return "Created"; + case StatusCode::Accepted_202: return "Accepted"; + case StatusCode::NonAuthoritativeInformation_203: + return "Non-Authoritative Information"; + case StatusCode::NoContent_204: return "No Content"; + case StatusCode::ResetContent_205: return "Reset Content"; + case StatusCode::PartialContent_206: return "Partial Content"; + case StatusCode::MultiStatus_207: return "Multi-Status"; + case StatusCode::AlreadyReported_208: return "Already Reported"; + case StatusCode::IMUsed_226: return "IM Used"; + case StatusCode::MultipleChoices_300: return "Multiple Choices"; + case StatusCode::MovedPermanently_301: return "Moved Permanently"; + case StatusCode::Found_302: return "Found"; + case StatusCode::SeeOther_303: return "See Other"; + case StatusCode::NotModified_304: return "Not Modified"; + case StatusCode::UseProxy_305: return "Use Proxy"; + case StatusCode::unused_306: return "unused"; + case StatusCode::TemporaryRedirect_307: return "Temporary Redirect"; + case StatusCode::PermanentRedirect_308: return "Permanent Redirect"; + case StatusCode::BadRequest_400: return "Bad Request"; + case StatusCode::Unauthorized_401: return "Unauthorized"; + case StatusCode::PaymentRequired_402: return "Payment Required"; + case StatusCode::Forbidden_403: return "Forbidden"; + case StatusCode::NotFound_404: return "Not Found"; + case StatusCode::MethodNotAllowed_405: return "Method Not Allowed"; + case StatusCode::NotAcceptable_406: return "Not Acceptable"; + case StatusCode::ProxyAuthenticationRequired_407: + return "Proxy Authentication Required"; + case StatusCode::RequestTimeout_408: return "Request Timeout"; + case StatusCode::Conflict_409: return "Conflict"; + case StatusCode::Gone_410: return "Gone"; + case StatusCode::LengthRequired_411: return "Length Required"; + case StatusCode::PreconditionFailed_412: return "Precondition Failed"; + case StatusCode::PayloadTooLarge_413: return "Payload Too Large"; + case StatusCode::UriTooLong_414: return "URI Too Long"; + case StatusCode::UnsupportedMediaType_415: return "Unsupported Media Type"; + case StatusCode::RangeNotSatisfiable_416: return "Range Not Satisfiable"; + case StatusCode::ExpectationFailed_417: return "Expectation Failed"; + case StatusCode::ImATeapot_418: return "I'm a teapot"; + case StatusCode::MisdirectedRequest_421: return "Misdirected Request"; + case StatusCode::UnprocessableContent_422: return "Unprocessable Content"; + case StatusCode::Locked_423: return "Locked"; + case StatusCode::FailedDependency_424: return "Failed Dependency"; + case StatusCode::TooEarly_425: return "Too Early"; + case StatusCode::UpgradeRequired_426: return "Upgrade Required"; + case StatusCode::PreconditionRequired_428: return "Precondition Required"; + case StatusCode::TooManyRequests_429: return "Too Many Requests"; + case StatusCode::RequestHeaderFieldsTooLarge_431: + return "Request Header Fields Too Large"; + case StatusCode::UnavailableForLegalReasons_451: + return "Unavailable For Legal Reasons"; + case StatusCode::NotImplemented_501: return "Not Implemented"; + case StatusCode::BadGateway_502: return "Bad Gateway"; + case StatusCode::ServiceUnavailable_503: return "Service Unavailable"; + case StatusCode::GatewayTimeout_504: return "Gateway Timeout"; + case StatusCode::HttpVersionNotSupported_505: + return "HTTP Version Not Supported"; + case StatusCode::VariantAlsoNegotiates_506: return "Variant Also Negotiates"; + case StatusCode::InsufficientStorage_507: return "Insufficient Storage"; + case StatusCode::LoopDetected_508: return "Loop Detected"; + case StatusCode::NotExtended_510: return "Not Extended"; + case StatusCode::NetworkAuthenticationRequired_511: + return "Network Authentication Required"; + + default: + case StatusCode::InternalServerError_500: return "Internal Server Error"; + } +} + +inline std::string get_bearer_token_auth(const Request &req) { + if (req.has_header("Authorization")) { + static std::string BearerHeaderPrefix = "Bearer "; + return req.get_header_value("Authorization") + .substr(BearerHeaderPrefix.length()); + } + return ""; +} + template inline Server & Server::set_read_timeout(const std::chrono::duration &duration) { @@ -1720,6 +2000,7 @@ inline std::string to_string(const Error error) { return "Unsupported HTTP multipart boundary characters"; case Error::Compression: return "Compression failed"; case Error::ConnectionTimeout: return "Connection timed out"; + case Error::ProxyConnection: return "Proxy connection failed"; case Error::Unknown: return "Unknown"; default: break; } @@ -1733,10 +2014,9 @@ inline std::ostream &operator<<(std::ostream &os, const Error &obj) { return os; } -template -inline T Result::get_request_header_value(const std::string &key, - size_t id) const { - return detail::get_header_value(request_headers_, key, id, 0); +inline uint64_t Result::get_request_header_value_u64(const std::string &key, + size_t id) const { + return detail::get_header_value_u64(request_headers_, key, id, 0); } template @@ -1790,7 +2070,7 @@ void hosted_at(const std::string &hostname, std::vector &addrs); std::string append_query_params(const std::string &path, const Params ¶ms); -std::pair make_range_header(Ranges ranges); +std::pair make_range_header(const Ranges &ranges); std::pair make_basic_authentication_header(const std::string &username, @@ -1810,6 +2090,9 @@ std::string trim_copy(const std::string &s); void split(const char *b, const char *e, char d, std::function fn); +void split(const char *b, const char *e, char d, size_t m, + std::function fn); + bool process_client_socket(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, time_t write_timeout_usec, @@ -1886,7 +2169,7 @@ public: class nocompressor : public compressor { public: - virtual ~nocompressor() = default; + ~nocompressor() override = default; bool compress(const char *data, size_t data_length, bool /*last*/, Callback callback) override; @@ -1896,7 +2179,7 @@ public: class gzip_compressor : public compressor { public: gzip_compressor(); - ~gzip_compressor(); + ~gzip_compressor() override; bool compress(const char *data, size_t data_length, bool last, Callback callback) override; @@ -1909,7 +2192,7 @@ private: class gzip_decompressor : public decompressor { public: gzip_decompressor(); - ~gzip_decompressor(); + ~gzip_decompressor() override; bool is_valid() const override; @@ -1972,6 +2255,29 @@ private: std::string glowable_buffer_; }; +class mmap { +public: + mmap(const char *path); + ~mmap(); + + bool open(const char *path); + void close(); + + bool is_open() const; + size_t size() const; + const char *data() const; + +private: +#if defined(_WIN32) + HANDLE hFile_; + HANDLE hMapping_; +#else + int fd_; +#endif + size_t size_; + void *addr_; +}; + } // namespace detail // ---------------------------------------------------------------------------- @@ -2003,7 +2309,7 @@ inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, val = 0; for (; cnt; i++, cnt--) { if (!s[i]) { return false; } - int v = 0; + auto v = 0; if (is_hex(s[i], v)) { val = val * 16 + v; } else { @@ -2014,7 +2320,7 @@ inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, } inline std::string from_i_to_hex(size_t n) { - const char *charset = "0123456789abcdef"; + static const auto charset = "0123456789abcdef"; std::string ret; do { ret = charset[n & 15] + ret; @@ -2025,7 +2331,7 @@ inline std::string from_i_to_hex(size_t n) { inline size_t to_utf8(int code, char *buff) { if (code < 0x0080) { - buff[0] = (code & 0x7F); + buff[0] = static_cast(code & 0x7F); return 1; } else if (code < 0x0800) { buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); @@ -2064,8 +2370,8 @@ inline std::string base64_encode(const std::string &in) { std::string out; out.reserve(in.size()); - int val = 0; - int valb = -6; + auto val = 0; + auto valb = -6; for (auto c : in) { val = (val << 8) + static_cast(c); @@ -2112,6 +2418,11 @@ inline bool is_valid_path(const std::string &path) { // Read component auto beg = i; while (i < path.size() && path[i] != '/') { + if (path[i] == '\0') { + return false; + } else if (path[i] == '\\') { + return false; + } i++; } @@ -2196,7 +2507,7 @@ inline std::string decode_url(const std::string &s, for (size_t i = 0; i < s.size(); i++) { if (s[i] == '%' && i + 1 < s.size()) { if (s[i + 1] == 'u') { - int val = 0; + auto val = 0; if (from_hex_to_i(s, i + 2, 4, val)) { // 4 digits Unicode codes char buff[4]; @@ -2207,7 +2518,7 @@ inline std::string decode_url(const std::string &s, result += s[i]; } } else { - int val = 0; + auto val = 0; if (from_hex_to_i(s, i + 1, 2, val)) { // 2 digits hex codes result += static_cast(val); @@ -2260,16 +2571,30 @@ inline std::string trim_copy(const std::string &s) { return s.substr(r.first, r.second - r.first); } +inline std::string trim_double_quotes_copy(const std::string &s) { + if (s.length() >= 2 && s.front() == '"' && s.back() == '"') { + return s.substr(1, s.size() - 2); + } + return s; +} + inline void split(const char *b, const char *e, char d, std::function fn) { + return split(b, e, d, (std::numeric_limits::max)(), std::move(fn)); +} + +inline void split(const char *b, const char *e, char d, size_t m, + std::function fn) { size_t i = 0; size_t beg = 0; + size_t count = 1; while (e ? (b + i < e) : (b[i] != '\0')) { - if (b[i] == d) { + if (b[i] == d && count < m) { auto r = trim(b, e, beg, i); if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } beg = i + 1; + count++; } i++; } @@ -2345,6 +2670,97 @@ inline void stream_line_reader::append(char c) { } } +inline mmap::mmap(const char *path) +#if defined(_WIN32) + : hFile_(NULL), hMapping_(NULL) +#else + : fd_(-1) +#endif + , + size_(0), addr_(nullptr) { + open(path); +} + +inline mmap::~mmap() { close(); } + +inline bool mmap::open(const char *path) { + close(); + +#if defined(_WIN32) + hFile_ = ::CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile_ == INVALID_HANDLE_VALUE) { return false; } + + size_ = ::GetFileSize(hFile_, NULL); + + hMapping_ = ::CreateFileMapping(hFile_, NULL, PAGE_READONLY, 0, 0, NULL); + + if (hMapping_ == NULL) { + close(); + return false; + } + + addr_ = ::MapViewOfFile(hMapping_, FILE_MAP_READ, 0, 0, 0); +#else + fd_ = ::open(path, O_RDONLY); + if (fd_ == -1) { return false; } + + struct stat sb; + if (fstat(fd_, &sb) == -1) { + close(); + return false; + } + size_ = static_cast(sb.st_size); + + addr_ = ::mmap(NULL, size_, PROT_READ, MAP_PRIVATE, fd_, 0); +#endif + + if (addr_ == nullptr) { + close(); + return false; + } + + return true; +} + +inline bool mmap::is_open() const { return addr_ != nullptr; } + +inline size_t mmap::size() const { return size_; } + +inline const char *mmap::data() const { + return static_cast(addr_); +} + +inline void mmap::close() { +#if defined(_WIN32) + if (addr_) { + ::UnmapViewOfFile(addr_); + addr_ = nullptr; + } + + if (hMapping_) { + ::CloseHandle(hMapping_); + hMapping_ = NULL; + } + + if (hFile_ != INVALID_HANDLE_VALUE) { + ::CloseHandle(hFile_); + hFile_ = INVALID_HANDLE_VALUE; + } +#else + if (addr_ != nullptr) { + munmap(addr_, size_); + addr_ = nullptr; + } + + if (fd_ != -1) { + ::close(fd_); + fd_ = -1; + } +#endif + size_ = 0; +} inline int close_socket(socket_t sock) { #ifdef _WIN32 return closesocket(sock); @@ -2354,7 +2770,7 @@ inline int close_socket(socket_t sock) { } template inline ssize_t handle_EINTR(T fn) { - ssize_t res = false; + ssize_t res = 0; while (true) { res = fn(); if (res < 0 && errno == EINTR) { continue; } @@ -2399,7 +2815,7 @@ inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); #else #ifndef _WIN32 - if (sock >= FD_SETSIZE) { return 1; } + if (sock >= FD_SETSIZE) { return -1; } #endif fd_set fds; @@ -2427,7 +2843,7 @@ inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); #else #ifndef _WIN32 - if (sock >= FD_SETSIZE) { return 1; } + if (sock >= FD_SETSIZE) { return -1; } #endif fd_set fds; @@ -2458,7 +2874,7 @@ inline Error wait_until_socket_is_ready(socket_t sock, time_t sec, if (poll_res == 0) { return Error::ConnectionTimeout; } if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - int error = 0; + auto error = 0; socklen_t len = sizeof(error); auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, reinterpret_cast(&error), &len); @@ -2490,7 +2906,7 @@ inline Error wait_until_socket_is_ready(socket_t sock, time_t sec, if (ret == 0) { return Error::ConnectionTimeout; } if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - int error = 0; + auto error = 0; socklen_t len = sizeof(error); auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, reinterpret_cast(&error), &len); @@ -2537,7 +2953,7 @@ private: size_t read_buff_off_ = 0; size_t read_buff_content_size_ = 0; - static const size_t read_buff_size_ = 1024 * 4; + static const size_t read_buff_size_ = 1024l * 4; }; #ifdef CPPHTTPLIB_OPENSSL_SUPPORT @@ -2666,7 +3082,7 @@ socket_t create_socket(const std::string &host, const std::string &ip, int port, #ifndef _WIN32 if (hints.ai_family == AF_UNIX) { const auto addrlen = host.length(); - if (addrlen > sizeof(sockaddr_un::sun_path)) return INVALID_SOCKET; + if (addrlen > sizeof(sockaddr_un::sun_path)) { return INVALID_SOCKET; } auto sock = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol); if (sock != INVALID_SOCKET) { @@ -2735,17 +3151,27 @@ socket_t create_socket(const std::string &host, const std::string &ip, int port, #endif if (tcp_nodelay) { - int yes = 1; - setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&yes), - sizeof(yes)); + auto yes = 1; +#ifdef _WIN32 + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, + reinterpret_cast(&yes), sizeof(yes)); +#else + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, + reinterpret_cast(&yes), sizeof(yes)); +#endif } if (socket_options) { socket_options(sock); } if (rp->ai_family == AF_INET6) { - int no = 0; - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); + auto no = 0; +#ifdef _WIN32 + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, + reinterpret_cast(&no), sizeof(no)); +#else + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, + reinterpret_cast(&no), sizeof(no)); +#endif } // bind or connect @@ -2804,7 +3230,7 @@ inline bool bind_ip_address(socket_t sock, const std::string &host) { return ret; } -#if !defined _WIN32 && !defined ANDROID && !defined _AIX +#if !defined _WIN32 && !defined ANDROID && !defined _AIX && !defined __MVS__ #define USE_IF2IP #endif @@ -2860,7 +3286,7 @@ inline socket_t create_client_socket( #ifdef USE_IF2IP auto ip_from_if = if2ip(address_family, intf); if (ip_from_if.empty()) { ip_from_if = intf; } - if (!bind_ip_address(sock2, ip_from_if.c_str())) { + if (!bind_ip_address(sock2, ip_from_if)) { error = Error::BindIPAddress; return false; } @@ -2888,13 +3314,14 @@ inline socket_t create_client_socket( #ifdef _WIN32 auto timeout = static_cast(read_timeout_sec * 1000 + read_timeout_usec / 1000); - setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, - sizeof(timeout)); + setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, + reinterpret_cast(&timeout), sizeof(timeout)); #else timeval tv; tv.tv_sec = static_cast(read_timeout_sec); tv.tv_usec = static_cast(read_timeout_usec); - setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv)); + setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, + reinterpret_cast(&tv), sizeof(tv)); #endif } { @@ -2902,13 +3329,14 @@ inline socket_t create_client_socket( #ifdef _WIN32 auto timeout = static_cast(write_timeout_sec * 1000 + write_timeout_usec / 1000); - setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, - sizeof(timeout)); + setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, + reinterpret_cast(&timeout), sizeof(timeout)); #else timeval tv; tv.tv_sec = static_cast(write_timeout_sec); tv.tv_usec = static_cast(write_timeout_usec); - setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(tv)); + setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, + reinterpret_cast(&tv), sizeof(tv)); #endif } @@ -3008,18 +3436,20 @@ inline constexpr unsigned int operator"" _t(const char *s, size_t l) { } // namespace udl -inline const char * +inline std::string find_content_type(const std::string &path, - const std::map &user_data) { + const std::map &user_data, + const std::string &default_content_type) { auto ext = file_extension(path); auto it = user_data.find(ext); - if (it != user_data.end()) { return it->second.c_str(); } + if (it != user_data.end()) { return it->second; } using udl::operator""_t; switch (str2tag(ext)) { - default: return nullptr; + default: return default_content_type; + case "css"_t: return "text/css"; case "csv"_t: return "text/csv"; case "htm"_t: @@ -3072,76 +3502,6 @@ find_content_type(const std::string &path, } } -inline const char *status_message(int status) { - switch (status) { - case 100: return "Continue"; - case 101: return "Switching Protocol"; - case 102: return "Processing"; - case 103: return "Early Hints"; - case 200: return "OK"; - case 201: return "Created"; - case 202: return "Accepted"; - case 203: return "Non-Authoritative Information"; - case 204: return "No Content"; - case 205: return "Reset Content"; - case 206: return "Partial Content"; - case 207: return "Multi-Status"; - case 208: return "Already Reported"; - case 226: return "IM Used"; - case 300: return "Multiple Choice"; - case 301: return "Moved Permanently"; - case 302: return "Found"; - case 303: return "See Other"; - case 304: return "Not Modified"; - case 305: return "Use Proxy"; - case 306: return "unused"; - case 307: return "Temporary Redirect"; - case 308: return "Permanent Redirect"; - case 400: return "Bad Request"; - case 401: return "Unauthorized"; - case 402: return "Payment Required"; - case 403: return "Forbidden"; - case 404: return "Not Found"; - case 405: return "Method Not Allowed"; - case 406: return "Not Acceptable"; - case 407: return "Proxy Authentication Required"; - case 408: return "Request Timeout"; - case 409: return "Conflict"; - case 410: return "Gone"; - case 411: return "Length Required"; - case 412: return "Precondition Failed"; - case 413: return "Payload Too Large"; - case 414: return "URI Too Long"; - case 415: return "Unsupported Media Type"; - case 416: return "Range Not Satisfiable"; - case 417: return "Expectation Failed"; - case 418: return "I'm a teapot"; - case 421: return "Misdirected Request"; - case 422: return "Unprocessable Entity"; - case 423: return "Locked"; - case 424: return "Failed Dependency"; - case 425: return "Too Early"; - case 426: return "Upgrade Required"; - case 428: return "Precondition Required"; - case 429: return "Too Many Requests"; - case 431: return "Request Header Fields Too Large"; - case 451: return "Unavailable For Legal Reasons"; - case 501: return "Not Implemented"; - case 502: return "Bad Gateway"; - case 503: return "Service Unavailable"; - case 504: return "Gateway Timeout"; - case 505: return "HTTP Version Not Supported"; - case 506: return "Variant Also Negotiates"; - case 507: return "Insufficient Storage"; - case 508: return "Loop Detected"; - case 510: return "Not Extended"; - case 511: return "Network Authentication Required"; - - default: - case 500: return "Internal Server Error"; - } -} - inline bool can_compress_content_type(const std::string &content_type) { using udl::operator""_t; @@ -3218,7 +3578,7 @@ inline bool gzip_compressor::compress(const char *data, size_t data_length, data += strm_.avail_in; auto flush = (last && data_length == 0) ? Z_FINISH : Z_NO_FLUSH; - int ret = Z_OK; + auto ret = Z_OK; std::array buff{}; do { @@ -3262,7 +3622,7 @@ inline bool gzip_decompressor::decompress(const char *data, size_t data_length, Callback callback) { assert(is_valid_); - int ret = Z_OK; + auto ret = Z_OK; do { constexpr size_t max_avail_in = @@ -3276,16 +3636,12 @@ inline bool gzip_decompressor::decompress(const char *data, size_t data_length, data += strm_.avail_in; std::array buff{}; - while (strm_.avail_in > 0) { + while (strm_.avail_in > 0 && ret == Z_OK) { strm_.avail_out = static_cast(buff.size()); strm_.next_out = reinterpret_cast(buff.data()); - auto prev_avail_in = strm_.avail_in; - ret = inflate(&strm_, Z_NO_FLUSH); - if (prev_avail_in - strm_.avail_in == 0) { return false; } - assert(ret != Z_STREAM_ERROR); switch (ret) { case Z_NEED_DICT: @@ -3298,7 +3654,7 @@ inline bool gzip_decompressor::decompress(const char *data, size_t data_length, } } - if (ret != Z_OK && ret != Z_STREAM_END) return false; + if (ret != Z_OK && ret != Z_STREAM_END) { return false; } } while (data_length > 0); @@ -3367,7 +3723,7 @@ inline bool brotli_decompressor::decompress(const char *data, return 0; } - const uint8_t *next_in = (const uint8_t *)data; + auto next_in = reinterpret_cast(data); size_t avail_in = data_length; size_t total_out; @@ -3437,6 +3793,9 @@ inline bool parse_header(const char *beg, const char *end, T fn) { } if (p < end) { + auto key_len = key_end - beg; + if (!key_len) { return false; } + auto key = std::string(beg, key_end); auto val = compare_case_ignore(key, "Location") ? std::string(p, end) @@ -3526,11 +3885,7 @@ inline bool read_content_without_length(Stream &strm, uint64_t r = 0; for (;;) { auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n < 0) { - return false; - } else if (n == 0) { - return true; - } + if (n <= 0) { return true; } if (!out(buf, static_cast(n), r, 0)) { return false; } r += static_cast(n); @@ -3566,7 +3921,7 @@ inline bool read_content_chunked(Stream &strm, T &x, if (!line_reader.getline()) { return false; } - if (strcmp(line_reader.ptr(), "\r\n")) { return false; } + if (strcmp(line_reader.ptr(), "\r\n") != 0) { return false; } if (!line_reader.getline()) { return false; } } @@ -3576,7 +3931,7 @@ inline bool read_content_chunked(Stream &strm, T &x, // Trailer if (!line_reader.getline()) { return false; } - while (strcmp(line_reader.ptr(), "\r\n")) { + while (strcmp(line_reader.ptr(), "\r\n") != 0) { if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } // Exclude line terminator @@ -3595,8 +3950,8 @@ inline bool read_content_chunked(Stream &strm, T &x, } inline bool is_chunked_transfer_encoding(const Headers &headers) { - return !strcasecmp(get_header_value(headers, "Transfer-Encoding", 0, ""), - "chunked"); + return compare_case_ignore( + get_header_value(headers, "Transfer-Encoding", 0, ""), "chunked"); } template @@ -3611,14 +3966,14 @@ bool prepare_content_receiver(T &x, int &status, #ifdef CPPHTTPLIB_ZLIB_SUPPORT decompressor = detail::make_unique(); #else - status = 415; + status = StatusCode::UnsupportedMediaType_415; return false; #endif } else if (encoding.find("br") != std::string::npos) { #ifdef CPPHTTPLIB_BROTLI_SUPPORT decompressor = detail::make_unique(); #else - status = 415; + status = StatusCode::UnsupportedMediaType_415; return false; #endif } @@ -3634,7 +3989,7 @@ bool prepare_content_receiver(T &x, int &status, }; return callback(std::move(out)); } else { - status = 500; + status = StatusCode::InternalServerError_500; return false; } } @@ -3662,7 +4017,7 @@ bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, } else if (!has_header(x.headers, "Content-Length")) { ret = read_content_without_length(strm, out); } else { - auto len = get_header_value(x.headers, "Content-Length"); + auto len = get_header_value_u64(x.headers, "Content-Length", 0, 0); if (len > payload_max_length) { exceed_payload_max_length = true; skip_content_with_length(strm, len); @@ -3672,7 +4027,10 @@ bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, } } - if (!ret) { status = exceed_payload_max_length ? 413 : 400; } + if (!ret) { + status = exceed_payload_max_length ? StatusCode::PayloadTooLarge_413 + : StatusCode::BadRequest_400; + } return ret; }); } // namespace detail @@ -3720,6 +4078,8 @@ inline bool write_content(Stream &strm, const ContentProvider &content_provider, return ok; }; + data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; + while (offset < end_offset && !is_shutting_down()) { if (!strm.is_writable()) { error = Error::Write; @@ -3764,6 +4124,8 @@ write_content_without_length(Stream &strm, return ok; }; + data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; + data_sink.done = [&](void) { data_available = false; }; while (data_available && !is_shutting_down()) { @@ -3814,6 +4176,8 @@ write_content_chunked(Stream &strm, const ContentProvider &content_provider, return ok; }; + data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; + auto done_with_trailer = [&](const Headers *trailer) { if (!ok) { return; } @@ -3898,7 +4262,8 @@ inline bool redirect(T &cli, Request &req, Response &res, new_req.path = path; new_req.redirect_count_ -= 1; - if (res.status == 303 && (req.method != "GET" && req.method != "HEAD")) { + if (res.status == StatusCode::SeeOther_303 && + (req.method != "GET" && req.method != "HEAD")) { new_req.method = "GET"; new_req.body.clear(); new_req.headers.clear(); @@ -3910,7 +4275,8 @@ inline bool redirect(T &cli, Request &req, Response &res, if (ret) { req = new_req; res = new_res; - res.location = location; + + if (res.location.empty()) { res.location = location; } } return ret; } @@ -3957,14 +4323,34 @@ inline bool parse_multipart_boundary(const std::string &content_type, if (pos == std::string::npos) { return false; } auto end = content_type.find(';', pos); auto beg = pos + strlen(boundary_keyword); - boundary = content_type.substr(beg, end - beg); - if (boundary.length() >= 2 && boundary.front() == '"' && - boundary.back() == '"') { - boundary = boundary.substr(1, boundary.size() - 2); - } + boundary = trim_double_quotes_copy(content_type.substr(beg, end - beg)); return !boundary.empty(); } +inline void parse_disposition_params(const std::string &s, Params ¶ms) { + std::set cache; + split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) { + std::string kv(b, e); + if (cache.find(kv) != cache.end()) { return; } + cache.insert(kv); + + std::string key; + std::string val; + split(b, e, '=', [&](const char *b2, const char *e2) { + if (key.empty()) { + key.assign(b2, e2); + } else { + val.assign(b2, e2); + } + }); + + if (!key.empty()) { + params.emplace(trim_double_quotes_copy((key)), + trim_double_quotes_copy((val))); + } + }); +} + #ifdef CPPHTTPLIB_NO_EXCEPTIONS inline bool parse_range_header(const std::string &s, Ranges &ranges) { #else @@ -3975,9 +4361,9 @@ inline bool parse_range_header(const std::string &s, Ranges &ranges) try { if (std::regex_match(s, m, re_first_range)) { auto pos = static_cast(m.position(1)); auto len = static_cast(m.length(1)); - bool all_valid_ranges = true; + auto all_valid_ranges = true; split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) return; + if (!all_valid_ranges) { return; } static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))"); std::cmatch cm; if (std::regex_match(b, e, cm, re_another_range)) { @@ -4022,11 +4408,6 @@ public: bool parse(const char *buf, size_t n, const ContentReceiver &content_callback, const MultipartContentHeader &header_callback) { - // TODO: support 'filename*' - static const std::regex re_content_disposition( - R"~(^Content-Disposition:\s*form-data;\s*name="(.*?)"(?:;\s*filename="(.*?)")?(?:;\s*filename\*=\S+)?\s*$)~", - std::regex_constants::icase); - buf_append(buf, n); while (buf_size() > 0) { @@ -4059,18 +4440,54 @@ public: break; } - static const std::string header_name = "content-type:"; const auto header = buf_head(pos); - if (start_with_case_ignore(header, header_name)) { - file_.content_type = trim_copy(header.substr(header_name.size())); + + if (!parse_header(header.data(), header.data() + header.size(), + [&](std::string &&, std::string &&) {})) { + is_valid_ = false; + return false; + } + + static const std::string header_content_type = "Content-Type:"; + + if (start_with_case_ignore(header, header_content_type)) { + file_.content_type = + trim_copy(header.substr(header_content_type.size())); } else { + static const std::regex re_content_disposition( + R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~", + std::regex_constants::icase); + std::smatch m; if (std::regex_match(header, m, re_content_disposition)) { - file_.name = m[1]; - file_.filename = m[2]; - } else { - is_valid_ = false; - return false; + Params params; + parse_disposition_params(m[1], params); + + auto it = params.find("name"); + if (it != params.end()) { + file_.name = it->second; + } else { + is_valid_ = false; + return false; + } + + it = params.find("filename"); + if (it != params.end()) { file_.filename = it->second; } + + it = params.find("filename*"); + if (it != params.end()) { + // Only allow UTF-8 enconnding... + static const std::regex re_rfc5987_encoding( + R"~(^UTF-8''(.+?)$)~", std::regex_constants::icase); + + std::smatch m2; + if (std::regex_match(it->second, m2, re_rfc5987_encoding)) { + file_.filename = decode_url(m2[1], false); // override... + } else { + is_valid_ = false; + return false; + } + } } } buf_erase(pos + crlf_.size()); @@ -4108,9 +4525,9 @@ public: buf_erase(crlf_.size()); state_ = 1; } else { - if (dash_crlf_.size() > buf_size()) { return true; } - if (buf_start_with(dash_crlf_)) { - buf_erase(dash_crlf_.size()); + if (dash_.size() > buf_size()) { return true; } + if (buf_start_with(dash_)) { + buf_erase(dash_.size()); is_valid_ = true; buf_erase(buf_size()); // Remove epilogue } else { @@ -4143,7 +4560,6 @@ private: const std::string dash_ = "--"; const std::string crlf_ = "\r\n"; - const std::string dash_crlf_ = "--\r\n"; std::string boundary_; std::string dash_boundary_crlf_; std::string crlf_dash_boundary_; @@ -4230,28 +4646,32 @@ inline std::string to_lower(const char *beg, const char *end) { return out; } -inline std::string make_multipart_data_boundary() { +inline std::string random_string(size_t length) { static const char data[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; // std::random_device might actually be deterministic on some // platforms, but due to lack of support in the c++ standard library, // doing better requires either some ugly hacks or breaking portability. - std::random_device seed_gen; + static std::random_device seed_gen; // Request 128 bits of entropy for initialization - std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), seed_gen()}; - std::mt19937 engine(seed_sequence); + static std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), + seed_gen()}; - std::string result = "--cpp-httplib-multipart-data-"; + static std::mt19937 engine(seed_sequence); - for (auto i = 0; i < 16; i++) { + std::string result; + for (size_t i = 0; i < length; i++) { result += data[engine() % (sizeof(data) - 1)]; } - return result; } +inline std::string make_multipart_data_boundary() { + return "--cpp-httplib-multipart-data-" + detail::random_string(16); +} + inline bool is_multipart_boundary_chars_valid(const std::string &boundary) { auto valid = true; for (size_t i = 0; i < boundary.size(); i++) { @@ -4304,48 +4724,96 @@ serialize_multipart_formdata(const MultipartFormDataItems &items, body += item.content + serialize_multipart_formdata_item_end(); } - if (finish) body += serialize_multipart_formdata_finish(boundary); + if (finish) { body += serialize_multipart_formdata_finish(boundary); } return body; } +inline bool range_error(Request &req, Response &res) { + if (!req.ranges.empty() && 200 <= res.status && res.status < 300) { + ssize_t contant_len = static_cast( + res.content_length_ ? res.content_length_ : res.body.size()); + + ssize_t prev_first_pos = -1; + ssize_t prev_last_pos = -1; + size_t overwrapping_count = 0; + + // NOTE: The following Range check is based on '14.2. Range' in RFC 9110 + // 'HTTP Semantics' to avoid potential denial-of-service attacks. + // https://www.rfc-editor.org/rfc/rfc9110#section-14.2 + + // Too many ranges + if (req.ranges.size() > CPPHTTPLIB_RANGE_MAX_COUNT) { return true; } + + for (auto &r : req.ranges) { + auto &first_pos = r.first; + auto &last_pos = r.second; + + if (first_pos == -1 && last_pos == -1) { + first_pos = 0; + last_pos = contant_len; + } + + if (first_pos == -1) { + first_pos = contant_len - last_pos; + last_pos = contant_len - 1; + } + + if (last_pos == -1) { last_pos = contant_len - 1; } + + // Range must be within content length + if (!(0 <= first_pos && first_pos <= last_pos && + last_pos <= contant_len - 1)) { + return true; + } + + // Ranges must be in ascending order + if (first_pos <= prev_first_pos) { return true; } + + // Request must not have more than two overlapping ranges + if (first_pos <= prev_last_pos) { + overwrapping_count++; + if (overwrapping_count > 2) { return true; } + } + + prev_first_pos = (std::max)(prev_first_pos, first_pos); + prev_last_pos = (std::max)(prev_last_pos, last_pos); + } + } + + return false; +} + inline std::pair -get_range_offset_and_length(const Request &req, size_t content_length, - size_t index) { - auto r = req.ranges[index]; +get_range_offset_and_length(Range r, size_t content_length) { + assert(r.first != -1 && r.second != -1); + assert(0 <= r.first && r.first < static_cast(content_length)); + assert(r.first <= r.second && + r.second < static_cast(content_length)); - if (r.first == -1 && r.second == -1) { - return std::make_pair(0, content_length); - } - - auto slen = static_cast(content_length); - - if (r.first == -1) { - r.first = (std::max)(static_cast(0), slen - r.second); - r.second = slen - 1; - } - - if (r.second == -1) { r.second = slen - 1; } return std::make_pair(r.first, static_cast(r.second - r.first) + 1); } -inline std::string make_content_range_header_field(size_t offset, size_t length, - size_t content_length) { +inline std::string make_content_range_header_field( + const std::pair &offset_and_length, size_t content_length) { + auto st = offset_and_length.first; + auto ed = st + offset_and_length.second - 1; + std::string field = "bytes "; - field += std::to_string(offset); + field += std::to_string(st); field += "-"; - field += std::to_string(offset + length - 1); + field += std::to_string(ed); field += "/"; field += std::to_string(content_length); return field; } template -bool process_multipart_ranges_data(const Request &req, Response &res, +bool process_multipart_ranges_data(const Request &req, const std::string &boundary, const std::string &content_type, - SToken stoken, CToken ctoken, - Content content) { + size_t content_length, SToken stoken, + CToken ctoken, Content content) { for (size_t i = 0; i < req.ranges.size(); i++) { ctoken("--"); stoken(boundary); @@ -4356,50 +4824,51 @@ bool process_multipart_ranges_data(const Request &req, Response &res, ctoken("\r\n"); } - auto offsets = get_range_offset_and_length(req, res.body.size(), i); - auto offset = offsets.first; - auto length = offsets.second; + auto offset_and_length = + get_range_offset_and_length(req.ranges[i], content_length); ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset, length, res.body.size())); + stoken(make_content_range_header_field(offset_and_length, content_length)); ctoken("\r\n"); ctoken("\r\n"); - if (!content(offset, length)) { return false; } + + if (!content(offset_and_length.first, offset_and_length.second)) { + return false; + } ctoken("\r\n"); } ctoken("--"); stoken(boundary); - ctoken("--\r\n"); + ctoken("--"); return true; } -inline bool make_multipart_ranges_data(const Request &req, Response &res, +inline void make_multipart_ranges_data(const Request &req, Response &res, const std::string &boundary, const std::string &content_type, + size_t content_length, std::string &data) { - return process_multipart_ranges_data( - req, res, boundary, content_type, + process_multipart_ranges_data( + req, boundary, content_type, content_length, [&](const std::string &token) { data += token; }, [&](const std::string &token) { data += token; }, [&](size_t offset, size_t length) { - if (offset < res.body.size()) { - data += res.body.substr(offset, length); - return true; - } - return false; + assert(offset + length <= content_length); + data += res.body.substr(offset, length); + return true; }); } -inline size_t -get_multipart_ranges_data_length(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { +inline size_t get_multipart_ranges_data_length(const Request &req, + const std::string &boundary, + const std::string &content_type, + size_t content_length) { size_t data_length = 0; process_multipart_ranges_data( - req, res, boundary, content_type, + req, boundary, content_type, content_length, [&](const std::string &token) { data_length += token.size(); }, [&](const std::string &token) { data_length += token.size(); }, [&](size_t /*offset*/, size_t length) { @@ -4411,13 +4880,13 @@ get_multipart_ranges_data_length(const Request &req, Response &res, } template -inline bool write_multipart_ranges_data(Stream &strm, const Request &req, - Response &res, - const std::string &boundary, - const std::string &content_type, - const T &is_shutting_down) { +inline bool +write_multipart_ranges_data(Stream &strm, const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type, + size_t content_length, const T &is_shutting_down) { return process_multipart_ranges_data( - req, res, boundary, content_type, + req, boundary, content_type, content_length, [&](const std::string &token) { strm.write(token); }, [&](const std::string &token) { strm.write(token); }, [&](size_t offset, size_t length) { @@ -4426,18 +4895,6 @@ inline bool write_multipart_ranges_data(Stream &strm, const Request &req, }); } -inline std::pair -get_range_offset_and_length(const Request &req, const Response &res, - size_t index) { - auto r = req.ranges[index]; - - if (r.second == -1) { - r.second = static_cast(res.content_length_) - 1; - } - - return std::make_pair(r.first, r.second - r.first + 1); -} - inline bool expect_content(const Request &req) { if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || req.method == "PRI" || req.method == "DELETE") { @@ -4471,7 +4928,7 @@ inline std::string message_digest(const std::string &s, const EVP_MD *algo) { std::stringstream ss; for (auto i = 0u; i < hash_length; ++i) { ss << std::hex << std::setw(2) << std::setfill('0') - << (unsigned int)hash[i]; + << static_cast(hash[i]); } return ss.str(); @@ -4564,7 +5021,7 @@ inline bool retrieve_root_certs_from_keychain(CFObjectPtr &certs) { inline bool add_certs_to_x509_store(CFArrayRef certs, X509_STORE *store) { auto result = false; - for (int i = 0; i < CFArrayGetCount(certs); ++i) { + for (auto i = 0; i < CFArrayGetCount(certs); ++i) { const auto cert = reinterpret_cast( CFArrayGetValueAtIndex(certs, i)); @@ -4707,7 +5164,7 @@ inline bool parse_www_authenticate(const Response &res, s = s.substr(pos + 1); auto beg = std::sregex_iterator(s.begin(), s.end(), re); for (auto i = beg; i != std::sregex_iterator(); ++i) { - auto m = *i; + const auto &m = *i; auto key = s.substr(static_cast(m.position(1)), static_cast(m.length(1))); auto val = m.length(2) > 0 @@ -4724,20 +5181,6 @@ inline bool parse_www_authenticate(const Response &res, return false; } -// https://stackoverflow.com/questions/440133/how-do-i-create-a-random-alpha-numeric-string-in-c/440240#answer-440240 -inline std::string random_string(size_t length) { - auto randchar = []() -> char { - const char charset[] = "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - const size_t max_index = (sizeof(charset) - 1); - return charset[static_cast(std::rand()) % max_index]; - }; - std::string str(length, 0); - std::generate_n(str.begin(), length, randchar); - return str; -} - class ContentProviderAdapter { public: explicit ContentProviderAdapter( @@ -4782,7 +5225,7 @@ inline void hosted_at(const std::string &hostname, const auto &addr = *reinterpret_cast(rp->ai_addr); std::string ip; - int dummy = -1; + auto dummy = -1; if (detail::get_ip_and_port(addr, sizeof(struct sockaddr_storage), ip, dummy)) { addrs.push_back(ip); @@ -4802,10 +5245,11 @@ inline std::string append_query_params(const std::string &path, } // Header utilities -inline std::pair make_range_header(Ranges ranges) { +inline std::pair +make_range_header(const Ranges &ranges) { std::string field = "bytes="; auto i = 0; - for (auto r : ranges) { + for (const auto &r : ranges) { if (i != 0) { field += ", "; } if (r.first != -1) { field += std::to_string(r.first); } field += '-'; @@ -4924,7 +5368,7 @@ inline void Response::set_redirect(const std::string &url, int stat) { if (300 <= stat && stat < 400) { this->status = stat; } else { - this->status = 302; + this->status = StatusCode::Found_302; } } } @@ -4943,13 +5387,22 @@ inline void Response::set_content(const std::string &s, set_content(s.data(), s.size(), content_type); } +inline void Response::set_content(std::string &&s, + const std::string &content_type) { + body = std::move(s); + + auto rng = headers.equal_range("Content-Type"); + headers.erase(rng.first, rng.second); + set_header("Content-Type", content_type); +} + inline void Response::set_content_provider( size_t in_length, const std::string &content_type, ContentProvider provider, ContentProviderResourceReleaser resource_releaser) { set_header("Content-Type", content_type); content_length_ = in_length; if (in_length > 0) { content_provider_ = std::move(provider); } - content_provider_resource_releaser_ = resource_releaser; + content_provider_resource_releaser_ = std::move(resource_releaser); is_chunked_content_provider_ = false; } @@ -4959,7 +5412,7 @@ inline void Response::set_content_provider( set_header("Content-Type", content_type); content_length_ = 0; content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = resource_releaser; + content_provider_resource_releaser_ = std::move(resource_releaser); is_chunked_content_provider_ = false; } @@ -4969,7 +5422,7 @@ inline void Response::set_chunked_content_provider( set_header("Content-Type", content_type); content_length_ = 0; content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = resource_releaser; + content_provider_resource_releaser_ = std::move(resource_releaser); is_chunked_content_provider_ = true; } @@ -5010,7 +5463,7 @@ inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, write_timeout_sec_(write_timeout_sec), write_timeout_usec_(write_timeout_usec), read_buff_(read_buff_size_, 0) {} -inline SocketStream::~SocketStream() {} +inline SocketStream::~SocketStream() = default; inline bool SocketStream::is_readable() const { return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; @@ -5120,6 +5573,99 @@ inline socket_t BufferStream::socket() const { return 0; } inline const std::string &BufferStream::get_buffer() const { return buffer; } +inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { + // One past the last ending position of a path param substring + std::size_t last_param_end = 0; + +#ifndef CPPHTTPLIB_NO_EXCEPTIONS + // Needed to ensure that parameter names are unique during matcher + // construction + // If exceptions are disabled, only last duplicate path + // parameter will be set + std::unordered_set param_name_set; +#endif + + while (true) { + const auto marker_pos = pattern.find(marker, last_param_end); + if (marker_pos == std::string::npos) { break; } + + static_fragments_.push_back( + pattern.substr(last_param_end, marker_pos - last_param_end)); + + const auto param_name_start = marker_pos + 1; + + auto sep_pos = pattern.find(separator, param_name_start); + if (sep_pos == std::string::npos) { sep_pos = pattern.length(); } + + auto param_name = + pattern.substr(param_name_start, sep_pos - param_name_start); + +#ifndef CPPHTTPLIB_NO_EXCEPTIONS + if (param_name_set.find(param_name) != param_name_set.cend()) { + std::string msg = "Encountered path parameter '" + param_name + + "' multiple times in route pattern '" + pattern + "'."; + throw std::invalid_argument(msg); + } +#endif + + param_names_.push_back(std::move(param_name)); + + last_param_end = sep_pos + 1; + } + + if (last_param_end < pattern.length()) { + static_fragments_.push_back(pattern.substr(last_param_end)); + } +} + +inline bool PathParamsMatcher::match(Request &request) const { + request.matches = std::smatch(); + request.path_params.clear(); + request.path_params.reserve(param_names_.size()); + + // One past the position at which the path matched the pattern last time + std::size_t starting_pos = 0; + for (size_t i = 0; i < static_fragments_.size(); ++i) { + const auto &fragment = static_fragments_[i]; + + if (starting_pos + fragment.length() > request.path.length()) { + return false; + } + + // Avoid unnecessary allocation by using strncmp instead of substr + + // comparison + if (std::strncmp(request.path.c_str() + starting_pos, fragment.c_str(), + fragment.length()) != 0) { + return false; + } + + starting_pos += fragment.length(); + + // Should only happen when we have a static fragment after a param + // Example: '/users/:id/subscriptions' + // The 'subscriptions' fragment here does not have a corresponding param + if (i >= param_names_.size()) { continue; } + + auto sep_pos = request.path.find(separator, starting_pos); + if (sep_pos == std::string::npos) { sep_pos = request.path.length(); } + + const auto ¶m_name = param_names_[i]; + + request.path_params.emplace( + param_name, request.path.substr(starting_pos, sep_pos - starting_pos)); + + // Mark everythin up to '/' as matched + starting_pos = sep_pos + 1; + } + // Returns false if the path is longer than the pattern + return starting_pos >= request.path.length(); +} + +inline bool RegexMatcher::match(Request &request) const { + request.path_params.clear(); + return std::regex_match(request.path, request.matches, regex_); +} + } // namespace detail // HTTP server implementation @@ -5131,69 +5677,72 @@ inline Server::Server() #endif } -inline Server::~Server() {} +inline Server::~Server() = default; + +inline std::unique_ptr +Server::make_matcher(const std::string &pattern) { + if (pattern.find("/:") != std::string::npos) { + return detail::make_unique(pattern); + } else { + return detail::make_unique(pattern); + } +} inline Server &Server::Get(const std::string &pattern, Handler handler) { - get_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + get_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } inline Server &Server::Post(const std::string &pattern, Handler handler) { - post_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + post_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } inline Server &Server::Post(const std::string &pattern, HandlerWithContentReader handler) { - post_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + post_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); return *this; } inline Server &Server::Put(const std::string &pattern, Handler handler) { - put_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + put_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } inline Server &Server::Put(const std::string &pattern, HandlerWithContentReader handler) { - put_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + put_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); return *this; } inline Server &Server::Patch(const std::string &pattern, Handler handler) { - patch_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + patch_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } inline Server &Server::Patch(const std::string &pattern, HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + patch_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); return *this; } inline Server &Server::Delete(const std::string &pattern, Handler handler) { - delete_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + delete_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } inline Server &Server::Delete(const std::string &pattern, HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + delete_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); return *this; } inline Server &Server::Options(const std::string &pattern, Handler handler) { - options_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); + options_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } @@ -5231,6 +5780,11 @@ Server::set_file_extension_and_mimetype_mapping(const std::string &ext, return *this; } +inline Server &Server::set_default_file_mimetype(const std::string &mime) { + default_file_mimetype_ = mime; + return *this; +} + inline Server &Server::set_file_request_handler(Handler handler) { file_request_handler_ = std::move(handler); return *this; @@ -5272,7 +5826,6 @@ inline Server &Server::set_logger(Logger logger) { inline Server & Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { expect_100_continue_handler_ = std::move(handler); - return *this; } @@ -5296,6 +5849,12 @@ inline Server &Server::set_default_headers(Headers headers) { return *this; } +inline Server &Server::set_header_writer( + std::function const &writer) { + header_writer_ = writer; + return *this; +} + inline Server &Server::set_keep_alive_max_count(size_t count) { keep_alive_max_count_ = count; return *this; @@ -5331,8 +5890,7 @@ inline Server &Server::set_payload_max_length(size_t length) { inline bool Server::bind_to_port(const std::string &host, int port, int socket_flags) { - if (bind_internal(host, port, socket_flags) < 0) return false; - return true; + return bind_internal(host, port, socket_flags) >= 0; } inline int Server::bind_to_any_port(const std::string &host, int socket_flags) { return bind_internal(host, 0, socket_flags); @@ -5366,7 +5924,7 @@ inline void Server::stop() { } } -inline bool Server::parse_request_line(const char *s, Request &req) { +inline bool Server::parse_request_line(const char *s, Request &req) const { auto len = strlen(s); if (len < 2 || s[len - 2] != '\r' || s[len - 1] != '\n') { return false; } len -= 2; @@ -5407,7 +5965,7 @@ inline bool Server::parse_request_line(const char *s, Request &req) { size_t count = 0; detail::split(req.target.data(), req.target.data() + req.target.size(), '?', - [&](const char *b, const char *e) { + 2, [&](const char *b, const char *e) { switch (count) { case 0: req.path = detail::decode_url(std::string(b, e), false); @@ -5430,7 +5988,10 @@ inline bool Server::parse_request_line(const char *s, Request &req) { } inline bool Server::write_response(Stream &strm, bool close_connection, - const Request &req, Response &res) { + Request &req, Response &res) { + // NOTE: `req.ranges` should be empty, otherwise it will be applied + // incorrectly to the error content. + req.ranges.clear(); return write_response_core(strm, close_connection, req, res, false); } @@ -5486,11 +6047,11 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection, detail::BufferStream bstrm; if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, - detail::status_message(res.status))) { + status_message(res.status))) { return false; } - if (!detail::write_headers(bstrm, res.headers)) { return false; } + if (!header_writer_(bstrm, res.headers)) { return false; } // Flush buffer auto &data = bstrm.get_buffer(); @@ -5508,7 +6069,6 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection, if (write_content_with_provider(strm, req, res, boundary, content_type)) { res.content_provider_success_ = true; } else { - res.content_provider_success_ = false; ret = false; } } @@ -5533,15 +6093,16 @@ Server::write_content_with_provider(Stream &strm, const Request &req, return detail::write_content(strm, res.content_provider_, 0, res.content_length_, is_shutting_down); } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - auto length = offsets.second; - return detail::write_content(strm, res.content_provider_, offset, length, - is_shutting_down); + auto offset_and_length = detail::get_range_offset_and_length( + req.ranges[0], res.content_length_); + + return detail::write_content(strm, res.content_provider_, + offset_and_length.first, + offset_and_length.second, is_shutting_down); } else { return detail::write_multipart_ranges_data( - strm, req, res, boundary, content_type, is_shutting_down); + strm, req, res, boundary, content_type, res.content_length_, + is_shutting_down); } } else { if (res.is_chunked_content_provider_) { @@ -5598,7 +6159,7 @@ inline bool Server::read_content(Stream &strm, Request &req, Response &res) { const auto &content_type = req.get_header_value("Content-Type"); if (!content_type.find("application/x-www-form-urlencoded")) { if (req.body.size() > CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH) { - res.status = 413; // NOTE: should be 414? + res.status = StatusCode::PayloadTooLarge_413; // NOTE: should be 414? return false; } detail::parse_query_text(req.body, req.params); @@ -5617,10 +6178,11 @@ inline bool Server::read_content_with_content_receiver( std::move(multipart_receiver)); } -inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) { +inline bool +Server::read_content_core(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver) const { detail::MultipartFormDataParser multipart_form_data_parser; ContentReceiverWithProgress out; @@ -5628,7 +6190,7 @@ inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, const auto &content_type = req.get_header_value("Content-Type"); std::string boundary; if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = 400; + res.status = StatusCode::BadRequest_400; return false; } @@ -5664,7 +6226,7 @@ inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, if (req.is_multipart_form_data()) { if (!multipart_form_data_parser.is_valid()) { - res.status = 400; + res.status = StatusCode::BadRequest_400; return false; } } @@ -5683,17 +6245,26 @@ inline bool Server::handle_file_request(const Request &req, Response &res, if (path.back() == '/') { path += "index.html"; } if (detail::is_file(path)) { - detail::read_file(path, res.body); - auto type = - detail::find_content_type(path, file_extension_and_mimetype_map_); - if (type) { res.set_header("Content-Type", type); } for (const auto &kv : entry.headers) { - res.set_header(kv.first.c_str(), kv.second); + res.set_header(kv.first, kv.second); } - res.status = req.has_header("Range") ? 206 : 200; + + auto mm = std::make_shared(path.c_str()); + if (!mm->is_open()) { return false; } + + res.set_content_provider( + mm->size(), + detail::find_content_type(path, file_extension_and_mimetype_map_, + default_file_mimetype_), + [mm](size_t offset, size_t length, DataSink &sink) -> bool { + sink.write(mm->data() + offset, length); + return true; + }); + if (!head && file_request_handler_) { file_request_handler_(req, res); } + return true; } } @@ -5789,13 +6360,14 @@ inline bool Server::listen_internal() { #ifdef _WIN32 auto timeout = static_cast(read_timeout_sec_ * 1000 + read_timeout_usec_ / 1000); - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, - sizeof(timeout)); + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, + reinterpret_cast(&timeout), sizeof(timeout)); #else timeval tv; tv.tv_sec = static_cast(read_timeout_sec_); tv.tv_usec = static_cast(read_timeout_usec_); - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv)); + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, + reinterpret_cast(&tv), sizeof(tv)); #endif } { @@ -5803,17 +6375,22 @@ inline bool Server::listen_internal() { #ifdef _WIN32 auto timeout = static_cast(write_timeout_sec_ * 1000 + write_timeout_usec_ / 1000); - setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, - sizeof(timeout)); + setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, + reinterpret_cast(&timeout), sizeof(timeout)); #else timeval tv; tv.tv_sec = static_cast(write_timeout_sec_); tv.tv_usec = static_cast(write_timeout_usec_); - setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(tv)); + setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, + reinterpret_cast(&tv), sizeof(tv)); #endif } - task_queue->enqueue([this, sock]() { process_and_close_socket(sock); }); + if (!task_queue->enqueue( + [this, sock]() { process_and_close_socket(sock); })) { + detail::shutdown_socket(sock); + detail::close_socket(sock); + } } task_queue->shutdown(); @@ -5829,7 +6406,7 @@ inline bool Server::routing(Request &req, Response &res, Stream &strm) { } // File handler - bool is_head_request = req.method == "HEAD"; + auto is_head_request = req.method == "HEAD"; if ((req.method == "GET" || is_head_request) && handle_file_request(req, res, is_head_request)) { return true; @@ -5895,17 +6472,17 @@ inline bool Server::routing(Request &req, Response &res, Stream &strm) { return dispatch_request(req, res, patch_handlers_); } - res.status = 400; + res.status = StatusCode::BadRequest_400; return false; } inline bool Server::dispatch_request(Request &req, Response &res, - const Handlers &handlers) { + const Handlers &handlers) const { for (const auto &x : handlers) { - const auto &pattern = x.first; + const auto &matcher = x.first; const auto &handler = x.second; - if (std::regex_match(req.path, req.matches, pattern)) { + if (matcher->match(req)) { handler(req, res); return true; } @@ -5915,18 +6492,18 @@ inline bool Server::dispatch_request(Request &req, Response &res, inline void Server::apply_ranges(const Request &req, Response &res, std::string &content_type, - std::string &boundary) { + std::string &boundary) const { if (req.ranges.size() > 1) { - boundary = detail::make_multipart_data_boundary(); - auto it = res.headers.find("Content-Type"); if (it != res.headers.end()) { content_type = it->second; res.headers.erase(it); } - res.headers.emplace("Content-Type", - "multipart/byteranges; boundary=" + boundary); + boundary = detail::make_multipart_data_boundary(); + + res.set_header("Content-Type", + "multipart/byteranges; boundary=" + boundary); } auto type = detail::encoding_type(req, res); @@ -5937,16 +6514,17 @@ inline void Server::apply_ranges(const Request &req, Response &res, if (req.ranges.empty()) { length = res.content_length_; } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - length = offsets.second; + auto offset_and_length = detail::get_range_offset_and_length( + req.ranges[0], res.content_length_); + + length = offset_and_length.second; + auto content_range = detail::make_content_range_header_field( - offset, length, res.content_length_); + offset_and_length, res.content_length_); res.set_header("Content-Range", content_range); } else { - length = detail::get_multipart_ranges_data_length(req, res, boundary, - content_type); + length = detail::get_multipart_ranges_data_length( + req, boundary, content_type, res.content_length_); } res.set_header("Content-Length", std::to_string(length)); } else { @@ -5965,28 +6543,22 @@ inline void Server::apply_ranges(const Request &req, Response &res, if (req.ranges.empty()) { ; } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.body.size(), 0); - auto offset = offsets.first; - auto length = offsets.second; + auto offset_and_length = + detail::get_range_offset_and_length(req.ranges[0], res.body.size()); + auto offset = offset_and_length.first; + auto length = offset_and_length.second; + auto content_range = detail::make_content_range_header_field( - offset, length, res.body.size()); + offset_and_length, res.body.size()); res.set_header("Content-Range", content_range); - if (offset < res.body.size()) { - res.body = res.body.substr(offset, length); - } else { - res.body.clear(); - res.status = 416; - } + + assert(offset + length <= res.body.size()); + res.body = res.body.substr(offset, length); } else { std::string data; - if (detail::make_multipart_ranges_data(req, res, boundary, content_type, - data)) { - res.body.swap(data); - } else { - res.body.clear(); - res.status = 416; - } + detail::make_multipart_ranges_data(req, res, boundary, content_type, + res.body.size(), data); + res.body.swap(data); } if (type != detail::EncodingType::None) { @@ -6025,12 +6597,12 @@ inline void Server::apply_ranges(const Request &req, Response &res, inline bool Server::dispatch_request_for_content_reader( Request &req, Response &res, ContentReader content_reader, - const HandlersForContentReader &handlers) { + const HandlersForContentReader &handlers) const { for (const auto &x : handlers) { - const auto &pattern = x.first; + const auto &matcher = x.first; const auto &handler = x.second; - if (std::regex_match(req.path, req.matches, pattern)) { + if (matcher->match(req)) { handler(req, res, content_reader); return true; } @@ -6050,15 +6622,10 @@ Server::process_request(Stream &strm, bool close_connection, if (!line_reader.getline()) { return false; } Request req; + Response res; - res.version = "HTTP/1.1"; - - for (const auto &header : default_headers_) { - if (res.headers.find(header.first) == res.headers.end()) { - res.headers.insert(header); - } - } + res.headers = default_headers_; #ifdef _WIN32 // TODO: Increase FD_SETSIZE statically (libzmq), dynamically (MySQL). @@ -6068,7 +6635,7 @@ Server::process_request(Stream &strm, bool close_connection, if (strm.socket() >= FD_SETSIZE) { Headers dummy; detail::read_headers(strm, dummy); - res.status = 500; + res.status = StatusCode::InternalServerError_500; return write_response(strm, close_connection, req, res); } #endif @@ -6078,14 +6645,14 @@ Server::process_request(Stream &strm, bool close_connection, if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { Headers dummy; detail::read_headers(strm, dummy); - res.status = 414; + res.status = StatusCode::UriTooLong_414; return write_response(strm, close_connection, req, res); } // Request line and headers if (!parse_request_line(line_reader.ptr(), req) || !detail::read_headers(strm, req.headers)) { - res.status = 400; + res.status = StatusCode::BadRequest_400; return write_response(strm, close_connection, req, res); } @@ -6109,7 +6676,7 @@ Server::process_request(Stream &strm, bool close_connection, if (req.has_header("Range")) { const auto &range_header_value = req.get_header_value("Range"); if (!detail::parse_range_header(range_header_value, req.ranges)) { - res.status = 416; + res.status = StatusCode::RangeNotSatisfiable_416; return write_response(strm, close_connection, req, res); } } @@ -6117,22 +6684,22 @@ Server::process_request(Stream &strm, bool close_connection, if (setup_request) { setup_request(req); } if (req.get_header_value("Expect") == "100-continue") { - auto status = 100; + int status = StatusCode::Continue_100; if (expect_100_continue_handler_) { status = expect_100_continue_handler_(req, res); } switch (status) { - case 100: - case 417: + case StatusCode::Continue_100: + case StatusCode::ExpectationFailed_417: strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, - detail::status_message(status)); + status_message(status)); break; default: return write_response(strm, close_connection, req, res); } } - // Rounting - bool routed = false; + // Routing + auto routed = false; #ifdef CPPHTTPLIB_NO_EXCEPTIONS routed = routing(req, res, strm); #else @@ -6144,7 +6711,7 @@ Server::process_request(Stream &strm, bool close_connection, exception_handler_(req, res, ep); routed = true; } else { - res.status = 500; + res.status = StatusCode::InternalServerError_500; std::string val; auto s = e.what(); for (size_t i = 0; s[i]; i++) { @@ -6162,17 +6729,29 @@ Server::process_request(Stream &strm, bool close_connection, exception_handler_(req, res, ep); routed = true; } else { - res.status = 500; + res.status = StatusCode::InternalServerError_500; res.set_header("EXCEPTION_WHAT", "UNKNOWN"); } } #endif - if (routed) { - if (res.status == -1) { res.status = req.ranges.empty() ? 200 : 206; } + if (res.status == -1) { + res.status = req.ranges.empty() ? StatusCode::OK_200 + : StatusCode::PartialContent_206; + } + + if (detail::range_error(req, res)) { + res.body.clear(); + res.content_length_ = 0; + res.content_provider_ = nullptr; + res.status = StatusCode::RangeNotSatisfiable_416; + return write_response(strm, close_connection, req, res); + } + return write_response_with_content(strm, close_connection, req, res); } else { - if (res.status == -1) { res.status = 404; } + if (res.status == -1) { res.status = StatusCode::NotFound_404; } + return write_response(strm, close_connection, req, res); } } @@ -6272,7 +6851,7 @@ inline socket_t ClientImpl::create_client_socket(Error &error) const { // Check is custom IP specified for host_ std::string ip; auto it = addr_map_.find(host_); - if (it != addr_map_.end()) ip = it->second; + if (it != addr_map_.end()) { ip = it->second; } return detail::create_client_socket( host_, ip, port_, address_family_, tcp_nodelay_, socket_options_, @@ -6297,7 +6876,7 @@ inline void ClientImpl::shutdown_ssl(Socket & /*socket*/, socket_requests_are_from_thread_ == std::this_thread::get_id()); } -inline void ClientImpl::shutdown_socket(Socket &socket) { +inline void ClientImpl::shutdown_socket(Socket &socket) const { if (socket.sock == INVALID_SOCKET) { return; } detail::shutdown_socket(socket.sock); } @@ -6322,7 +6901,7 @@ inline void ClientImpl::close_socket(Socket &socket) { } inline bool ClientImpl::read_response_line(Stream &strm, const Request &req, - Response &res) { + Response &res) const { std::array buf{}; detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); @@ -6330,9 +6909,9 @@ inline bool ClientImpl::read_response_line(Stream &strm, const Request &req, if (!line_reader.getline()) { return false; } #ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - const static std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r\n"); -#else const static std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r?\n"); +#else + const static std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r\n"); #endif std::cmatch m; @@ -6344,7 +6923,7 @@ inline bool ClientImpl::read_response_line(Stream &strm, const Request &req, res.reason = std::string(m[3]); // Ignore '100 Continue' - while (res.status == 100) { + while (res.status == StatusCode::Continue_100) { if (!line_reader.getline()) { return false; } // CRLF if (!line_reader.getline()) { return false; } // next response line @@ -6492,15 +7071,31 @@ inline bool ClientImpl::handle_request(Stream &strm, Request &req, if (!ret) { return false; } + if (res.get_header_value("Connection") == "close" || + (res.version == "HTTP/1.0" && res.reason != "Connection established")) { + // TODO this requires a not-entirely-obvious chain of calls to be correct + // for this to be safe. + + // This is safe to call because handle_request is only called by send_ + // which locks the request mutex during the process. It would be a bug + // to call it from a different thread since it's a thread-safety issue + // to do these things to the socket if another thread is using the socket. + std::lock_guard guard(socket_mutex_); + shutdown_ssl(socket_, true); + shutdown_socket(socket_); + close_socket(socket_); + } + if (300 < res.status && res.status < 400 && follow_location_) { req = req_save; ret = redirect(req, res, error); } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == 401 || res.status == 407) && + if ((res.status == StatusCode::Unauthorized_401 || + res.status == StatusCode::ProxyAuthenticationRequired_407) && req.authorization_count_ < 5) { - auto is_proxy = res.status == 407; + auto is_proxy = res.status == StatusCode::ProxyAuthenticationRequired_407; const auto &username = is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; const auto &password = @@ -6571,7 +7166,7 @@ inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) { } else { if (next_scheme == "https") { #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSLClient cli(next_host.c_str(), next_port); + SSLClient cli(next_host, next_port); cli.copy_settings(*this); if (ca_cert_store_) { cli.set_ca_cert_store(ca_cert_store_); } return detail::redirect(cli, req, res, path, location, error); @@ -6579,7 +7174,7 @@ inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) { return false; #endif } else { - ClientImpl cli(next_host.c_str(), next_port); + ClientImpl cli(next_host, next_port); cli.copy_settings(*this); return detail::redirect(cli, req, res, path, location, error); } @@ -6588,7 +7183,7 @@ inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) { inline bool ClientImpl::write_content_with_provider(Stream &strm, const Request &req, - Error &error) { + Error &error) const { auto is_shutting_down = []() { return false; }; if (req.is_chunked_content_provider_) { @@ -6616,32 +7211,32 @@ inline bool ClientImpl::write_request(Stream &strm, Request &req, // Prepare additional headers if (close_connection) { if (!req.has_header("Connection")) { - req.headers.emplace("Connection", "close"); + req.set_header("Connection", "close"); } } if (!req.has_header("Host")) { if (is_ssl()) { if (port_ == 443) { - req.headers.emplace("Host", host_); + req.set_header("Host", host_); } else { - req.headers.emplace("Host", host_and_port_); + req.set_header("Host", host_and_port_); } } else { if (port_ == 80) { - req.headers.emplace("Host", host_); + req.set_header("Host", host_); } else { - req.headers.emplace("Host", host_and_port_); + req.set_header("Host", host_and_port_); } } } - if (!req.has_header("Accept")) { req.headers.emplace("Accept", "*/*"); } + if (!req.has_header("Accept")) { req.set_header("Accept", "*/*"); } #ifndef CPPHTTPLIB_NO_DEFAULT_USER_AGENT if (!req.has_header("User-Agent")) { auto agent = std::string("cpp-httplib/") + CPPHTTPLIB_VERSION; - req.headers.emplace("User-Agent", agent); + req.set_header("User-Agent", agent); } #endif @@ -6650,23 +7245,23 @@ inline bool ClientImpl::write_request(Stream &strm, Request &req, if (!req.is_chunked_content_provider_) { if (!req.has_header("Content-Length")) { auto length = std::to_string(req.content_length_); - req.headers.emplace("Content-Length", length); + req.set_header("Content-Length", length); } } } else { if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH") { - req.headers.emplace("Content-Length", "0"); + req.set_header("Content-Length", "0"); } } } else { if (!req.has_header("Content-Type")) { - req.headers.emplace("Content-Type", "text/plain"); + req.set_header("Content-Type", "text/plain"); } if (!req.has_header("Content-Length")) { auto length = std::to_string(req.body.size()); - req.headers.emplace("Content-Length", length); + req.set_header("Content-Length", length); } } @@ -6706,7 +7301,7 @@ inline bool ClientImpl::write_request(Stream &strm, Request &req, const auto &path = url_encode_ ? detail::encode_url(req.path) : req.path; bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); - detail::write_headers(bstrm, req.headers); + header_writer_(bstrm, req.headers); // Flush buffer auto &data = bstrm.get_buffer(); @@ -6734,12 +7329,10 @@ inline std::unique_ptr ClientImpl::send_with_content_provider( ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, const std::string &content_type, Error &error) { - if (!content_type.empty()) { - req.headers.emplace("Content-Type", content_type); - } + if (!content_type.empty()) { req.set_header("Content-Type", content_type); } #ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { req.headers.emplace("Content-Encoding", "gzip"); } + if (compress_) { req.set_header("Content-Encoding", "gzip"); } #endif #ifdef CPPHTTPLIB_ZLIB_SUPPORT @@ -6800,10 +7393,9 @@ inline std::unique_ptr ClientImpl::send_with_content_provider( req.content_provider_ = detail::ContentProviderAdapter( std::move(content_provider_without_length)); req.is_chunked_content_provider_ = true; - req.headers.emplace("Transfer-Encoding", "chunked"); + req.set_header("Transfer-Encoding", "chunked"); } else { req.body.assign(body, content_length); - ; } } @@ -6864,7 +7456,8 @@ inline bool ClientImpl::process_request(Stream &strm, Request &req, } // Body - if ((res.status != 204) && req.method != "HEAD" && req.method != "CONNECT") { + if ((res.status != StatusCode::NoContent_204) && req.method != "HEAD" && + req.method != "CONNECT") { auto redirect = 300 < res.status && res.status < 400 && follow_location_; if (req.response_handler && !redirect) { @@ -6909,24 +7502,6 @@ inline bool ClientImpl::process_request(Stream &strm, Request &req, } } - if (res.get_header_value("Connection") == "close" || - (res.version == "HTTP/1.0" && res.reason != "Connection established")) { - // TODO this requires a not-entirely-obvious chain of calls to be correct - // for this to be safe. Maybe a code refactor (such as moving this out to - // the send function and getting rid of the recursiveness of the mutex) - // could make this more obvious. - - // This is safe to call because process_request is only called by - // handle_request which is only called by send, which locks the request - // mutex during the process. It would be a bug to call it from a different - // thread since it's a thread-safety issue to do these things to the socket - // if another thread is using the socket. - std::lock_guard guard(socket_mutex_); - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - // Log if (logger_) { logger_(req, res); } @@ -6935,13 +7510,14 @@ inline bool ClientImpl::process_request(Stream &strm, Request &req, inline ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( const std::string &boundary, const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) { - size_t cur_item = 0, cur_start = 0; + const MultipartFormDataProviderItems &provider_items) const { + size_t cur_item = 0; + size_t cur_start = 0; // cur_item and cur_start are copied to within the std::function and maintain // state between successive calls return [&, cur_item, cur_start](size_t offset, DataSink &sink) mutable -> bool { - if (!offset && items.size()) { + if (!offset && !items.empty()) { sink.os << detail::serialize_multipart_formdata(items, boundary, false); return true; } else if (cur_item < provider_items.size()) { @@ -6954,12 +7530,13 @@ inline ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( } DataSink cur_sink; - bool has_data = true; + auto has_data = true; cur_sink.write = sink.write; cur_sink.done = [&]() { has_data = false; }; - if (!provider_items[cur_item].provider(offset - cur_start, cur_sink)) + if (!provider_items[cur_item].provider(offset - cur_start, cur_sink)) { return false; + } if (!has_data) { sink.os << detail::serialize_multipart_formdata_item_end(); @@ -7078,14 +7655,15 @@ inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, if (params.empty()) { return Get(path, headers); } std::string path_with_query = append_query_params(path, params); - return Get(path_with_query.c_str(), headers, progress); + return Get(path_with_query, headers, std::move(progress)); } inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress) { - return Get(path, params, headers, nullptr, content_receiver, progress); + return Get(path, params, headers, nullptr, std::move(content_receiver), + std::move(progress)); } inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, @@ -7094,12 +7672,13 @@ inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, ContentReceiver content_receiver, Progress progress) { if (params.empty()) { - return Get(path, headers, response_handler, content_receiver, progress); + return Get(path, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); } std::string path_with_query = append_query_params(path, params); - return Get(path_with_query.c_str(), headers, response_handler, - content_receiver, progress); + return Get(path_with_query, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); } inline Result ClientImpl::Head(const std::string &path) { @@ -7201,7 +7780,7 @@ inline Result ClientImpl::Post(const std::string &path, const Headers &headers, const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type.c_str()); + return Post(path, headers, body, content_type); } inline Result ClientImpl::Post(const std::string &path, const Headers &headers, @@ -7214,7 +7793,7 @@ inline Result ClientImpl::Post(const std::string &path, const Headers &headers, const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type.c_str()); + return Post(path, headers, body, content_type); } inline Result @@ -7423,9 +8002,7 @@ inline Result ClientImpl::Delete(const std::string &path, req.headers = headers; req.path = path; - if (!content_type.empty()) { - req.headers.emplace("Content-Type", content_type); - } + if (!content_type.empty()) { req.set_header("Content-Type", content_type); } req.body.assign(body, content_length); return send_(std::move(req)); @@ -7458,13 +8035,6 @@ inline Result ClientImpl::Options(const std::string &path, return send_(std::move(req)); } -inline size_t ClientImpl::is_socket_open() const { - std::lock_guard guard(socket_mutex_); - return socket_.is_open(); -} - -inline socket_t ClientImpl::socket() const { return socket_.sock; } - inline void ClientImpl::stop() { std::lock_guard guard(socket_mutex_); @@ -7488,6 +8058,17 @@ inline void ClientImpl::stop() { close_socket(socket_); } +inline std::string ClientImpl::host() const { return host_; } + +inline int ClientImpl::port() const { return port_; } + +inline size_t ClientImpl::is_socket_open() const { + std::lock_guard guard(socket_mutex_); + return socket_.is_open(); +} + +inline socket_t ClientImpl::socket() const { return socket_.sock; } + inline void ClientImpl::set_connection_timeout(time_t sec, time_t usec) { connection_timeout_sec_ = sec; connection_timeout_usec_ = usec; @@ -7536,6 +8117,11 @@ inline void ClientImpl::set_default_headers(Headers headers) { default_headers_ = std::move(headers); } +inline void ClientImpl::set_header_writer( + std::function const &writer) { + header_writer_ = writer; +} + inline void ClientImpl::set_address_family(int family) { address_family_ = family; } @@ -7575,9 +8161,7 @@ inline void ClientImpl::set_proxy_digest_auth(const std::string &username, proxy_digest_auth_username_ = username; proxy_digest_auth_password_ = password; } -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT inline void ClientImpl::set_ca_cert_path(const std::string &ca_cert_file_path, const std::string &ca_cert_dir_path) { ca_cert_file_path_ = ca_cert_file_path; @@ -7589,9 +8173,34 @@ inline void ClientImpl::set_ca_cert_store(X509_STORE *ca_cert_store) { ca_cert_store_ = ca_cert_store; } } -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +inline X509_STORE *ClientImpl::create_ca_cert_store(const char *ca_cert, + std::size_t size) const { + auto mem = BIO_new_mem_buf(ca_cert, static_cast(size)); + if (!mem) { return nullptr; } + + auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr); + if (!inf) { + BIO_free_all(mem); + return nullptr; + } + + auto cts = X509_STORE_new(); + if (cts) { + for (auto i = 0; i < static_cast(sk_X509_INFO_num(inf)); i++) { + auto itmp = sk_X509_INFO_value(inf, i); + if (!itmp) { continue; } + + if (itmp->x509) { X509_STORE_add_cert(cts, itmp->x509); } + if (itmp->crl) { X509_STORE_add_crl(cts, itmp->crl); } + } + } + + sk_X509_INFO_pop_free(inf, X509_INFO_free); + BIO_free_all(mem); + return cts; +} + inline void ClientImpl::enable_server_certificate_verification(bool enabled) { server_certificate_verification_ = enabled; } @@ -7655,7 +8264,7 @@ bool ssl_connect_or_accept_nonblocking(socket_t sock, SSL *ssl, U ssl_connect_or_accept, time_t timeout_sec, time_t timeout_usec) { - int res = 0; + auto res = 0; while ((res = ssl_connect_or_accept(ssl)) != 1) { auto err = SSL_get_error(ssl, res); switch (err) { @@ -7718,7 +8327,7 @@ inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY); } -inline SSLSocketStream::~SSLSocketStream() {} +inline SSLSocketStream::~SSLSocketStream() = default; inline bool SSLSocketStream::is_readable() const { return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; @@ -7736,7 +8345,7 @@ inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { auto ret = SSL_read(ssl_, ptr, static_cast(size)); if (ret < 0) { auto err = SSL_get_error(ssl_, ret); - int n = 1000; + auto n = 1000; #ifdef _WIN32 while (--n >= 0 && (err == SSL_ERROR_WANT_READ || (err == SSL_ERROR_SYSCALL && @@ -7769,7 +8378,7 @@ inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { auto ret = SSL_write(ssl_, ptr, static_cast(handle_size)); if (ret < 0) { auto err = SSL_get_error(ssl_, ret); - int n = 1000; + auto n = 1000; #ifdef _WIN32 while (--n >= 0 && (err == SSL_ERROR_WANT_WRITE || (err == SSL_ERROR_SYSCALL && @@ -7824,8 +8433,9 @@ inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, // add default password callback before opening encrypted private key if (private_key_password != nullptr && (private_key_password[0] != '\0')) { - SSL_CTX_set_default_passwd_cb_userdata(ctx_, - (char *)private_key_password); + SSL_CTX_set_default_passwd_cb_userdata( + ctx_, + reinterpret_cast(const_cast(private_key_password))); } if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || @@ -7933,7 +8543,7 @@ inline SSLClient::SSLClient(const std::string &host, int port, detail::split(&host_[0], &host_[host_.size()], '.', [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); + host_components_.emplace_back(b, e); }); if (!client_cert_path.empty() && !client_key_path.empty()) { @@ -7954,7 +8564,7 @@ inline SSLClient::SSLClient(const std::string &host, int port, detail::split(&host_[0], &host_[host_.size()], '.', [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); + host_components_.emplace_back(b, e); }); if (client_cert != nullptr && client_key != nullptr) { @@ -7989,6 +8599,11 @@ inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { } } +inline void SSLClient::load_ca_cert_store(const char *ca_cert, + std::size_t size) { + set_ca_cert_store(ClientImpl::create_ca_cert_store(ca_cert, size)); +} + inline long SSLClient::get_openssl_verify_result() const { return verify_result_; } @@ -8003,14 +8618,14 @@ inline bool SSLClient::create_and_connect_socket(Socket &socket, Error &error) { inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, bool &success, Error &error) { success = true; - Response res2; + Response proxy_res; if (!detail::process_client_socket( socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, [&](Stream &strm) { Request req2; req2.method = "CONNECT"; req2.path = host_and_port_; - return process_request(strm, req2, res2, false, error); + return process_request(strm, req2, proxy_res, false, error); })) { // Thread-safe to close everything because we are assuming there are no // requests in flight @@ -8021,12 +8636,12 @@ inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, return false; } - if (res2.status == 407) { + if (proxy_res.status == StatusCode::ProxyAuthenticationRequired_407) { if (!proxy_digest_auth_username_.empty() && !proxy_digest_auth_password_.empty()) { std::map auth; - if (detail::parse_www_authenticate(res2, auth, true)) { - Response res3; + if (detail::parse_www_authenticate(proxy_res, auth, true)) { + proxy_res = Response(); if (!detail::process_client_socket( socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, [&](Stream &strm) { @@ -8037,7 +8652,7 @@ inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, req3, auth, 1, detail::random_string(10), proxy_digest_auth_username_, proxy_digest_auth_password_, true)); - return process_request(strm, req3, res3, false, error); + return process_request(strm, req3, proxy_res, false, error); })) { // Thread-safe to close everything because we are assuming there are // no requests in flight @@ -8048,17 +8663,28 @@ inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, return false; } } - } else { - res = res2; - return false; } } + // If status code is not 200, proxy request is failed. + // Set error to ProxyConnection and return proxy response + // as the response of the request + if (proxy_res.status != StatusCode::OK_200) { + error = Error::ProxyConnection; + res = std::move(proxy_res); + // Thread-safe to close everything because we are assuming there are + // no requests in flight + shutdown_ssl(socket, true); + shutdown_socket(socket); + close_socket(socket); + return false; + } + return true; } inline bool SSLClient::load_certs() { - bool ret = true; + auto ret = true; std::call_once(initialize_cert_, [&]() { std::lock_guard guard(ctx_mutex_); @@ -8134,7 +8760,11 @@ inline bool SSLClient::initialize_ssl(Socket &socket, Error &error) { return true; }, [&](SSL *ssl2) { - SSL_set_tlsext_host_name(ssl2, host_.c_str()); + // NOTE: Direct call instead of using the OpenSSL macro to suppress + // -Wold-style-cast warning + // SSL_set_tlsext_host_name(ssl2, host_.c_str()); + SSL_ctrl(ssl2, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, + static_cast(const_cast(host_.c_str()))); return true; }); @@ -8208,8 +8838,8 @@ SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { auto type = GEN_DNS; - struct in6_addr addr6; - struct in_addr addr; + struct in6_addr addr6 {}; + struct in_addr addr {}; size_t addr_len = 0; #ifndef __MINGW32__ @@ -8234,8 +8864,9 @@ SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { for (decltype(count) i = 0; i < count && !dsn_matched; i++) { auto val = sk_GENERAL_NAME_value(alt_names, i); if (val->type == type) { - auto name = (const char *)ASN1_STRING_get0_data(val->d.ia5); - auto name_len = (size_t)ASN1_STRING_length(val->d.ia5); + auto name = + reinterpret_cast(ASN1_STRING_get0_data(val->d.ia5)); + auto name_len = static_cast(ASN1_STRING_length(val->d.ia5)); switch (type) { case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; @@ -8253,7 +8884,8 @@ SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { if (dsn_matched || ip_matched) { ret = true; } } - GENERAL_NAMES_free((STACK_OF(GENERAL_NAME) *)alt_names); + GENERAL_NAMES_free(const_cast( + reinterpret_cast(alt_names))); return ret; } @@ -8282,7 +8914,7 @@ inline bool SSLClient::check_host_name(const char *pattern, std::vector pattern_components; detail::split(&pattern[0], &pattern[pattern_len], '.', [&](const char *b, const char *e) { - pattern_components.emplace_back(std::string(b, e)); + pattern_components.emplace_back(b, e); }); if (host_components_.size() != pattern_components.size()) { return false; } @@ -8361,7 +8993,7 @@ inline Client::Client(const std::string &host, int port, : cli_(detail::make_unique(host, port, client_cert_path, client_key_path)) {} -inline Client::~Client() {} +inline Client::~Client() = default; inline bool Client::is_valid() const { return cli_ != nullptr && cli_->is_valid(); @@ -8421,19 +9053,20 @@ inline Result Client::Get(const std::string &path, const Headers &headers, } inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, Progress progress) { - return cli_->Get(path, params, headers, progress); + return cli_->Get(path, params, headers, std::move(progress)); } inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, params, headers, content_receiver, progress); + return cli_->Get(path, params, headers, std::move(content_receiver), + std::move(progress)); } inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, params, headers, response_handler, content_receiver, - progress); + return cli_->Get(path, params, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); } inline Result Client::Head(const std::string &path) { return cli_->Head(path); } @@ -8665,12 +9298,16 @@ inline bool Client::send(Request &req, Response &res, Error &error) { inline Result Client::send(const Request &req) { return cli_->send(req); } +inline void Client::stop() { cli_->stop(); } + +inline std::string Client::host() const { return cli_->host(); } + +inline int Client::port() const { return cli_->port(); } + inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); } inline socket_t Client::socket() const { return cli_->socket(); } -inline void Client::stop() { cli_->stop(); } - inline void Client::set_hostname_addr_map(std::map addr_map) { cli_->set_hostname_addr_map(std::move(addr_map)); @@ -8680,6 +9317,11 @@ inline void Client::set_default_headers(Headers headers) { cli_->set_default_headers(std::move(headers)); } +inline void Client::set_header_writer( + std::function const &writer) { + cli_->set_header_writer(writer); +} + inline void Client::set_address_family(int family) { cli_->set_address_family(family); } @@ -8754,7 +9396,9 @@ inline void Client::enable_server_certificate_verification(bool enabled) { } #endif -inline void Client::set_logger(Logger logger) { cli_->set_logger(logger); } +inline void Client::set_logger(Logger logger) { + cli_->set_logger(std::move(logger)); +} #ifdef CPPHTTPLIB_OPENSSL_SUPPORT inline void Client::set_ca_cert_path(const std::string &ca_cert_file_path, @@ -8770,6 +9414,10 @@ inline void Client::set_ca_cert_store(X509_STORE *ca_cert_store) { } } +inline void Client::load_ca_cert_store(const char *ca_cert, std::size_t size) { + set_ca_cert_store(cli_->create_ca_cert_store(ca_cert, size)); +} + inline long Client::get_openssl_verify_result() const { if (is_ssl_) { return static_cast(*cli_).get_openssl_verify_result(); diff --git a/zerotier-one/ext/ed25519-amd64-asm/sign.c b/zerotier-one/ext/ed25519-amd64-asm/sign.c index 882ae76f..715feb5b 100644 --- a/zerotier-one/ext/ed25519-amd64-asm/sign.c +++ b/zerotier-one/ext/ed25519-amd64-asm/sign.c @@ -61,7 +61,7 @@ int crypto_sign( #endif #if 0 -void C25519::sign(const C25519::Private &myPrivate,const C25519::Public &myPublic,const void *msg,unsigned int len,void *signature) +void ECC::sign(const ECC::Private &myPrivate,const ECC::Public &myPublic,const void *msg,unsigned int len,void *signature) { sc25519 sck, scs, scsk; ge25519 ger; diff --git a/zerotier-one/ext/installfiles/mac/ZeroTier One.pkgproj b/zerotier-one/ext/installfiles/mac/ZeroTier One.pkgproj index b4ac69c2..56ae6ea2 100755 --- a/zerotier-one/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/zerotier-one/ext/installfiles/mac/ZeroTier One.pkgproj @@ -1,14 +1,15 @@ - - + + PACKAGES MUST-CLOSE-APPLICATION-ITEMS - + MUST-CLOSE-APPLICATIONS - + PACKAGE_FILES DEFAULT_INSTALL_LOCATION @@ -22,7 +23,7 @@ CHILDREN - + GID 80 PATH @@ -38,7 +39,7 @@ BUNDLE_CAN_DOWNGRADE - + BUNDLE_POSTINSTALL_PATH PATH_TYPE @@ -50,7 +51,7 @@ 0 CHILDREN - + GID 80 PATH @@ -92,7 +93,7 @@ CHILDREN - + GID 0 PATH @@ -108,7 +109,7 @@ CHILDREN - + GID 0 PATH @@ -124,7 +125,7 @@ CHILDREN - + GID 80 PATH @@ -140,7 +141,7 @@ CHILDREN - + GID 0 PATH @@ -156,7 +157,7 @@ CHILDREN - + GID 0 PATH @@ -214,7 +215,7 @@ CHILDREN - + GID 0 PATH @@ -230,7 +231,7 @@ CHILDREN - + GID 0 PATH @@ -246,7 +247,7 @@ CHILDREN - + GID 0 PATH @@ -262,7 +263,7 @@ CHILDREN - + GID 0 PATH @@ -278,7 +279,7 @@ CHILDREN - + GID 0 PATH @@ -294,7 +295,7 @@ CHILDREN - + GID 0 PATH @@ -310,7 +311,7 @@ CHILDREN - + GID 0 PATH @@ -329,7 +330,7 @@ CHILDREN - + GID 0 PATH @@ -359,7 +360,7 @@ CHILDREN - + GID 0 PATH @@ -375,7 +376,7 @@ CHILDREN - + GID 0 PATH @@ -391,7 +392,7 @@ CHILDREN - + GID 80 PATH @@ -407,7 +408,7 @@ CHILDREN - + GID 0 PATH @@ -423,7 +424,7 @@ CHILDREN - + GID 0 PATH @@ -439,7 +440,7 @@ CHILDREN - + GID 0 PATH @@ -455,7 +456,7 @@ CHILDREN - + GID 0 PATH @@ -471,7 +472,7 @@ CHILDREN - + GID 0 PATH @@ -487,7 +488,7 @@ CHILDREN - + GID 0 PATH @@ -503,7 +504,7 @@ CHILDREN - + GID 0 PATH @@ -519,7 +520,7 @@ CHILDREN - + GID 0 PATH @@ -555,7 +556,7 @@ CHILDREN - + GID 0 PATH @@ -602,7 +603,7 @@ CHILDREN - + GID 0 PATH @@ -647,13 +648,13 @@ PAYLOAD_TYPE 0 PRESERVE_EXTENDED_ATTRIBUTES - + SHOW_INVISIBLE - + SPLIT_FORKS - + TREAT_MISSING_FILES_AS_WARNING - + VERSION 5 @@ -674,7 +675,7 @@ 1 RESOURCES - + PACKAGE_SETTINGS @@ -683,7 +684,7 @@ CONCLUSION_ACTION 0 FOLLOW_SYMBOLIC_LINKS - + IDENTIFIER com.zerotier.pkg.ZeroTierOne LOCATION @@ -691,17 +692,17 @@ NAME ZeroTier One OVERWRITE_PERMISSIONS - + PAYLOAD_SIZE -1 REFERENCE_PATH - + RELOCATABLE - + USE_HFS+_COMPRESSION - + VERSION - 1.12.2 + 1.16.0 TYPE 0 @@ -753,12 +754,12 @@ APPAREANCES DARK_AQUA - + LIGHT_AQUA - + SHARED_SETTINGS_FOR_ALL_APPAREANCES - + INSTALLATION TYPE @@ -770,20 +771,20 @@ CHILDREN - + DESCRIPTION - + OPTIONS HIDDEN - + STATE 1 PACKAGE_UUID 1B6AFC3A-9EA5-4401-83D4-37F06CD13CD6 TITLE - + TYPE 0 UUID @@ -791,7 +792,7 @@ REMOVED - + MODE @@ -859,24 +860,24 @@ INTRODUCTION LOCALIZATIONS - + LICENSE LOCALIZATIONS - + MODE 0 README LOCALIZATIONS - + TITLE LOCALIZATIONS - + PROJECT_REQUIREMENTS @@ -900,17 +901,17 @@ IDENTIFIER fr.whitebox.Packages.requirement.os MESSAGE - + NAME Operating System STATE - + RESOURCES - + ROOT_VOLUME_ONLY - + PROJECT_SETTINGS @@ -937,7 +938,7 @@ REGULAR_EXPRESSION - + STRING .DS_Store TYPE @@ -945,20 +946,20 @@ PROTECTED - + PROXY_NAME Remove .DS_Store files PROXY_TOOLTIP Remove ".DS_Store" files created by the Finder. STATE - + PATTERNS_ARRAY REGULAR_EXPRESSION - + STRING .pbdevelopment TYPE @@ -966,20 +967,21 @@ PROTECTED - + PROXY_NAME Remove .pbdevelopment files PROXY_TOOLTIP - Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. + Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. STATE - + PATTERNS_ARRAY REGULAR_EXPRESSION - + STRING CVS TYPE @@ -987,7 +989,7 @@ REGULAR_EXPRESSION - + STRING .cvsignore TYPE @@ -995,7 +997,7 @@ REGULAR_EXPRESSION - + STRING .cvspass TYPE @@ -1003,7 +1005,7 @@ REGULAR_EXPRESSION - + STRING .svn TYPE @@ -1011,7 +1013,7 @@ REGULAR_EXPRESSION - + STRING .git TYPE @@ -1019,7 +1021,7 @@ REGULAR_EXPRESSION - + STRING .gitignore TYPE @@ -1027,20 +1029,21 @@ PROTECTED - + PROXY_NAME Remove SCM metadata PROXY_TOOLTIP - Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. + Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. STATE - + PATTERNS_ARRAY REGULAR_EXPRESSION - + STRING classes.nib TYPE @@ -1048,7 +1051,7 @@ REGULAR_EXPRESSION - + STRING designable.db TYPE @@ -1056,7 +1059,7 @@ REGULAR_EXPRESSION - + STRING info.nib TYPE @@ -1064,20 +1067,21 @@ PROTECTED - + PROXY_NAME Optimize nib files PROXY_TOOLTIP - Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. + Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. STATE - + PATTERNS_ARRAY REGULAR_EXPRESSION - + STRING Resources Disabled TYPE @@ -1085,31 +1089,31 @@ PROTECTED - + PROXY_NAME Remove Resources Disabled folders PROXY_TOOLTIP Remove "Resources Disabled" folders. STATE - + SEPARATOR - + NAME ZeroTier One PAYLOAD_ONLY - + TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING - + SHARED_GLOBAL_DATA IC_REQUIREMENT_JAVASCRIPT_SHARED_SOURCE_CODE - + TYPE 0 diff --git a/zerotier-one/ext/installfiles/windows/ZeroTier One.aip b/zerotier-one/ext/installfiles/windows/ZeroTier One.aip index 71e89975..b787dac1 100644 --- a/zerotier-one/ext/installfiles/windows/ZeroTier One.aip +++ b/zerotier-one/ext/installfiles/windows/ZeroTier One.aip @@ -1,8 +1,5 @@ - - - - + @@ -24,25 +21,27 @@ - + - + - + - - - + + + + + @@ -51,6 +50,7 @@ + @@ -62,7 +62,7 @@ - + @@ -112,6 +112,10 @@ + + + + @@ -124,7 +128,7 @@ - + @@ -147,6 +151,7 @@ + @@ -156,6 +161,7 @@ + @@ -254,6 +260,7 @@ + @@ -261,6 +268,7 @@ + @@ -282,6 +290,7 @@ + @@ -359,15 +368,6 @@ - - - - - - - - - @@ -379,6 +379,17 @@ + + + + + + + + + + + @@ -392,11 +403,12 @@ - - + + + @@ -458,6 +470,10 @@ + + + + @@ -468,6 +484,7 @@ + @@ -498,10 +515,10 @@ - + - + diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelignore b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelignore new file mode 100644 index 00000000..56306fc4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelignore @@ -0,0 +1,3 @@ +third_party +tools +out diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelrc b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelrc new file mode 100644 index 00000000..57cd0a2f --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelrc @@ -0,0 +1,41 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# bazel configurations for running tests under sanitizers. +# Based on https://github.com/bazelment/trunk/blob/master/tools/bazel.rc + +# Enable automatic configs based on platform +common --enable_platform_specific_config + +# Make globs that don't match anything fail +common --incompatible_disallow_empty_glob + +# Needed by gRPC to build on some platforms. +build --copt -DGRPC_BAZEL_BUILD + +# Workaround abseil libraries missing symbols +build:windows --dynamic_mode=off + +# Set minimum supported C++ version +build:macos --host_cxxopt=-std=c++14 --cxxopt=-std=c++14 +build:linux --host_cxxopt=-std=c++14 --cxxopt=-std=c++14 +build:windows --host_cxxopt=/std:c++14 --cxxopt=/std:c++14 + +# --config=asan : Address Sanitizer. +common:asan --copt -DADDRESS_SANITIZER +common:asan --copt -fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,null,return,returns-nonnull-attribute,shift-exponent,signed-integer-overflow,unreachable,vla-bound +common:asan --copt -fsanitize-address-use-after-scope +common:asan --copt -fno-sanitize-recover=all +common:asan --linkopt -fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,null,return,returns-nonnull-attribute,shift-exponent,signed-integer-overflow,unreachable,vla-bound +common:asan --linkopt -fsanitize-address-use-after-scope +common:asan --linkopt -fno-sanitize-recover=all +common:asan --cc_output_directory_tag=asan + +# --config=tsan : Thread Sanitizer. +common:tsan --copt -fsanitize=thread +common:tsan --copt -DTHREAD_SANITIZER +common:tsan --linkopt -fsanitize=thread +common:tsan --cc_output_directory_tag=tsan +# This is needed to address false positive problem with abseil.The same setting as gRPC +# https://github.com/google/sanitizers/issues/953 +common:tsan --test_env=TSAN_OPTIONS=report_atomic_races=0 diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelversion b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelversion new file mode 100644 index 00000000..21c8c7b4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.bazelversion @@ -0,0 +1 @@ +7.1.1 diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-format b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-format new file mode 100644 index 00000000..1b5d0d48 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-format @@ -0,0 +1,73 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# See Clang docs: http://clang.llvm.org/docs/ClangFormatStyleOptions.html +BasedOnStyle: Chromium + +# Allow double brackets such as std::vector>. +Standard: Cpp11 + +# Indent 2 spaces at a time. +IndentWidth: 2 + +# Keep lines under 100 columns long. +ColumnLimit: 100 + +# Always break before braces +BreakBeforeBraces: Custom +BraceWrapping: +# TODO(lujc) wait for clang-format-9 support in Chromium tools +# AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false + + # Keeps extern "C" blocks unindented. + AfterExternBlock: false + +# Indent case labels. +IndentCaseLabels: true + +# Right-align pointers and references +PointerAlignment: Right + +# ANGLE likes to align things as much as possible. +AlignOperands: true +AlignConsecutiveAssignments: true + +# Use 2 space negative offset for access modifiers +AccessModifierOffset: -2 + +# TODO(jmadill): Decide if we want this on. Doesn't have an "all or none" mode. +AllowShortCaseLabelsOnASingleLine: false + +# Useful for spacing out functions in classes +KeepEmptyLinesAtTheStartOfBlocks: true + +# Indent nested PP directives. +IndentPPDirectives: AfterHash + +# Include blocks style +IncludeBlocks: Preserve + +AttributeMacros: + - OPENTELEMETRY_UNLIKELY + - OPENTELEMETRY_LIKELY + - OPENTELEMETRY_MAYBE_UNUSED + - OPENTELEMETRY_DEPRECATED + - OPENTELEMETRY_API_SINGLETON + - OPENTELEMETRY_LOCAL_SYMBOL + - OPENTELEMETRY_EXPORT + - OPENTELEMETRY_SANITIZER_NO_MEMORY + - OPENTELEMETRY_SANITIZER_NO_THREAD + - OPENTELEMETRY_SANITIZER_NO_ADDRESS \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-tidy b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-tidy new file mode 100644 index 00000000..db61b810 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.clang-tidy @@ -0,0 +1,42 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +Checks: > + -*, + performance-*, + portability-*, + abseil-*, + -abseil-string-find-str-contains, + bugprone-*, + -bugprone-easily-swappable-parameters, + -bugprone-implicit-widening-of-multiplication-result, + -bugprone-inc-dec-in-conditions, + -bugprone-narrowing-conversions, + -bugprone-unchecked-optional-access, + -bugprone-unhandled-exception-at-new, + -bugprone-unused-local-non-trivial-variable, + google-*, + -google-build-using-namespace, + -google-default-arguments, + -google-explicit-constructor, + -google-readability-avoid-underscore-in-googletest-name, + -google-readability-braces-around-statements, + -google-readability-namespace-comments, + -google-readability-todo, + -google-runtime-references, + misc-*, + -misc-const-correctness, + -misc-include-cleaner, + -misc-non-private-member-variables-in-classes, + -misc-unused-alias-decls, + -misc-use-anonymous-namespace, + cppcoreguidelines-*, + -cppcoreguidelines-owning-memory, + -cppcoreguidelines-avoid-do-while, + -cppcoreguidelines-avoid-c-arrays, + -cppcoreguidelines-avoid-magic-numbers, + -cppcoreguidelines-init-variables, + -cppcoreguidelines-macro-usage, + -cppcoreguidelines-non-private-member-variables-in-classes, + -cppcoreguidelines-avoid-non-const-global-variables, + -cppcoreguidelines-pro-* \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.cmake-format.py b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.cmake-format.py new file mode 100644 index 00000000..d232ac8e --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.cmake-format.py @@ -0,0 +1,7 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# If comment markup is enabled, don't reflow the first comment block in +# eachlistfile. Use this to preserve formatting of your +# copyright/licensestatements. +first_comment_is_literal = True diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.copyright-ignore b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.copyright-ignore new file mode 100644 index 00000000..81c51bcd --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.copyright-ignore @@ -0,0 +1,52 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# Ignore the following directories + +./.git/* +./.github/* +./third_party/benchmark/* +./third_party/boost/* +./third_party/googletest/* +./third_party/ms-gsl/* +./third_party/nlohmann-json/* +./third_party/opentelemetry-proto/* +./third_party/prometheus-cpp/* +./tools/vcpkg/* +./tools/ports/* + +# Third party code + +./api/include/opentelemetry/nostd/internal/absl/* +./exporters/jaeger/thrift-gen/* +./exporters/etw/include/opentelemetry/exporters/etw/TraceLoggingDynamic.h + +# Doc + +./docs/* + +## Ignore the following files patterns + +*.md +*.rst +*.png +*.log +*.patch +*.json +*.nuspec +*.pem + +# Packaging +*/CONTROL + +# LICENSE files +*/LICENSE + +# Ignore the following misc files + +./.bazelignore +./.bazelversion +./docker/.gitignore +.markdownlintignore +./ci/toc.yml +./ci/valgrind-suppressions diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.conan b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.conan new file mode 100644 index 00000000..05f6ae27 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.conan @@ -0,0 +1,55 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 +FROM ubuntu:24.04@sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02 + +RUN apt update && apt install -y \ + build-essential \ + ca-certificates \ + wget \ + cmake \ + git \ + sudo \ + nano \ + pkg-config \ + ninja-build \ + clang-format \ + clang-tidy \ + autoconf \ + automake \ + libtool \ + python3-pip + +RUN pip install "conan==2.15.1" --break-system-packages + +ARG USER_UID=1000 +ARG USER_GID=1000 +ARG USER_NAME=devuser +ENV USER_NAME=devuser +ENV USER_UID=${USER_UID} +ENV USER_GID=${USER_GID} +ENV INSTALL_PACKAGES= +ENV IS_CONTAINER_BUILD=true + +COPY ./.devcontainer/customize_container.sh /tmp/opentelemetry_cpp/devcontainer/customize_container.sh +RUN /tmp/opentelemetry_cpp/devcontainer/customize_container.sh +USER devuser + +RUN conan profile detect --force + +ARG CONAN_FILE=conanfile_stable.txt +ARG CONAN_BUILD_TYPE=Debug +ARG CXX_STANDARD=17 +WORKDIR /home/devuser/conan +COPY ./install/conan/ . + +RUN conan install ./${CONAN_FILE} --build=missing -s build_type=${CONAN_BUILD_TYPE} +ENV CMAKE_TOOLCHAIN_FILE=/home/devuser/conan/build/${CONAN_BUILD_TYPE}/generators/conan_toolchain.cmake +ENV CXX_STANDARD=${CXX_STANDARD} +ENV BUILD_TYPE=${CONAN_BUILD_TYPE} +ENV CONAN_FILE=${CONAN_FILE} + +WORKDIR /workspaces/opentelemetry-cpp + +ENTRYPOINT [] + +CMD ["/bin/bash"] diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.dev b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.dev new file mode 100644 index 00000000..c0eea6d3 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/Dockerfile.dev @@ -0,0 +1,58 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +FROM otel/cpp_format_tools + +ARG USER_UID=1000 +ARG USER_GID=1000 +ARG INSTALL_PACKAGES= + +ARG CXX_STANDARD=17 +ARG CMAKE_VERSION=3.31.6 +ARG ABSEIL_CPP_VERSION=20230125.3 +ARG PROTOBUF_VERSION=23.3 +ARG GRPC_VERSION=v1.55.0 + +ENV CXX_STANDARD=${CXX_STANDARD} +ENV CMAKE_VERSION=${CMAKE_VERSION} +ENV ABSEIL_CPP_VERSION=${ABSEIL_CPP_VERSION} +ENV PROTOBUF_VERSION=${PROTOBUF_VERSION} +ENV GRPC_VERSION=${GRPC_VERSION} + +COPY ci /opt/ci + +RUN apt update && apt install -y wget \ + ninja-build \ + libcurl4-openssl-dev \ + clang-tidy \ + shellcheck + +RUN cd /opt/ci && bash setup_cmake.sh +RUN cd /opt/ci && bash setup_ci_environment.sh +RUN cd /opt && bash ci/setup_googletest.sh \ + && bash ci/install_abseil.sh \ + && bash ci/install_protobuf.sh \ + && bash ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil-cpp + +ADD https://github.com/bazelbuild/bazelisk/releases/download/v1.22.1/bazelisk-linux-amd64 /usr/local/bin + +RUN git config --global core.autocrlf input \ + && chmod +x /usr/local/bin/bazelisk-linux-amd64 + +ENV INSTALL_PACKAGES=${INSTALL_PACKAGES} +ENV USER_NAME=devuser +ENV USER_UID=${USER_UID} +ENV USER_GID=${USER_GID} +ENV IS_CONTAINER_BUILD=true + +COPY ./.devcontainer/customize_container.sh /tmp/opentelemetry_cpp/devcontainer/customize_container.sh +RUN /tmp/opentelemetry_cpp/devcontainer/customize_container.sh +RUN apt install -y npm && npm install -g markdownlint-cli@0.44.0 + +USER devuser + +WORKDIR /workspaces/opentelemetry-cpp + +ENTRYPOINT [] + +CMD ["/bin/bash"] \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/README.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/README.md new file mode 100644 index 00000000..bea6f8c4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/README.md @@ -0,0 +1,65 @@ +# Customizing Your Dev Container + +Customize your dev container using build arguments (for direct Docker builds) or +environment variables (for evaluation in `devcontainer.json`). + +* **CMake version:** + The version of cmake to install. (Default: 3.31.6) + * Docker ARG: + `CMAKE_VERSION` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_CMAKE_VERSION` + +* **CXX standard:** + This is the C++ standard to build from (eg: 17, 20, ...). (Default: 17) + * Docker ARG: + `CXX_STANDARD` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_CXX_STANDARD` + +* **abseil-cpp version:** + This is the version of abseil-cpp that will be used to build protobuf, gRPC, + and opentelemetry-cpp. + * Docker ARG: + `ABSEIL_CPP_VERSION` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_ABSEIL_CPP_VERSION` + +* **Protobuf version:** + * Docker ARG: + `PROTOBUF_VERSION` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_PROTOBUF_VERSION` + +* **gRPC version:** + * Docker ARG: + `GRPC_VERSION` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_GRPC_VERSION` + +* **User ID (UID):** + User ID (Default: `1000`) + * Docker ARG: + `USER_UID` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_USER_UID` + +* **Group ID (GID):** + User group ID (Default: `1000`) + * Docker ARG: + `USER_GID` + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_USER_GID` + +* **Install Packages:** + These are the additional packages that will be installed via `apt install` in the devcontainer. This is a space separated list. + * Docker ARG: + `INSTALL_PACKAGES` (Default: ``) + * Host Environment Variable: + `OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES` (Default: ``) + +## Examples + +* `docker build --build-arg CXX_STANDARD="20" --build-arg INSTALL_PACKAGES="nano gitk"...` +* `export OTEL_CPP_DEVCONTAINER_CXX_STANDARD=20` +* `export OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES="nano gitk"` diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/customize_container.sh b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/customize_container.sh new file mode 100755 index 00000000..ba9614e6 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/customize_container.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +if [[ $IS_CONTAINER_BUILD != "true" ]]; then + echo "This script should only run inside a Docker container." + exit 1 +fi + +if [[ -n "$INSTALL_PACKAGES" ]]; then + packages=($INSTALL_PACKAGES) + for package in "${packages[@]}"; do + apt install -y "$package" + done +fi + +if [[ $(id "$USER_NAME" 2>/dev/null) ]]; then + echo "User '$USER_NAME' already exists. Removing it." + userdel -rf "$USER_NAME" +elif [[ $(id -u "$USER_UID" 2>/dev/null) ]]; then + OTHER_USER=$(getent passwd "$USER_UID" | cut -d: -f1) + echo "User '$OTHER_USER' exists with UID $USER_UID. Removing it." + userdel -rf "$OTHER_USER" +fi + +if [[ ! $(getent group "$USER_GID" 2>/dev/null) ]]; then + echo "Group '$USER_GID' does not exist. Adding it." + groupadd -g "$USER_GID" "$USER_NAME" +fi + +useradd -m -u "$USER_UID" -g "$USER_GID" -s /bin/bash "$USER_NAME" +echo "Created user '$USER_NAME' (UID: $USER_UID, GID: $USER_GID)." + +echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/"$USER_NAME" + +echo "User and group setup complete." diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/devcontainer.json b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/devcontainer.json new file mode 100644 index 00000000..80871224 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.devcontainer/devcontainer.json @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.162.0/containers/javascript-node +{ + "name": "opentelemetry-cpp", + "build": { + "context": "..", + "dockerfile": "Dockerfile.dev", + "args": { + "USER_UID": "${localEnv:OTEL_CPP_DEVCONTAINER_USER_UID:1000}", + "USER_GID": "${localEnv:OTEL_CPP_DEVCONTAINER_USER_GID:1000}", + "INSTALL_PACKAGES": "${localEnv:OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES:}", + "CMAKE_VERSION": "${localEnv:OTEL_CPP_DEVCONTAINER_CMAKE_VERSION:3.31.6}", + "CXX_STANDARD": "${localEnv:OTEL_CPP_DEVCONTAINER_CXX_STANDARD:17}", + "GRPC_VERSION": "${localEnv:OTEL_CPP_DEVCONTAINER_GRPC_VERSION:v1.55.0}", + "PROTOBUF_VERSION": "${localEnv:OTEL_CPP_DEVCONTAINER_PROTOBUF_VERSION:23.3}", + "ABSEIL_CPP_VERSION":"${localEnv:OTEL_CPP_DEVCONTAINER_ABSEIL_CPP_VERSION:20230125.3}" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cpptools", + "ms-azuretools.vscode-docker", + "ms-vscode.cpptools-extension-pack" + ], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash", + } + } + }, + + "remoteUser": "devuser" +} diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitattributes b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitattributes new file mode 100644 index 00000000..ca2467b4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitattributes @@ -0,0 +1,47 @@ +##### Source code ##### + +## C++ and C source files +*.c text eol=lf diff=cpp +*.h text eol=lf diff=cpp +*.cc text eol=lf diff=cpp +*.cpp text eol=lf diff=cpp +*.cxx text eol=lf diff=cpp +*.hpp text eol=lf diff=cpp + +## Python scripts +*.py text eol=lf diff=python + +## Perl scripts/libraries/modules +*.perl text eol=lf diff=perl +*.pl text eol=lf diff=perl +*.pm text eol=lf diff=perl + +## Shell scripts +*.sh text eol=lf +*.bash text eol=lf + +## Windows batch and PowerShell scripts +*.bat text eol=crlf +*.cmd text eol=crlf +*.ps1 text eol=crlf + +##### Other file types ##### + +## Text files and documentation +*.txt text +README* text +INSTALL* text +LICENSE* text + +## Non-text documentation +*.html text diff=html +*.pdf binary +*.rtf binary + +## git files +.gitignore text eol=lf +.gitattributes text eol=lf + +## bazel files +WORKSPACE text eol=lf +BUILD text eol=lf diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/.codecov.yaml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/.codecov.yaml new file mode 100644 index 00000000..1b9921ac --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/.codecov.yaml @@ -0,0 +1,50 @@ +codecov: + require_ci_to_pass: false + max_report_age: off + +coverage: + precision: 2 + round: up + range: "80...100" + status: + project: + default: + informational: true + target: auto + threshold: 10% + patch: false + +parsers: + gcov: + branch_detection: + conditional: yes + loop: yes + method: no + macro: no + +comment: + layout: "reach,diff,flags,tree" + behavior: default + require_changes: false + +# Relative file path fixing. +# CI file paths must match Git file paths. +# This fix removes the "/home/runner/" prefix +# to coverage report file paths. +fixes: + - "/home/runner/::" + +ignore: + - "docs/**/*" + - "docker/**/*" + - "examples/**/*" + - "bazel/**/*" + - "cmake/**/*" + - "buildscripts/**/*" + - "third_party/**/*" + - "test_common/**/*" + - "tools/**/*" + - ".vscode/**/*" + - ".github/**/*" + - "**/test/**/*" + - "**.md" \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/CODEOWNERS b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/CODEOWNERS new file mode 100644 index 00000000..7a40cd0b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/CODEOWNERS @@ -0,0 +1,8 @@ +# Code owners file. +# This file controls who is tagged for review for any given pull request. + +# For ETW exporter +exporters/etw/* @reyang @maxgolov @lalitb @ThomsonTan @open-telemetry/cpp-approvers + +# For anything not explicitly taken by someone else: +* @open-telemetry/cpp-approvers diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/bug_report.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..e0bb4cca --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,19 @@ +--- +name: Bug Report +about: Create a report to help us improve +labels: bug +--- + +**Describe your environment** Describe any aspect of your environment relevant to the problem, including your platform, build system, version numbers of installed dependencies, etc. If you're reporting a problem with a specific version of a library in this repo, please check whether the problem has been fixed on main branch. + +**Steps to reproduce** +Describe exactly how to reproduce the error. Include a code sample if applicable. + +**What is the expected behavior?** +What did you expect to see? + +**What is the actual behavior?** +What did you see instead? + +**Additional context** +Add any other context about the problem here. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/feature_request.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..973549ab --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature Request +about: Suggest an idea for this project +labels: feature-request +--- + +Before opening a feature request against this repo, consider whether the feature should/could be implemented in the [other OpenTelemetry client libraries](https://github.com/open-telemetry/). If so, please [open an issue on opentelemetry-specification](https://github.com/open-telemetry/opentelemetry-specification/issues/new) first. + +**Is your feature request related to a problem?** +If so, provide a concise description of the problem. + +**Describe the solution you'd like** +What do you want to happen instead? What is the expected behavior? + +**Describe alternatives you've considered** +Which alternative solutions or features have you considered? + +**Additional context** +Add any other context about the feature request here. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/dependabot.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/dependabot.yml new file mode 100644 index 00000000..5cfb4cb8 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + labels: + - "GHA" + + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: daily diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/pull_request_template.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/pull_request_template.md new file mode 100644 index 00000000..e5476032 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/pull_request_template.md @@ -0,0 +1,11 @@ +Fixes # (issue) + +## Changes + +Please provide a brief description of the changes here. + +For significant contributions please make sure you have completed the following items: + +* [ ] `CHANGELOG.md` updated for non-trivial changes +* [ ] Unit tests have been added +* [ ] Changes in public API reviewed \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/repository-settings.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/repository-settings.md new file mode 100644 index 00000000..fa86d02c --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/repository-settings.md @@ -0,0 +1,38 @@ +# Process + +This file documents local admin changes for opentelemetry-cpp, +per the community process: https://github.com/open-telemetry/community/blob/main/docs/how-to-configure-new-repository.md + +Please note that the EasyCLA check **MUST** stay **REQUIRED**, +it should never be disabled or bypassed, at the risk of tainting the repository. + +# Guidelines + +The best is to open a PR first that describes the change, +so it can be discussed during review (maybe it is not needed, +maybe there is an alternate solution, ...). + +The PR must add a log entry in this file, detailing: + +* the date the change is implemented +* what is changed exactly (which setting) +* a short rationale + +Admin changes are then applied only when the PR is merged. + +If for some reason a change is implemented in emergency, +before a PR can be discussed and merged, +a PR should still be prepared and pushed after the fact to +describe the settings changed. + +# Log of local changes + +## 2023-11-03 + +Created log file `.github/repository-settings.md`, since admin permissions are now granted to maintainers. + +See https://github.com/open-telemetry/community/issues/1727 + +No setting changed. + + diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/benchmark.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/benchmark.yml new file mode 100644 index 00000000..eaad6b28 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/benchmark.yml @@ -0,0 +1,82 @@ +name: OpenTelemetry-cpp benchmarks +on: + push: + branches: + - main + +permissions: + contents: write + deployments: write + +jobs: + benchmark: + name: Run OpenTelemetry-cpp benchmarks + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_benchmark + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/install_bazelisk.sh + - name: Run benchmark + id: run_benchmarks + run: | + ./ci/do_ci.sh bazel.benchmark + mkdir -p benchmarks + mv api-benchmark_result.json benchmarks + mv sdk-benchmark_result.json benchmarks + mv exporters-benchmark_result.json benchmarks + - uses: actions/upload-artifact@6027e3dd177782cd8ab9af838c04fd81a07f1d47 # main March 2025 + with: + name: benchmark_results + path: benchmarks + store_benchmark: + needs: benchmark + strategy: + matrix: + components: ["api", "sdk", "exporters"] + name: Store benchmark result + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # main March 2025 + with: + name: benchmark_results + path: benchmarks + - name: Print json files + id: print_json + run: | + cat benchmarks/* + - name: Push benchmark result + uses: benchmark-action/github-action-benchmark@d48d326b4ca9ba73ca0cd0d59f108f9e02a381c7 # v1.20.4 + with: + name: OpenTelemetry-cpp ${{ matrix.components }} Benchmark + tool: 'googlecpp' + output-file-path: benchmarks/${{ matrix.components }}-benchmark_result.json + github-token: ${{ secrets.GITHUB_TOKEN }} + auto-push: true + # Show alert with commit comment on detecting possible performance regression + alert-threshold: '200%' + comment-on-alert: true + fail-on-alert: false + gh-pages-branch: gh-pages + benchmark-data-dir-path: benchmarks diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ci.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ci.yml new file mode 100644 index 00000000..bc585fc2 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ci.yml @@ -0,0 +1,1247 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + +# Commented 2024-11-06, lack of workers in github causes CI failures +# arm64_test: +# name: CMake test arm64 (with modern protobuf,grpc and abseil) +# runs-on: actuated-arm64-4cpu-16gb +# steps: +# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 +# with: +# submodules: 'recursive' +# - name: setup +# env: +# PROTOBUF_VERSION: '23.3' +# ABSEIL_CPP_VERSION: '20230125.3' +# CXX_STANDARD: '14' +# CC: /usr/bin/gcc-10 +# CXX: /usr/bin/g++-10 +# run: | +# sudo -E ./ci/setup_gcc10.sh +# sudo -E ./ci/setup_ci_environment.sh +# sudo -E ./ci/setup_cmake.sh +# sudo -E ./ci/setup_googletest.sh +# sudo -E ./ci/install_abseil.sh +# sudo -E ./ci/install_protobuf.sh + + cmake_test: + name: CMake test (prometheus, elasticsearch, zipkin) + runs-on: ubuntu-22.04 + env: + CXX_STANDARD: '17' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run cmake tests + run: | + ./ci/do_ci.sh cmake.test + + cmake_fetch_content_test: + name: CMake FetchContent usage with opentelemetry-cpp + runs-on: ubuntu-24.04 + env: + CXX_STANDARD: '17' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: Install abseil, protobuf, and grpc with apt + run: | + sudo -E apt-get update + sudo -E apt-get install -y libabsl-dev libprotobuf-dev libgrpc++-dev protobuf-compiler protobuf-compiler-grpc + - name: run fetch content cmake test + run: | + ./ci/do_ci.sh cmake.fetch_content.test + + cmake_gcc_maintainer_sync_test: + name: CMake gcc 14 (maintainer mode, sync) + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-14 + CXX: /usr/bin/g++-14 + PROTOBUF_VERSION: 21.12 + run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_protobuf.sh + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + - name: run cmake gcc (maintainer mode, sync) + env: + CC: /usr/bin/gcc-14 + CXX: /usr/bin/g++-14 + run: | + ./ci/do_ci.sh cmake.maintainer.sync.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_gcc_maintainer_async_test: + name: CMake gcc 14 (maintainer mode, async) + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-14 + CXX: /usr/bin/g++-14 + PROTOBUF_VERSION: 21.12 + run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_protobuf.sh + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + - name: run cmake gcc (maintainer mode, async) + env: + CC: /usr/bin/gcc-14 + CXX: /usr/bin/g++-14 + run: | + ./ci/do_ci.sh cmake.maintainer.async.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_clang_maintainer_sync_test: + name: CMake clang 18 (maintainer mode, sync) + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + PROTOBUF_VERSION: 21.12 + run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_protobuf.sh + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + - name: run cmake clang (maintainer mode, sync) + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + run: | + ./ci/do_ci.sh cmake.maintainer.sync.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_clang_maintainer_async_test: + name: CMake clang 18 (maintainer mode, async) + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + PROTOBUF_VERSION: 21.12 + run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_protobuf.sh + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + - name: run cmake clang (maintainer mode, async) + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + run: | + ./ci/do_ci.sh cmake.maintainer.async.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_clang_maintainer_abiv2_test: + name: CMake clang 18 (maintainer mode, abiv2) + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + PROTOBUF_VERSION: 21.12 + run: | + sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_protobuf.sh + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + - name: run cmake clang (maintainer mode, abiv2) + env: + CC: /usr/bin/clang-18 + CXX: /usr/bin/clang++-18 + run: | + ./ci/do_ci.sh cmake.maintainer.abiv2.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_msvc_maintainer_test: + name: CMake msvc (maintainer mode) + runs-on: windows-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: run tests + run: ./ci/do_ci.ps1 cmake.maintainer.test + + cmake_msvc_maintainer_test_stl_cxx20: + name: CMake msvc (maintainer mode) with C++20 + runs-on: windows-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: run tests + env: + CXX_STANDARD: '20' + run: ./ci/do_ci.ps1 cmake.maintainer.cxx20.stl.test + + cmake_msvc_maintainer_abiv2_test: + name: CMake msvc (maintainer mode, abiv2) + runs-on: windows-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: run tests + env: + CXX_STANDARD: '20' + run: ./ci/do_ci.ps1 cmake.maintainer.abiv2.test + + cmake_with_async_export_test: + name: CMake test (without otlp-exporter and with async export) + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run cmake tests (without otlp-exporter) + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: | + ./ci/do_ci.sh cmake.with_async_export.test + + cmake_opentracing_shim_test: + name: CMake test (with opentracing-shim) + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run cmake tests (enable opentracing-shim) + run: ./ci/do_ci.sh cmake.opentracing_shim.test + + cmake_test_cxx14_gcc: + name: CMake C++14 test(GCC) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests (enable stl) + env: + CXX_STANDARD: '14' + run: ./ci/do_ci.sh cmake.c++14.stl.test + + cmake_test_cxx17_gcc: + name: CMake C++17 test(GCC) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests (enable stl) + env: + CXX_STANDARD: '17' + run: ./ci/do_ci.sh cmake.c++17.stl.test + + cmake_test_cxx20_gcc: + name: CMake C++20 test(GCC) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests + env: + CXX_STANDARD: '20' + run: ./ci/do_ci.sh cmake.c++20.test + - name: run tests (enable stl) + env: + CXX_STANDARD: '20' + run: ./ci/do_ci.sh cmake.c++20.stl.test + + cmake_test_cxx20_clang: + name: CMake C++20 test(Clang with libc++) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + CXX_STANDARD: '20' + run: ./ci/do_ci.sh cmake.c++20.test + - name: run tests (enable stl) + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + CXX_STANDARD: '20' + run: ./ci/do_ci.sh cmake.c++20.stl.test + + cmake_test_cxx23_gcc: + name: CMake C++23 test(GCC) + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests + env: + CXX_STANDARD: '23' + run: ./ci/do_ci.sh cmake.c++23.test + - name: run tests (enable stl) + env: + CXX_STANDARD: '23' + run: ./ci/do_ci.sh cmake.c++23.stl.test + + cmake_test_cxx23_clang: + name: CMake C++23 test(Clang with libc++) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + CXX_STANDARD: '23' + run: ./ci/do_ci.sh cmake.c++23.test + - name: run tests (enable stl) + env: + CC: /usr/bin/clang + CXX: /usr/bin/clang++ + CXXFLAGS: "-stdlib=libc++" + CXX_STANDARD: '23' + run: ./ci/do_ci.sh cmake.c++23.stl.test + + cmake_otprotocol_test: + name: CMake test (with otlp-exporter) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run otlp exporter tests + run: | + sudo ./ci/setup_grpc.sh + ./ci/do_ci.sh cmake.exporter.otprotocol.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + + cmake_modern_protobuf_grpc_with_abseil_test: + name: CMake test (with modern protobuf,grpc and abseil) + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + PROTOBUF_VERSION: '23.3' + ABSEIL_CPP_VERSION: '20230125.3' + CXX_STANDARD: '14' + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/install_abseil.sh + sudo -E ./ci/install_protobuf.sh + - name: run otlp exporter tests + env: + CXX_STANDARD: '14' + run: | + sudo -E ./ci/setup_grpc.sh -m -p protobuf -p abseil-cpp + ./ci/do_ci.sh cmake.exporter.otprotocol.test + + cmake_do_not_install_test: + name: CMake do not install test (with otlp-exporter) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run otlp exporter tests + run: | + sudo ./ci/setup_grpc.sh + ./ci/do_ci.sh cmake.do_not_install.test + + cmake_otprotocol_shared_libs_with_static_grpc_test: + name: CMake test (build shared libraries with otlp-exporter and static gRPC) + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run otlp exporter tests + run: | + sudo ./ci/setup_grpc.sh -T + ./ci/do_ci.sh cmake.exporter.otprotocol.shared_libs.with_static_grpc.test + + plugin_test: + name: Plugin -> CMake + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: ./ci/do_ci.sh cmake.test_example_plugin + + bazel_test: + name: Bazel + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_test + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.test + + bazel_no_bzlmod_test: + name: Bazel without bzlmod + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_test + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.no_bzlmod.test + + bazel_test_async: + name: Bazel with async export + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_test + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.with_async_export.test + + bazel_valgrind: + name: Bazel valgrind + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_valgrind + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.valgrind + + bazel_noexcept: + name: Bazel noexcept + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_noexcept + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.noexcept + + bazel_nortti: + name: Bazel nortti + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_nortti + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.nortti + + bazel_asan: + name: Bazel asan config + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_asan + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.asan + + bazel_tsan: + name: Bazel tsan config + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_tsan + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/setup_cmake.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: ./ci/do_ci.sh bazel.tsan + + bazel_osx: + name: Bazel on MacOS + runs-on: macos-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /Users/runner/.cache/bazel + key: bazel_osx + - name: run tests + run: ./ci/do_ci.sh bazel.macos.test + + benchmark: + name: Benchmark + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Mount Bazel Cache + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + env: + cache-name: bazel_cache + with: + path: /home/runner/.cache/bazel + key: bazel_benchmark + - name: setup + run: | + sudo ./ci/setup_ci_environment.sh + sudo ./ci/install_bazelisk.sh + - name: run tests + run: | + env BENCHMARK_DIR=/benchmark + ./ci/do_ci.sh benchmark + - name: Upload benchmark results + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: benchmark_reports + path: /home/runner/benchmark + + format: + name: Format + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: setup + run: sudo apt remove needrestart && sudo ./ci/install_format_tools.sh #refer: https://github.com/actions/runner-images/issues/9937 + - name: run tests + run: ./ci/do_ci.sh format + + copyright: + name: Copyright + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: check copyright + run: ./tools/check_copyright.sh + + windows: + name: CMake -> exporter proto + runs-on: windows-2019 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + ./ci/install_windows_protobuf.ps1 + - name: run cmake test + run: ./ci/do_ci.ps1 cmake.test + - name: run otprotocol test + run: ./ci/do_ci.ps1 cmake.exporter.otprotocol.test + + windows-build-dll: + name: CMake -> exporter proto (Build as DLL) + runs-on: windows-2019 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + ./ci/install_windows_protobuf.ps1 + - name: run cmake test (DLL build) + run: ./ci/do_ci.ps1 cmake.dll.test + - name: run cmake cxx20 test (DLL build) + run: ./ci/do_ci.ps1 cmake.dll.cxx20.test + - name: run otprotocol test (DLL build) + run: ./ci/do_ci.ps1 cmake.exporter.otprotocol.dll.test + + windows_with_async_export: + name: CMake (With async export) -> exporter proto + runs-on: windows-2019 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + ./ci/install_windows_protobuf.ps1 + - name: run cmake test + run: ./ci/do_ci.ps1 cmake.with_async_export.test + - name: run otprotocol test + run: ./ci/do_ci.ps1 cmake.exporter.otprotocol.with_async_export.test + + windows_bazel: + name: Bazel Windows + runs-on: windows-2019 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/install_windows_bazelisk.ps1 + - name: run tests + run: ./ci/do_ci.ps1 bazel.build + + windows_plugin_test: + name: Plugin -> CMake Windows + runs-on: windows-2019 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: run tests + run: ./ci/do_ci.ps1 cmake.test_example_plugin + + code_coverage: + name: Code coverage + runs-on: ubuntu-22.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-10 + CXX: /usr/bin/g++-10 + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run tests and generate report + env: + CC: /usr/bin/gcc-10 + CXX: /usr/bin/g++-10 + run: ./ci/do_ci.sh code.coverage + - name: upload report + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + with: + files: /home/runner/build/coverage.info + + markdown-lint: + runs-on: ubuntu-latest + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: check out code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: install markdownlint-cli + run: sudo npm install -g markdownlint-cli@0.44.0 + + - name: run markdownlint + run: markdownlint . + + shellcheck: + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: check out code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: install shellcheck + run: sudo apt install --assume-yes shellcheck + - name: run shellcheck + run: find . -name \*.sh | xargs shellcheck --severity=error + + misspell: + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: check out code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: install misspell + run: | + curl -L -o ./install-misspell.sh https://git.io/misspell + sh ./install-misspell.sh + - name: run misspell + run: ./bin/misspell -error . + + docfx_check: + name: DocFX check + runs-on: windows-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: install docfx + run: choco install docfx -y --version=2.58.5 + - name: run ./ci/docfx.cmd + shell: cmd + run: ./ci/docfx.cmd + + w3c_trace_context_compliance_v1: + name: W3C Distributed Tracing Validation V1 + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: Checkout open-telemetry/opentelemetry-cpp + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: run w3c trace-context test server (background) + env: + CXX_STANDARD: '14' + run: | + ./ci/do_ci.sh cmake.w3c.trace-context.build-server + cd $HOME/build/ext/test/w3c_tracecontext_http_test_server + ./w3c_tracecontext_http_test_server & + - name: Checkout w3c/trace-context repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: w3c/trace-context + path: trace-context + - name: install dependencies + run: | + sudo apt update && sudo apt install python3-pip + sudo pip3 install aiohttp==3.11.18 + - name: run w3c trace-context test suite + env: + SPEC_LEVEL: 1 + run: + | + python ${GITHUB_WORKSPACE}/trace-context/test/test.py http://localhost:30000/test TraceContextTest AdvancedTest + curl http://localhost:30000/stop diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/clang-tidy.yaml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/clang-tidy.yaml new file mode 100644 index 00000000..aec027f6 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/clang-tidy.yaml @@ -0,0 +1,89 @@ +name: clang-tidy + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + clang-tidy: + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: recursive + + - name: Setup Environment + env: + PROTOBUF_VERSION: '23.3' + ABSEIL_CPP_VERSION: '20230125.3' + CXX_STANDARD: '14' + run: | + sudo apt update -y + sudo apt install -y --no-install-recommends --no-install-suggests \ + build-essential \ + iwyu \ + cmake \ + libssl-dev \ + libcurl4-openssl-dev \ + libprotobuf-dev \ + protobuf-compiler \ + libgmock-dev \ + libgtest-dev \ + libbenchmark-dev + + if ! command -v clang-tidy &> /dev/null; then + echo "clang-tidy could not be found" + exit 1 + fi + echo "Using clang-tidy version: $(clang-tidy --version)" + echo "clang-tidy installed at: $(which clang-tidy)" + + + - name: Prepare CMake + env: + CC: clang + CXX: clang++ + run: | + echo "Running cmake..." + cmake -B build \ + -DCMAKE_CXX_STANDARD=14 \ + -DWITH_STL=CXX14 \ + -DWITH_OTLP_HTTP=ON \ + -DWITH_OTLP_FILE=ON \ + -DWITH_PROMETHEUS=ON \ + -DWITH_ZIPKIN=ON \ + -DWITH_ELASTICSEARCH=ON \ + -DWITH_OTLP_HTTP_COMPRESSION=ON \ + -DWITH_EXAMPLES=ON \ + -DWITH_EXAMPLES_HTTP=ON \ + -DBUILD_W3CTRACECONTEXT_TEST=ON \ + -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \ + -DWITH_ASYNC_EXPORT_PREVIEW=ON \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON + + - name: Run clang-tidy + run: | + cmake --build build --target opentelemetry_proto + jq -r .[].file build/compile_commands.json | grep -vE '/(generated|third_party)/' | xargs -P $(nproc) -n 1 clang-tidy --quiet -p build 2>&1 | tee -a clang-tidy.log + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: Logs (clang-tidy) + path: ./clang-tidy.log + + - name: Count warnings + run: | + COUNT=$(grep -c "warning:" clang-tidy.log) + echo "clang-tidy reported ${COUNT} warning(s)" + +# TODO: include WITH_OTLP_GRPC flags. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cmake_install.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cmake_install.yml new file mode 100644 index 00000000..c62d7def --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cmake_install.yml @@ -0,0 +1,372 @@ +name: CMake Install Tests + +on: + workflow_dispatch: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + windows_2022_vcpkg_submodule: + name: Windows 2022 vcpkg submodule versions cxx17 (static libs - dll) + runs-on: windows-2022 + env: + # Set to the latest version of cmake 3.x + CMAKE_VERSION: '3.31.6' + # cxx17 is the default for windows-2022 + CXX_STANDARD: '17' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Build dependencies with vcpkg submodule + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: Run Tests + run: ./ci/do_ci.ps1 cmake.install.test + - name: Run DLL Tests + run: ./ci/do_ci.ps1 cmake.dll.install.test + + windows_2019_vcpkg_submodule_min_cmake: + name: Windows 2019 vcpkg submodule versions minimum cmake cxx14 (static libs) + runs-on: windows-2019 + env: + # cmake 3.15 is the minimum for windows builds (See https://github.com/open-telemetry/opentelemetry-cpp/pull/3349#discussion_r2030319430) + CMAKE_VERSION: '3.15.0' + # cxx14 is the default for windows-2019 + CXX_STANDARD: '14' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Build dependencies with vcpkg submodule + run: | + ./ci/setup_cmake.ps1 + ./ci/setup_windows_ci_environment.ps1 + - name: Run Tests + run: ./ci/do_ci.ps1 cmake.install.test + + ubuntu_2404_system_packages: + name: Ubuntu 24.04 apt packages cxx17 (static libs - shared libs) + runs-on: ubuntu-24.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # CMake 3.28 is apt package version for Ubuntu 24.04 + CMAKE_VERSION: '3.28.3' + # cxx17 is the default for Ubuntu 24.04 + CXX_STANDARD: '17' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install libcurl, zlib, nlohmann-json with apt + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: Install abseil, protobuf, and grpc with apt + run: | + sudo -E apt-get update + sudo -E apt-get install -y libabsl-dev libprotobuf-dev libgrpc++-dev protobuf-compiler protobuf-compiler-grpc + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + - name: Run Tests (shared libs) + env: + BUILD_SHARED_LIBS: 'ON' + run: ./ci/do_ci.sh cmake.install.test + + ubuntu_2404_latest: + name: Ubuntu 24.04 latest versions cxx20 (static libs) + runs-on: ubuntu-24.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # Set to the latest version of cmake 3.x + CMAKE_VERSION: '3.31.6' + # Set to the latest cxx standard supported by opentelemetry-cpp + CXX_STANDARD: '20' + # Versions below set to the latest version available + # The abseil and protobuf versions are taken from + # the grpc submodules at the GRPC_VERSION tag + GOOGLETEST_VERSION: '1.16.0' + ABSEIL_CPP_VERSION: '20240722.1' + PROTOBUF_VERSION: '29.0' + GRPC_VERSION: 'v1.71.0' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install gtest, libcurl, zlib, nlohmann-json with apt + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: Build abseil, protobuf, and grpc with ci scripts + run: | + sudo -E ./ci/install_abseil.sh + sudo -E ./ci/install_protobuf.sh + sudo -E ./ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil-cpp + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + + ubuntu_2204_stable: + name: Ubuntu 22.04 stable versions cxx17 (static libs - shared libs) + runs-on: ubuntu-22.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # CMake 3.22 is the apt package version for Ubuntu 22.04 + CMAKE_VERSION: '3.22.0' + CXX_STANDARD: '17' + # These are stable versions tested in the main ci workflow + # and defaults in the devcontainer + GOOGLETEST_VERSION: '1.14.0' + ABSEIL_CPP_VERSION: '20230125.3' + PROTOBUF_VERSION: '23.3' + GRPC_VERSION: 'v1.55.0' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install gtest, libcurl, zlib, nlohmann-json with apt + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: Build abseil, protobuf, and grpc with ci scripts + run: | + sudo -E ./ci/install_abseil.sh + sudo -E ./ci/install_protobuf.sh + sudo -E ./ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil-cpp + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + - name: Run Tests (shared libs) + env: + BUILD_SHARED_LIBS: 'ON' + run: ./ci/do_ci.sh cmake.install.test + + ubuntu_2204_minimum: + name: Ubuntu 22.04 minimum versions cxx14 (static libs - shared libs) + runs-on: ubuntu-22.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # Set to the current minimum version of cmake + CMAKE_VERSION: '3.14.0' + # cxx14 is the default for Ubuntu 22.04 + CXX_STANDARD: '14' + # This is the apt package version of googletest for Ubuntu 22.04 + GOOGLETEST_VERSION: '1.11.0' + # These are minimum versions tested in the main ci workflow + ABSEIL_CPP_VERSION: '20220623.2' + PROTOBUF_VERSION: '21.12' + GRPC_VERSION: 'v1.49.2' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install gtest, libcurl, zlib, nlohmann-json with apt + run: | + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_googletest.sh + - name: Build abseil, protobuf, and grpc with ci scripts + run: | + sudo -E ./ci/install_abseil.sh + sudo -E ./ci/install_protobuf.sh + sudo -E ./ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil-cpp + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + - name: Run Tests (shared libs) + env: + BUILD_SHARED_LIBS: 'ON' + run: ./ci/do_ci.sh cmake.install.test + + ubuntu_2404_conan_stable: + name: Ubuntu 24.04 conan stable versions cxx17 (static libs - shared libs - opentracing shim) + runs-on: ubuntu-24.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # CMake 3.28 is apt package version for Ubuntu 24.04 + CMAKE_VERSION: '3.28.3' + CXX_STANDARD: '17' + CMAKE_TOOLCHAIN_FILE: /home/runner/conan/build/Debug/generators/conan_toolchain.cmake + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install Conan + run: | + python3 -m pip install pip==25.0.1 + pip install "conan==2.15.1" + conan profile detect --force + - name: Install or build all dependencies with Conan + run: | + sudo -E ./ci/setup_cmake.sh + conan install install/conan/conanfile_stable.txt --build=missing -of /home/runner/conan -s build_type=${BUILD_TYPE} -s compiler.cppstd=${CXX_STANDARD} + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + - name: Run Tests (shared libs) + env: + BUILD_SHARED_LIBS: 'ON' + run: ./ci/do_ci.sh cmake.install.test + - name: verify pkgconfig packages + run: | + export PKG_CONFIG_PATH=$INSTALL_TEST_DIR/lib/pkgconfig:$PKG_CONFIG_PATH + ./ci/verify_packages.sh + - name: Run OpenTracing Shim Test + run: ./ci/do_ci.sh cmake.opentracing_shim.install.test + + ubuntu_2404_conan_latest: + name: Ubuntu 24.04 conan latest versions cxx17 (static libs) + runs-on: ubuntu-24.04 + env: + INSTALL_TEST_DIR: '/home/runner/install_test' + # Set to the latest version of cmake 3.x + CMAKE_VERSION: '3.31.6' + CXX_STANDARD: '17' + CMAKE_TOOLCHAIN_FILE: /home/runner/conan/build/Debug/generators/conan_toolchain.cmake + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install Conan + run: | + python3 -m pip install pip==25.0.1 + pip install "conan==2.15.1" + conan profile detect --force + - name: Install or build all dependencies with Conan + run: | + sudo -E ./ci/setup_cmake.sh + conan install install/conan/conanfile_latest.txt --build=missing -of /home/runner/conan -s build_type=${BUILD_TYPE} -s compiler.cppstd=${CXX_STANDARD} + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + - name: verify pkgconfig packages + run: | + export PKG_CONFIG_PATH=$INSTALL_TEST_DIR/lib/pkgconfig:$PKG_CONFIG_PATH + ./ci/verify_packages.sh + + macos_14_conan_stable: + name: macOS 14 conan stable versions cxx17 (static libs) + runs-on: macos-14 + env: + INSTALL_TEST_DIR: '/Users/runner/install_test' + CMAKE_VERSION: '3.28.3' + CXX_STANDARD: '17' + CMAKE_TOOLCHAIN_FILE: '/Users/runner/conan/build/Debug/generators/conan_toolchain.cmake' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install Conan and tools + run: | + brew install conan autoconf automake libtool coreutils + ./ci/setup_cmake_macos.sh + conan profile detect --force + - name: Install or build all dependencies with Conan + run: conan install install/conan/conanfile_stable.txt --build=missing -of /Users/runner/conan -s build_type=${BUILD_TYPE} -s compiler.cppstd=${CXX_STANDARD} + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test + + macos_14_brew_packages: + name: macOS 14 brew latest versions cxx17 (static libs) + runs-on: macos-14 + env: + INSTALL_TEST_DIR: '/Users/runner/install_test' + # Set to the latest version of cmake 3.x + CMAKE_VERSION: '3.31.6' + CXX_STANDARD: '17' + BUILD_TYPE: 'Debug' + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Install Dependencies with Homebrew + run: | + ./ci/setup_cmake_macos.sh + brew install coreutils + brew install googletest + brew install google-benchmark + brew install zlib + brew install abseil + brew install protobuf + brew install grpc + brew install nlohmann-json + brew install prometheus-cpp + - name: Run Tests (static libs) + env: + BUILD_SHARED_LIBS: 'OFF' + run: ./ci/do_ci.sh cmake.install.test \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/codeql-analysis.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/codeql-analysis.yml new file mode 100644 index 00000000..9d2fe02d --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/codeql-analysis.yml @@ -0,0 +1,48 @@ +name: "CodeQL" + +on: + push: + branches: [main] + pull_request: + # The branches below must be a subset of the branches above + branches: [main] + +permissions: + contents: read + +jobs: + CodeQL-Build: + permissions: + actions: read # for github/codeql-action/init to get workflow details + contents: read # for actions/checkout to fetch code + security-events: write # for github/codeql-action/autobuild to send a status report + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + - name: Remove Third_party Modules from Code Scan + run: | + rm -rf third_party + - name: Setup + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + GOOGLETEST_VERSION: 1.12.1 + run: | + sudo -E ./ci/setup_googletest.sh + sudo -E ./ci/setup_ci_environment.sh + - name: Initialize CodeQL + uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + with: + languages: cpp + - name: Autobuild + uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cppcheck.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cppcheck.yml new file mode 100644 index 00000000..53057354 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/cppcheck.yml @@ -0,0 +1,77 @@ + +name: cppcheck + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + cppcheck: + runs-on: ubuntu-24.04 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + + - name: Set up dependencies + run: | + sudo apt update -y + sudo apt install -y cppcheck + + - name: Run cppcheck + run: | + cppcheck --version | tee cppcheck.log + cppcheck \ + --force \ + --enable=warning,performance,portability \ + --inline-suppr \ + --suppress=unknownMacro:exporters/etw/include/opentelemetry/exporters/etw/TraceLoggingDynamic.h \ + --language=c++ \ + --std=c++14 \ + -I api/include \ + -I exporters/elasticsearch/include \ + -I exporters/etw/include \ + -I exporters/memory/include \ + -I exporters/ostream/include \ + -I exporters/otlp/include \ + -I exporters/prometheus/include \ + -I exporters/zipkin/include \ + -I ext/include \ + -I opentracing-shim/include \ + -I sdk/include \ + -i build \ + -i test \ + -i third_party \ + -j $(nproc) \ + . 2>&1 | tee --append cppcheck.log + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + if: success() || failure() + with: + name: Logs (cppcheck) + path: ./cppcheck.log + + - name: Count warnings + run: | + set +e + readonly WARNING_COUNT=`grep -c -E "\[.+\]" cppcheck.log` + echo "cppcheck reported ${WARNING_COUNT} warning(s)" + # Acceptable limit, to decrease over time down to 0 + readonly WARNING_LIMIT=10 + # FAIL the build if WARNING_COUNT > WARNING_LIMIT + if [ $WARNING_COUNT -gt $WARNING_LIMIT ] ; then + exit 1 + # WARN in annotations if WARNING_COUNT > 0 + elif [ $WARNING_COUNT -gt 0 ] ; then + echo "::warning::cppcheck reported ${WARNING_COUNT} warning(s)" + fi diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/dependencies_image.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/dependencies_image.yml new file mode 100644 index 00000000..3163dd8c --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/dependencies_image.yml @@ -0,0 +1,54 @@ +name: 'OpenTelemetry-cpp dependencies image' +on: + schedule: + - cron: "0 3 * * 6" + +permissions: + contents: read + +jobs: + docker_image: + name: Docker Image + runs-on: ubuntu-latest + timeout-minutes: 300 + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - + name: checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - + name: Set up QEMU + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + - + name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 + - + name: Build Image + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ci/ + file: ./docker/Dockerfile + build-args: BASE_IMAGE=ubuntu:latest + platforms: linux/amd64 + # platforms: linux/amd64,linux/arm64 + push: false + tags: otel-cpp-deps + load: true + - + name: Save Image + run: | + docker images + docker save -o /opt/otel-cpp-deps-debian.tar otel-cpp-deps + - + name: Upload Image + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: otel-cpp-deps + path: /opt/otel-cpp-deps-debian.tar + retention-days: 14 diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/fossa.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/fossa.yml new file mode 100644 index 00000000..8b90aa16 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/fossa.yml @@ -0,0 +1,25 @@ +name: FOSSA scanning + +on: + push: + branches: + - main + +permissions: + contents: read + +jobs: + fossa: + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - uses: fossas/fossa-action@3ebcea1862c6ffbd5cf1b4d0bd6b3fe7bd6f2cac # v1.7.0 + with: + api-key: ${{secrets.FOSSA_API_KEY}} + team: OpenTelemetry diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/iwyu.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/iwyu.yml new file mode 100644 index 00000000..42881ec6 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/iwyu.yml @@ -0,0 +1,92 @@ + +name: include-what-you-use + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + +jobs: + iwyu: + runs-on: ubuntu-latest + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: 'recursive' + + - name: setup dependencies + run: | + sudo apt update -y + sudo apt install -y --no-install-recommends --no-install-suggests \ + build-essential \ + iwyu \ + ninja-build \ + libssl-dev \ + libcurl4-openssl-dev \ + libprotobuf-dev \ + protobuf-compiler \ + libgmock-dev \ + libgtest-dev \ + libbenchmark-dev + sudo ./ci/setup_cmake.sh + + + - name: setup grpc + run: | + sudo ./ci/setup_grpc.sh + + - name: Prepare CMake + run: | + TOPDIR=`pwd` + mkdir build && cd build + CC="clang" CXX="clang++" cmake \ + -DCMAKE_CXX_STANDARD=14 \ + -DWITH_STL=CXX14 \ + -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="include-what-you-use;-w;-Xiwyu;--mapping_file=${TOPDIR}/.iwyu.imp;" \ + -DBUILD_TESTING=ON \ + -DBUILD_W3CTRACECONTEXT_TEST=ON \ + -DWITH_OTLP_GRPC=ON \ + -DWITH_OTLP_HTTP=ON \ + -DWITH_OTLP_FILE=ON \ + -DWITH_OPENTRACING=ON \ + -DWITH_OTLP_HTTP_COMPRESSION=ON \ + -DWITH_THREAD_INSTRUMENTATION=ON \ + -DWITH_ZIPKIN=ON \ + -DWITH_PROMETHEUS=ON \ + .. + + - name: iwyu_tool + run: | + cd build + make -k 2>&1 | tee -a iwyu.log + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + if: success() || failure() + with: + name: Logs (include-what-you-use) + path: ./build/*.log + + - name: count warnings + run: | + set +e + cd build + readonly WARNING_COUNT=`grep -c "include-what-you-use reported diagnostics:" iwyu.log` + echo "include-what-you-use reported ${WARNING_COUNT} warning(s)" + # Acceptable limit, to decrease over time down to 0 + readonly WARNING_LIMIT=0 + # FAIL the build if WARNING_COUNT > WARNING_LIMIT + if [ $WARNING_COUNT -gt $WARNING_LIMIT ] ; then + exit 1 + # WARN in annotations if WARNING_COUNT > 0 + elif [ $WARNING_COUNT -gt 0 ] ; then + echo "::warning::include-what-you-use reported ${WARNING_COUNT} warning(s)" + fi diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ossf-scorecard.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ossf-scorecard.yml new file mode 100644 index 00000000..4ecbe8bf --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/ossf-scorecard.yml @@ -0,0 +1,52 @@ +name: OSSF Scorecard + +on: + push: + branches: + - main + schedule: + - cron: "56 23 * * 6" # once a week + workflow_dispatch: + +permissions: read-all + +jobs: + analysis: + runs-on: ubuntu-latest + permissions: + # Needed for Code scanning upload + security-events: write + # Needed for GitHub OIDC token if publish_results is true + id-token: write + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 + with: + results_file: results.sarif + results_format: sarif + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable + # uploads of run results in SARIF format to the repository Actions tab. + # https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts + - name: "Upload artifact" + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard (optional). + # Commenting out will disable upload of results to your repo's Code Scanning dashboard + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + with: + sarif_file: results.sarif diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_comment.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_comment.yml new file mode 100644 index 00000000..6e64cf0a --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_comment.yml @@ -0,0 +1,28 @@ + +name: Add comment +on: + issues: + types: + - labeled +permissions: + contents: read + +jobs: + add-comment: + if: github.event.label.name == 'help wanted' + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: Add comment + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 + with: + issue-number: ${{ github.event.issue.number }} + body: | + This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** + :sparkles: Thank you for your contribution! :sparkles: diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_issue_open.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_issue_open.yml new file mode 100644 index 00000000..14750d1a --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/project_management_issue_open.yml @@ -0,0 +1,29 @@ +name: OpenTelemetry-cpp project +on: + issues: + types: + - reopened + - opened +permissions: + contents: read + +jobs: + label_issues: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ["needs-triage"] + }) diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/stale.yml b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/stale.yml new file mode 100644 index 00000000..93140363 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.github/workflows/stale.yml @@ -0,0 +1,21 @@ +name: "Mark stale issues" +on: + schedule: + - cron: "30 1 * * *" + +permissions: + contents: read + +jobs: + stale: + permissions: + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs + runs-on: ubuntu-latest + steps: + - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 + with: + stale-issue-message: "This issue was marked as stale due to lack of activity." + days-before-issue-stale: 60 + days-before-close: -1 + exempt-issue-labels: "do-not-stale" diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitignore b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitignore new file mode 100644 index 00000000..580df5ac --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitignore @@ -0,0 +1,84 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# Ref. https://github.com/github/gitignore/blob/master/C%2B%2B.gitignore +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll +*.pdb + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# Bazel files +MODULE.bazel.lock +/bazel-* + +# Mac +.DS_Store + +# Output directories +/out +/out.* +# Indicator that the tools were deployed +.buildtools + +# Temporary Bazel directories +/bazel-* +/plugin +/build + +tags +.cache/clangd/* + +# Temporary dir used when generating semconv +buildscripts/semantic-convention/tmp-semconv/ + +# Generated cert keys in functional tests +functional/cert/ca.csr +functional/cert/ca.pem +functional/cert/ca-key.pem +functional/cert/client_cert.csr +functional/cert/client_cert.pem +functional/cert/client_cert-key.pem +functional/cert/server_cert.csr +functional/cert/server_cert.pem +functional/cert/server_cert-key.pem +functional/cert/ca_b.csr +functional/cert/ca_b.pem +functional/cert/ca_b-key.pem +functional/cert/client_cert_b.csr +functional/cert/client_cert_b.pem +functional/cert/client_cert_b-key.pem +functional/cert/server_cert_b.csr +functional/cert/server_cert_b.pem +functional/cert/server_cert_b-key.pem +functional/cert/unreadable.pem + +localinstall \ No newline at end of file diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitmodules b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitmodules new file mode 100644 index 00000000..88a78e5f --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.gitmodules @@ -0,0 +1,39 @@ +[submodule "third_party/prometheus-cpp"] +path = third_party/prometheus-cpp +url = https://github.com/jupp0r/prometheus-cpp +branch = master + +[submodule "tools/vcpkg"] +path = tools/vcpkg +url = https://github.com/Microsoft/vcpkg +branch = master + +[submodule "third_party/ms-gsl"] +path = third_party/ms-gsl +url = https://github.com/microsoft/GSL +branch = main + +[submodule "third_party/googletest"] +path = third_party/googletest +url = https://github.com/google/googletest +branch = main + +[submodule "third_party/benchmark"] +path = third_party/benchmark +url = https://github.com/google/benchmark +branch = main + +[submodule "third_party/opentelemetry-proto"] +path = third_party/opentelemetry-proto +url = https://github.com/open-telemetry/opentelemetry-proto +branch = main + +[submodule "third_party/nlohmann-json"] +path = third_party/nlohmann-json +url = https://github.com/nlohmann/json +branch = master + +[submodule "third_party/opentracing-cpp"] +path = third_party/opentracing-cpp +url = https://github.com/opentracing/opentracing-cpp.git +branch = master diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.iwyu.imp b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.iwyu.imp new file mode 100644 index 00000000..123e72f3 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.iwyu.imp @@ -0,0 +1,31 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# include-what-you-use mapping file + +[ + # Work around for C++ STL + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + + # Local opentelemetry-cpp style + + # We prefer to include for simplicity + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + + # We prefer to include for simplicity + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + + # We prefer to include for simplicity + { "include": ["", "private", "", "public"] }, +] + diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlint.json b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlint.json new file mode 100644 index 00000000..48c2ae2a --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlint.json @@ -0,0 +1,8 @@ +{ + "default": true, + "MD013": + { + "code_blocks": false, + "tables": false + } +} diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlintignore b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlintignore new file mode 100644 index 00000000..f0cec48d --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/.markdownlintignore @@ -0,0 +1,3 @@ +third_party/** +tools/** +examples/otlp/README.md diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/CHANGELOG.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CHANGELOG.md new file mode 100644 index 00000000..30c94679 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CHANGELOG.md @@ -0,0 +1,2816 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## Guideline to update the version + +Increment the: + +* MAJOR version when you make incompatible API/ABI changes, +* MINOR version when you add functionality in a backwards compatible manner, and +* PATCH version when you make backwards compatible bug fixes. + +## [Unreleased] + +## [1.21 2025-05-28] + +* [BUILD] Remove WITH_ABSEIL + [#3318](https://github.com/open-telemetry/opentelemetry-cpp/pull/3318) + +* [INSTALL] Add CMake components to the opentelemetry-cpp package + [#3320](https://github.com/open-telemetry/opentelemetry-cpp/pull/3220) + +* [CI] Harden GitHub Actions + [#3338](https://github.com/open-telemetry/opentelemetry-cpp/pull/3338) + +* [StepSecurity] Harden GibHub Actions, part 2 + [#3340](https://github.com/open-telemetry/opentelemetry-cpp/pull/3340) + +* Bump github/codeql-action from 3.28.12 to 3.28.13 + [#3341](https://github.com/open-telemetry/opentelemetry-cpp/pull/3341) + +* [DEVCONTAINER] expose cmake version setting as docker arg and environment variable + [#3347](https://github.com/open-telemetry/opentelemetry-cpp/pull/3347) + +* [CI] disable bzip2 in conan builds + [#3352](https://github.com/open-telemetry/opentelemetry-cpp/pull/3352) + +* [SEMANTIC CONVENTIONS] Upgrade semantic conventions to 1.32.0 + [#3351](https://github.com/open-telemetry/opentelemetry-cpp/pull/3351) + +* Bump github/codeql-action from 3.28.13 to 3.28.15 + [#3353](https://github.com/open-telemetry/opentelemetry-cpp/pull/3353) + +* [CMAKE] bump cmake minimum required version to 3.14 + [#3349](https://github.com/open-telemetry/opentelemetry-cpp/pull/3349) + +* Bump codecov/codecov-action from 5.4.0 to 5.4.2 + [#3362](https://github.com/open-telemetry/opentelemetry-cpp/pull/3362) + +* [DOC] Fix documentation tags in logger API + [#3371](https://github.com/open-telemetry/opentelemetry-cpp/pull/3371) + +* [CI] fix artifacts download/upload + [#3369](https://github.com/open-telemetry/opentelemetry-cpp/pull/3369) + +* [API] Add Enabled method to Tracer + [#3357](https://github.com/open-telemetry/opentelemetry-cpp/pull/3357) + +* [BUILD] Fixes warnings of ciso646 in C++17 + [#3360](https://github.com/open-telemetry/opentelemetry-cpp/pull/3360) + +* Bump github/codeql-action from 3.28.15 to 3.28.16 + [#3377](https://github.com/open-telemetry/opentelemetry-cpp/pull/3377) + +* Bump step-security/harden-runner from 2.11.1 to 2.12.0 + [#3373](https://github.com/open-telemetry/opentelemetry-cpp/pull/3373) + +* Bump docker/build-push-action from 6.15.0 to 6.16.0 + [#3382](https://github.com/open-telemetry/opentelemetry-cpp/pull/3382) + +* Bump actions/download-artifact from 4.2.1 to 4.3.0 + [#3381](https://github.com/open-telemetry/opentelemetry-cpp/pull/3381) + +* [CI] Harden Github actions - pinned-dependencies (part -1) + [#3380](https://github.com/open-telemetry/opentelemetry-cpp/pull/3380) + +* [StepSecurity] ci: Harden GitHub Actions + [#3378](https://github.com/open-telemetry/opentelemetry-cpp/pull/3378) + +* [SDK] Base2 exponential histogram aggregation + [#3346](https://github.com/open-telemetry/opentelemetry-cpp/pull/3346) + +* [StepSecurity] ci: Harden GitHub Actions + [#3379](https://github.com/open-telemetry/opentelemetry-cpp/pull/3379) + +* [BUILD] Fixes glibc++ 5 checking + [#3355](https://github.com/open-telemetry/opentelemetry-cpp/pull/3355) + +* [TEST] Add stress test for histogram metric for multiple threads validation + [#3388](https://github.com/open-telemetry/opentelemetry-cpp/pull/3388) + +* Bump github/codeql-action from 3.28.16 to 3.28.17 + [#3389](https://github.com/open-telemetry/opentelemetry-cpp/pull/3389) + +* [SDK] Optimize PeriodicExportingMetricReader Thread Usage + [#3383](https://github.com/open-telemetry/opentelemetry-cpp/pull/3383) + +* [Metrics SDK] Use nostd::function_ref in AttributesHashMap + [#3393](https://github.com/open-telemetry/opentelemetry-cpp/pull/3393) + +* [SDK] support aggregation of identical instruments + [#3358](https://github.com/open-telemetry/opentelemetry-cpp/pull/3358) + +* [BUILD] Fixes unused var + [#3397](https://github.com/open-telemetry/opentelemetry-cpp/pull/3397) + +* [INSTALL] Unify cmake install functions and dynamically set component dependencies + [#3368](https://github.com/open-telemetry/opentelemetry-cpp/pull/3368) + +* [BUILD] Upgrade nlohmann_json to 3.12.0 + [#3406](https://github.com/open-telemetry/opentelemetry-cpp/pull/3406) + +* [BUILD] Upgrade opentelemetry-proto to 1.6.0 + [#3407](https://github.com/open-telemetry/opentelemetry-cpp/pull/3407) + +* [CMAKE] add generated protobuf headers to the opentelemetry_proto target + [#3400](https://github.com/open-telemetry/opentelemetry-cpp/pull/3400) + +* [MERGE] Fix accidental rollback of nlohmann-json submodule + [#3415](https://github.com/open-telemetry/opentelemetry-cpp/pull/3415) + +* Bump fossas/fossa-action from 1.6.0 to 1.7.0 + [#3414](https://github.com/open-telemetry/opentelemetry-cpp/pull/3414) + +* Bump docker/build-push-action from 6.16.0 to 6.17.0 + [#3420](https://github.com/open-telemetry/opentelemetry-cpp/pull/3420) + +* Bump codecov/codecov-action from 5.4.2 to 5.4.3 + [#3419](https://github.com/open-telemetry/opentelemetry-cpp/pull/3419) + +* [SEMANTIC CONVENTIONS] Upgrade semantic conventions to 1.33 + [#3416](https://github.com/open-telemetry/opentelemetry-cpp/pull/3416) + +* [DOCS] update the INSTALL guide on cmake components + [#3422](https://github.com/open-telemetry/opentelemetry-cpp/pull/3422) + +* Bump github/codeql-action from 3.28.17 to 3.28.18 + [#3423](https://github.com/open-telemetry/opentelemetry-cpp/pull/3423) + +* [CMAKE] update cmake files in examples directory + [#3421](https://github.com/open-telemetry/opentelemetry-cpp/pull/3421) + +* [SDK] Fix Base2ExponentialHistogramAggregation Merge with empty buckets + [#3425](https://github.com/open-telemetry/opentelemetry-cpp/pull/3425) + +* [SDK] Fix MetricProducer interface + [#3413](https://github.com/open-telemetry/opentelemetry-cpp/pull/3413) + +* [CMAKE] remove global include_directories usage and rely on target properties + [#3426](https://github.com/open-telemetry/opentelemetry-cpp/pull/3426) + +* [BUILD] remove unused WITH_CURL build flag + [#3429](https://github.com/open-telemetry/opentelemetry-cpp/pull/3429) + +* [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.34.0 + [#3428](https://github.com/open-telemetry/opentelemetry-cpp/pull/3428) + +* [EXPORTER] ostream log exporter, fix memory ownership issues + [#3417](https://github.com/open-telemetry/opentelemetry-cpp/pull/3417) + +* [TEST] add all components to the cmake fetch content test + [#3433](https://github.com/open-telemetry/opentelemetry-cpp/pull/3433) + +* [BUILD] Error out when building DLL without MSVC + [#3438](https://github.com/open-telemetry/opentelemetry-cpp/pull/3438) + +* [BUILD] Add missing CMake keyword for target_link_libraries + [#3442](https://github.com/open-telemetry/opentelemetry-cpp/pull/3442) + +* [CMAKE] Remove third-party version mismatch warning + [#3432](https://github.com/open-telemetry/opentelemetry-cpp/pull/3432) + +* Bump docker/build-push-action from 6.17.0 to 6.18.0 + [#3446](https://github.com/open-telemetry/opentelemetry-cpp/pull/3446) + +* [SEMANTIC CONVENTIONS] Fix comment style to preserve markup. + [#3444](https://github.com/open-telemetry/opentelemetry-cpp/pull/3444) + +* [EXPORTER] support unix sockets in grpc client + [#3410](https://github.com/open-telemetry/opentelemetry-cpp/pull/3410) + +* [BUILD] Propagate INTERFACE_COMPILE_DEFINITIONS from API through common_foo_library + [#3440](https://github.com/open-telemetry/opentelemetry-cpp/pull/3440) + +New Features: + +* [SDK] Base2 exponential histogram aggregation + [#3346](https://github.com/open-telemetry/opentelemetry-cpp/pull/3346) + + * Add base2 exponential histogram aggregation. Includes a new aggregation type, + ostream exporter, and otlp/grpc exporter. Updated histogram aggregation and + benchmark tests. + +Important changes: + +* [EXPORTER] ostream log exporter, fixed memory ownership issues + [#3417](https://github.com/open-telemetry/opentelemetry-cpp/pull/3417) + + * In the SDK, the following classes implementation has changed: + + * opentelemetry::sdk::logs::ReadableLogRecord + * opentelemetry::sdk::logs::ReadWriteLogRecord + + * An application implementing a custom log record exporter, + that reuses these classes from the opentelemetry-cpp SDK, + will need code adjustments, in particular for methods: + + * GetBody() + * GetAttributes() + + * Applications not using these SDK classes directly are not affected. + +* [BUILD] Remove WITH_ABSEIL + [#3318](https://github.com/open-telemetry/opentelemetry-cpp/pull/3318) + + * The build option `WITH_ABSEIL` is no longer used, and opentelemetry-cpp + will no longer use any release of abseil provided externally, + for its own use. + + * Instead, opentelemetry-cpp will only use an internal abseil version. + + * This change resolves long standing binary integrity issues, + that occurred in the past when mixing several versions of abseil + in the build. + +## [1.20 2025-04-01] + +* [BUILD] Update opentelemetry-proto version + [#3254](https://github.com/open-telemetry/opentelemetry-cpp/pull/3254) + +* [BUILD] Build break with CURL 7.29.0 + [#3255](https://github.com/open-telemetry/opentelemetry-cpp/pull/3255) + +* [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.30.0 + [#3258](https://github.com/open-telemetry/opentelemetry-cpp/pull/3258) + +* [SDK] Add tracer scope configurator + [#3137](https://github.com/open-telemetry/opentelemetry-cpp/pull/3137) + +* [DOC] Add document and example for sharing gRPC Client + [#3260](https://github.com/open-telemetry/opentelemetry-cpp/pull/3260) + +* [SDK] Fix BatchLogRecordProcessor to instrument shutdown + [#3262](https://github.com/open-telemetry/opentelemetry-cpp/pull/3262) + +* [SDK] Support OTEL_SDK_DISABLED environment variable + [#3245](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245) + +* [CI] OTLP in Windows builds + [#3263](https://github.com/open-telemetry/opentelemetry-cpp/pull/3263) + +* [BUILD] Fixes compatibility of type_traits + [#3274](https://github.com/open-telemetry/opentelemetry-cpp/pull/3274) + +* [BUILD] Fix compilation with Regex being disabled + [#3276](https://github.com/open-telemetry/opentelemetry-cpp/pull/3276) + +* [EXPORTER] Support exporting event_name using OTLP Exporter + [#3277](https://github.com/open-telemetry/opentelemetry-cpp/pull/3277) + +* [CI] Add FOSSA scanning workflow + [#3279](https://github.com/open-telemetry/opentelemetry-cpp/pull/3279) + +* [BUILD] Adding typecast without whom c++latest build fails + [#3281](https://github.com/open-telemetry/opentelemetry-cpp/pull/3281) + +* [ADMIN] Add FOSSA badges + [#3280](https://github.com/open-telemetry/opentelemetry-cpp/pull/3280) + +* [BUILD] Fix compiling problems with abiv2 and MSVC + [#3284](https://github.com/open-telemetry/opentelemetry-cpp/pull/3284) + +* [BUILD] Enable old behavior of CMP0092 + [#3269](https://github.com/open-telemetry/opentelemetry-cpp/pull/3269) + +* [SDK] Add meter scope configurator + [#3268](https://github.com/open-telemetry/opentelemetry-cpp/pull/3268) + +* [DEVCONTAINER] Support customization and run as non-root user + [#3270](https://github.com/open-telemetry/opentelemetry-cpp/pull/3270) + +* [ETW] Add configuration to export 64-bit integer as timestamp + [#3286](https://github.com/open-telemetry/opentelemetry-cpp/pull/3286) + +* [API] Deprecate event logger + [#3285](https://github.com/open-telemetry/opentelemetry-cpp/pull/3285) + +* [BUILD] Add link directory to support curl 8.12 + [#3272](https://github.com/open-telemetry/opentelemetry-cpp/pull/3272) + +* [API] Change the param-pack unpacking order to start from left to right + [#3296](https://github.com/open-telemetry/opentelemetry-cpp/pull/3296) + +* [SDK] Implement spec: MetricFilter + [#3235](https://github.com/open-telemetry/opentelemetry-cpp/pull/3235) + +* [SEMANTIC CONVENTIONS] Upgrade semantic conventions to 1.31.0 + [#3297](https://github.com/open-telemetry/opentelemetry-cpp/pull/3297) + +* [SDK] Add logger scope configurator + [#3282](https://github.com/open-telemetry/opentelemetry-cpp/pull/3282) + +* [EXAMPLE] fix buffer overrun in the gRPC sample project + [#3304](https://github.com/open-telemetry/opentelemetry-cpp/pull/3304) + +* [CI] Bump fossas/fossa-action from 1.5.0 to 1.6.0 + [#3305](https://github.com/open-telemetry/opentelemetry-cpp/pull/3305) + +* [TEST] fix segfault in singleton test with cmake on macos-latest + [#3316](https://github.com/open-telemetry/opentelemetry-cpp/pull/3316) + +* [TEST] fix test failure with elasticsearch exporter on cxx20 + [#3308](https://github.com/open-telemetry/opentelemetry-cpp/pull/3308) + +* [TEST] otlp grpc exporter retry test fix + [#3311](https://github.com/open-telemetry/opentelemetry-cpp/pull/3311) + +* [SDK] Use OPENTELEMETRY_EXPORT and static local variables + [#3314](https://github.com/open-telemetry/opentelemetry-cpp/pull/3314) + +* [BUILD] Fix elasticsearch exporter json compatibility + [#3313](https://github.com/open-telemetry/opentelemetry-cpp/pull/3313) + +* [BUILD] Fix missing exported definition for OTLP file exporter and forceflush + [#3319](https://github.com/open-telemetry/opentelemetry-cpp/pull/3319) + +* [BUILD] Remove gRPC header including in OtlpGrpcClientFactory + [#3321](https://github.com/open-telemetry/opentelemetry-cpp/pull/3321) + +* [ADMIN] Add Pranav Sharma in cpp-approvers + [#3323](https://github.com/open-telemetry/opentelemetry-cpp/pull/3323) + +* [DEVCONTAINER] fix grpc install + [#3325](https://github.com/open-telemetry/opentelemetry-cpp/pull/3325) + +* [ADMIN] Add dbarker to approvers + [#3331](https://github.com/open-telemetry/opentelemetry-cpp/pull/3331) + +* [CI] Upgrade CI to ubuntu 22.04 + [#3330](https://github.com/open-telemetry/opentelemetry-cpp/pull/3330) + +* [CI] Add ossf-scorecard scanning workflow + [#3332](https://github.com/open-telemetry/opentelemetry-cpp/pull/3332) + +* [CI] pin cmake in ci and devcontainer + [#3336](https://github.com/open-telemetry/opentelemetry-cpp/pull/3336) + +* [METRICS SDK] Fix hash collision in MetricAttributes + [#3322](https://github.com/open-telemetry/opentelemetry-cpp/pull/3322) + +Important changes: + +* [SDK] Support OTEL_SDK_DISABLED environment variable + [#3245](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245) + + * The SDK now exposes the following new methods: + + * opentelemetry::sdk::trace::Provider::SetTracerProvider() + * opentelemetry::sdk::metrics::Provider::SetMeterProvider() + * opentelemetry::sdk::logs::Provider::SetLoggerProvider() + + * These methods do support the `OTEL_SDK_DISABLED` environment variable, + unlike the corresponding existing API Provider classes. + + * Applications are encouraged to migrate from the API to the SDK + `Provider` classes, to benefit from this feature. + + * All the example code has been updated to reflect the new usage. + +## [1.19 2025-01-22] + +* [PROMETHEUS_EXPORTER] Fix default for emitting otel_scope attributes + [#3171](https://github.com/open-telemetry/opentelemetry-cpp/pull/3171) + +* [Code health] Include what you use cleanup, part 5 + [#3140](https://github.com/open-telemetry/opentelemetry-cpp/pull/3140) + +* [BUILD] Upgrade cmake + [#3167](https://github.com/open-telemetry/opentelemetry-cpp/pull/3167) + +* [SHIM] Fix string_view mappings between OT and OTel + [#3181](https://github.com/open-telemetry/opentelemetry-cpp/pull/3181) + +* [EXPORTER] Refactor ElasticSearchRecordable + [#3164](https://github.com/open-telemetry/opentelemetry-cpp/pull/3164) + +* [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.29.0 + [#3182](https://github.com/open-telemetry/opentelemetry-cpp/pull/3182) + +* [BUILD] Fix cross-compilation with protoc + [#3186](https://github.com/open-telemetry/opentelemetry-cpp/pull/3186) + +* [Code health] Perform cppcheck cleanup + [#3150](https://github.com/open-telemetry/opentelemetry-cpp/pull/3150) + +* [EXPORTER] add instrumentation scope attributes + to otlp proto messages for traces and metrics + [#3185](https://github.com/open-telemetry/opentelemetry-cpp/pull/3185) + +* [SDK] Tracer provider shutdown blocks in-definitively + [#3191](https://github.com/open-telemetry/opentelemetry-cpp/pull/3191) + +* [SEMANTIC CONVENTIONS] Upgrade to weaver 0.11.0 + [#3194](https://github.com/open-telemetry/opentelemetry-cpp/pull/3194) + +* [DOC] Update existing maintaining dependencies doc + [#3195](https://github.com/open-telemetry/opentelemetry-cpp/pull/3195) + +* [TEST] Change is_called_ and got_response_ to use atomic + [#3204](https://github.com/open-telemetry/opentelemetry-cpp/pull/3204) + +* [SEMANTIC CONVENTIONS] update links to openmetrics to reference the v1.0.0 release + [#3205](https://github.com/open-telemetry/opentelemetry-cpp/pull/3205) + +* [CI] Fix CI on ubuntu-latest + [#3207](https://github.com/open-telemetry/opentelemetry-cpp/pull/3207) + +* [BUILD] Build break using protoc 3.14 + [#3211](https://github.com/open-telemetry/opentelemetry-cpp/pull/3211) + +* [TEST] Build the singleton test on windows + [#3183](https://github.com/open-telemetry/opentelemetry-cpp/pull/3183) + +* [BUILD] Add cxx feature detections + [#3203](https://github.com/open-telemetry/opentelemetry-cpp/pull/3203) + +* [SDK] Do not frequently create and destroy http client threads + [#3198](https://github.com/open-telemetry/opentelemetry-cpp/pull/3198) + +* [EXPORTER] Optimize OTLP HTTP compression + [#3178](https://github.com/open-telemetry/opentelemetry-cpp/pull/3178) + +* [SDK] Fix include instrumentation scope attributes in equal method + [#3214](https://github.com/open-telemetry/opentelemetry-cpp/pull/3214) + +* Upgrade to opentelemetry-proto 1.5.0 + [#3210](https://github.com/open-telemetry/opentelemetry-cpp/pull/3210) + +* [TEST] Added support for SELINUX in functional tests + [#3212](https://github.com/open-telemetry/opentelemetry-cpp/pull/3212) + +* [EDITORIAL] fix changelog entry for PR 3185 + [#3217](https://github.com/open-telemetry/opentelemetry-cpp/pull/3217) + +* [TEST] Functional tests for OTLP/gRPC with mutual TLS + [#3227](https://github.com/open-telemetry/opentelemetry-cpp/pull/3227) + +* [SEMCONV] Metrics are incorrectly prefixed with 'metric' + [#3228](https://github.com/open-telemetry/opentelemetry-cpp/pull/3228) + +* [BUILD] Add OTLP/file exporter for dll and examples + [#3231](https://github.com/open-telemetry/opentelemetry-cpp/pull/3231) + +* [Code Health] Include what you use, part 6 + [#3216](https://github.com/open-telemetry/opentelemetry-cpp/pull/3216) + +* [CI] Spurious test failures + [#3233](https://github.com/open-telemetry/opentelemetry-cpp/pull/3233) + +* [BUILD] Fix error ‘uint8_t’ does not name a type with gcc-15 + [#3240](https://github.com/open-telemetry/opentelemetry-cpp/pull/3240) + +* [EXPORTER] fix throw in OtlpGrpcMetricExporter with shared grpc client + [#3243](https://github.com/open-telemetry/opentelemetry-cpp/pull/3243) + +* [SDK] Better control of threads executed by opentelemetry-cpp + [#3175](https://github.com/open-telemetry/opentelemetry-cpp/pull/3175) + +* [Code Health] Include what you use, part 7 + [#3238](https://github.com/open-telemetry/opentelemetry-cpp/pull/3238) + +* [SDK] Fix lifetime of GlobalLogHandler + [#3221](https://github.com/open-telemetry/opentelemetry-cpp/pull/3221) + +* [MAINTAINER] Add devcontainer + [#3123](https://github.com/open-telemetry/opentelemetry-cpp/pull/3123) + +* [SDK] enable deriving from ResourceDetector to create a Resource + [#3247](https://github.com/open-telemetry/opentelemetry-cpp/pull/3247) + +* [EXPORTER] Support handling retry-able errors for OTLP/HTTP + [#3223](https://github.com/open-telemetry/opentelemetry-cpp/pull/3223) + +* [CI] Add GRPC in maintainer CI + [#3248](https://github.com/open-telemetry/opentelemetry-cpp/pull/3248) + +* [EXPORTER] Support handling retry-able errors for OTLP/gRPC + [#3219](https://github.com/open-telemetry/opentelemetry-cpp/pull/3219) + +* [SDK] Optimize Metric Processing for Single Collector with Delta Temporality + [#3236](https://github.com/open-telemetry/opentelemetry-cpp/pull/3236) + +New features: + +* [SDK] Better control of threads executed by opentelemetry-cpp + [#3175](https://github.com/open-telemetry/opentelemetry-cpp/pull/3175) + + * This feature provides a way for applications, + when configuring the SDK and exporters, + to participate in the execution path + of internal opentelemetry-cpp threads. + + * The opentelemetry-cpp library provides the following: + + * a new ThreadInstrumentation interface, + * new runtime options structures, to optionally configure the SDK: + * BatchSpanProcessorRuntimeOptions + * PeriodicExportingMetricReaderRuntimeOptions + * BatchLogRecordProcessorRuntimeOptions + * new runtime options structures, + to optionally configure the OTLP HTTP exporters: + * OtlpHttpExporterRuntimeOptions + * OtlpHttpMetricExporterRuntimeOptions + * OtlpHttpLogRecordExporterRuntimeOptions + * new ThreadInstrumentation parameters, + to optionally configure the CURL HttpClient + * new runtime options structures, + to optionally configure the OTLP FILE exporters: + * OtlpFileExporterRuntimeOptions + * OtlpFileMetricExporterRuntimeOptions + * OtlpFileLogRecordExporterRuntimeOptions + * new runtime options structure, + to optionally configure the OTLP FILE client: + * OtlpFileClientRuntimeOptions + + * Using the optional runtime options structures, + an application can subclass the ThreadInstrumentation interface, + and be notified of specific events of interest during the execution + of an internal opentelemetry-cpp thread. + + * This allows an application to call, for example: + + * pthread_setaffinity_np(), for better performances, + * setns(), to control the network namespace used by HTTP CURL connections + * pthread_setname_np(), for better observability from the operating system + * many more specific apis, as needed + + * See the documentation for ThreadInstrumentation for details. + + * A new example program, example_otlp_instrumented_http, + shows how to use the feature, + and add application logic in the thread execution code path. + + * Note that this feature is experimental, + protected by a WITH_THREAD_INSTRUMENTATION_PREVIEW + flag in CMake. Various runtime options structures, + as well as the thread instrumentation interface, + may change without notice before this feature is declared stable. + +* [EXPORTER] Support handling retry-able errors for OTLP/HTTP + [#3223](https://github.com/open-telemetry/opentelemetry-cpp/pull/3223) + + * This feature is experimental, + protected by a WITH_OTLP_RETRY_PREVIEW + flag in CMake. + +* [EXPORTER] Support handling retry-able errors for OTLP/gRPC + [#3219](https://github.com/open-telemetry/opentelemetry-cpp/pull/3219) + + * This feature is experimental, + protected by a WITH_OTLP_RETRY_PREVIEW + flag in CMake. + +## [1.18 2024-11-25] + +* [EXPORTER] Fix crash in ElasticsearchLogRecordExporter + [#3082](https://github.com/open-telemetry/opentelemetry-cpp/pull/3082) + +* [BUILD] Avoid buggy warning with gcc <= 8 + [#3087](https://github.com/open-telemetry/opentelemetry-cpp/pull/3087) + +* [API] Jaeger Propagator should not be deprecated + [#3086](https://github.com/open-telemetry/opentelemetry-cpp/pull/3086) + +* Update bzlmod version + [#3093](https://github.com/open-telemetry/opentelemetry-cpp/pull/3093) + +* [BUILD] Remove std::make_unique + [#3098](https://github.com/open-telemetry/opentelemetry-cpp/pull/3098) + +* [BUILD] Fix compiling problems for gcc 4.8 + [#3100](https://github.com/open-telemetry/opentelemetry-cpp/pull/3100) + +* [TEST] Fix linking order and gmock linking + [#3106](https://github.com/open-telemetry/opentelemetry-cpp/pull/3106) + +* [EXPORTER] Add config options to prometheus exporter + [#3104](https://github.com/open-telemetry/opentelemetry-cpp/pull/3104) + +* [BUILD] Add a CMake option to disable shared libs + [#3095](https://github.com/open-telemetry/opentelemetry-cpp/pull/3095) + +* [EXPORTER] Remove out of date ETW exporter doc + [#3103](https://github.com/open-telemetry/opentelemetry-cpp/pull/3103) + +* [EXPORTER] Add logging for async gRPC errors + [#3108](https://github.com/open-telemetry/opentelemetry-cpp/pull/3108) + +* [BUILD] Remove aligned_storage from nostd + [#3112](https://github.com/open-telemetry/opentelemetry-cpp/pull/3112) + +* [EXPORTER] Elastic Search exporter follow ECS guidelines + [#3107](https://github.com/open-telemetry/opentelemetry-cpp/pull/3107) + +* [INSTALL] Resolve dependencies in opentelemetry-cpp-config.cmake + [#3094](https://github.com/open-telemetry/opentelemetry-cpp/pull/3094) + +* [API] Add synchronous gauge + [#3029](https://github.com/open-telemetry/opentelemetry-cpp/pull/3029) + +* [BUILD] allow building with -DWITH_OTLP_HTTP_COMPRESSION=OFF without zlib + [#3120](https://github.com/open-telemetry/opentelemetry-cpp/pull/3120) + +* [CI] Comment the arm64 CI + [#3125](https://github.com/open-telemetry/opentelemetry-cpp/pull/3125) + +* [API] Comply with W3C Trace Context + [#3115](https://github.com/open-telemetry/opentelemetry-cpp/pull/3115) + +* [EXPORTER] bump prometheus to v1.3.0 + [#3122](https://github.com/open-telemetry/opentelemetry-cpp/pull/3122) + +* [EXPORTER] Log SSL Connection Information + [#3113](https://github.com/open-telemetry/opentelemetry-cpp/pull/3113) + +* [BUILD] Improve how to handle yield() in ARM + [#3129](https://github.com/open-telemetry/opentelemetry-cpp/pull/3129) + +* [BUILD] Fix -Wmissing-template-arg-list-after-template-kw warning + [#3133](https://github.com/open-telemetry/opentelemetry-cpp/pull/3133) + +* [EXPORTER]: Elasticsearch exporter put log resource in root instead of under 'resources' + [#3131](https://github.com/open-telemetry/opentelemetry-cpp/pull/3131) + +* [TEST] Rename w3c_tracecontext_test to w3c_tracecontext_http_test_server + [#3132](https://github.com/open-telemetry/opentelemetry-cpp/pull/3132) + +* [BUILD] Patches for building on AIX + [#3127](https://github.com/open-telemetry/opentelemetry-cpp/pull/3127) + +* [SEMANTIC CONVENTIONS] Migration to weaver + [#3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + +* [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.28.0 + [#3139](https://github.com/open-telemetry/opentelemetry-cpp/pull/3139) + +* [EXPORTER] handling of invalid ports in UrlParser + [#3142](https://github.com/open-telemetry/opentelemetry-cpp/pull/3142) + +* [CI] speed up clang-tidy workflow + [#3148](https://github.com/open-telemetry/opentelemetry-cpp/pull/3148) + +* [EXPORTER] Allow to share gRPC clients between OTLP exporters + [#3041](https://github.com/open-telemetry/opentelemetry-cpp/pull/3041) + +* Bump codecov/codecov-action from 4 to 5 + [#3143](https://github.com/open-telemetry/opentelemetry-cpp/pull/3143) + +* [CI] Add cppcheck in the build + [#3151](https://github.com/open-telemetry/opentelemetry-cpp/pull/3151) + +* [BUILD] Fix error message + [#3152](https://github.com/open-telemetry/opentelemetry-cpp/pull/3152) + +* [EXPORTER] fix clang-tidy warnings in UrlParser + [#3146](https://github.com/open-telemetry/opentelemetry-cpp/pull/3146) + +* [EXPORTER] Upgrade to opentelemetry-proto 1.4.0 + [#3157](https://github.com/open-telemetry/opentelemetry-cpp/pull/3157) + +* [TEST] refactor UrlParser tests to use value-paramterized tests + [#3153](https://github.com/open-telemetry/opentelemetry-cpp/pull/3153) + +* [TEST] add a test for ElasticSearchRecordable + [#3154](https://github.com/open-telemetry/opentelemetry-cpp/pull/3154) + +* [BUILD] Fix missing dependency on protoc compiler + [#3159](https://github.com/open-telemetry/opentelemetry-cpp/pull/3159) + +* [bazel] Update prometheus-cpp in MODULE.bazel + [#3162](https://github.com/open-telemetry/opentelemetry-cpp/pull/3162) + +* [bazel] Enable --incompatible_disallow_empty_glob + [#2642](https://github.com/open-telemetry/opentelemetry-cpp/pull/2642) + +* [INSTALL] Fix cmake/opentelemetry-cpp-config.cmake.in + [#3165](https://github.com/open-telemetry/opentelemetry-cpp/pull/3165) + +* [BUILD] Do not set OTELCPP_PROTO_PATH in the CMake cache + [#3160](https://github.com/open-telemetry/opentelemetry-cpp/pull/3160) + +* [BUILD] Fix build for esp32 + [#3155](https://github.com/open-telemetry/opentelemetry-cpp/pull/3155) + +* [bazel] Update opentelemetry-proto in MODULE.bazel + [#3163](https://github.com/open-telemetry/opentelemetry-cpp/pull/3163) + +Important changes: + +* [API] Jaeger Propagator should not be deprecated + [#3086](https://github.com/open-telemetry/opentelemetry-cpp/pull/3086) + + * Deprecation of the Jaeger propagator, as announced on 2023-01-31 + in version 1.8.2, is now reverted. + * This deprecation turned out to be not justified, + as the Jaeger propagator can be used without the (now removed) + Jaeger exporter. + +* [EXPORTER] Change log resources location for ElasticsearchLogRecordExporter + [#3119](https://github.com/open-telemetry/opentelemetry-cpp/pull/3131) + + * Moved from `root/resources` to `root` + +* [SEMANTIC CONVENTIONS] Migration to weaver + [#3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + + * `semantic_convention.h` header files are deprecated, + replaced by `semconv/xxx_attributes.h` header files, + for each `xxx` semantic attribute group. + * See file DEPRECATED.md for details. + +Deprecations: + +* This release contains deprecations, see file DEPRECATED.md for details. + +## [1.17 2024-10-07] + +* [CI] Add a clang-tidy build + [#3001](https://github.com/open-telemetry/opentelemetry-cpp/pull/3001) + +* [BUILD] Upgrade to opentelemetry-proto 1.3.2 + [#2991](https://github.com/open-telemetry/opentelemetry-cpp/pull/2991) + +* [REMOVAL] Remove build option `WITH_DEPRECATED_SDK_FACTORY` + [#2717](https://github.com/open-telemetry/opentelemetry-cpp/pull/2717) + +* [EXPORTER] ForceFlush before canceling the running requests on shutdown + [#2727](https://github.com/open-telemetry/opentelemetry-cpp/pull/2727) + +* [SDK] Fix crash in PeriodicExportingMetricReader + [#2983](https://github.com/open-telemetry/opentelemetry-cpp/pull/2983) + +* [SDK] Fix memory leak in TlsRandomNumberGenerator() constructor + [#2661](https://github.com/open-telemetry/opentelemetry-cpp/pull/2661) + +* [EXPORTER] Ignore exception when create thread in OTLP file exporter + [#3012](https://github.com/open-telemetry/opentelemetry-cpp/pull/3012) + +* [BUILD] Update the version in MODULE.bazel + [#3015](https://github.com/open-telemetry/opentelemetry-cpp/pull/3015) + +* [BUILD] Fix build without vcpkg on Windows when gRPC is disabled + [#3016](https://github.com/open-telemetry/opentelemetry-cpp/pull/3016) + +* [BUILD] Add abi_version_no bazel flag + [#3020](https://github.com/open-telemetry/opentelemetry-cpp/pull/3020) + +* [Code health] Expand iwyu coverage to include unit tests + [#3022](https://github.com/open-telemetry/opentelemetry-cpp/pull/3022) + +* [BUILD] Version opentelemetry_proto/proto_grpc shared libraries + [#2992](https://github.com/open-telemetry/opentelemetry-cpp/pull/2992) + +* [SEMANTIC CONVENTIONS] Upgrade semantic conventions to 1.27.0 + [#3023](https://github.com/open-telemetry/opentelemetry-cpp/pull/3023) + +* [SDK] Support empty histogram buckets + [#3027](https://github.com/open-telemetry/opentelemetry-cpp/pull/3027) + +* [TEST] Fix sync problems in OTLP File exporter tests + [#3031](https://github.com/open-telemetry/opentelemetry-cpp/pull/3031) + +* [SDK] PeriodicExportingMetricReader: future is never set, blocks until timeout + [#3030](https://github.com/open-telemetry/opentelemetry-cpp/pull/3030) + +* [Code Health] Clang Tidy cleanup, Part 2 + [#3038](https://github.com/open-telemetry/opentelemetry-cpp/pull/3038) + +* [Code Health] include-what-you-use cleanup, part 3 + [#3004](https://github.com/open-telemetry/opentelemetry-cpp/pull/3004) + +* [SDK] Fix overflow in timeout logic + [#3046](https://github.com/open-telemetry/opentelemetry-cpp/pull/3046) + +* [TEST] Add missing tests to Bazel build + [#3045](https://github.com/open-telemetry/opentelemetry-cpp/pull/3045) + +* [TEST] update collector tests with debug exporter + [#3050](https://github.com/open-telemetry/opentelemetry-cpp/pull/3050) + +* [EXAMPLE] update collector example with debug exporter + [#3049](https://github.com/open-telemetry/opentelemetry-cpp/pull/3049) + +* [TEST] update references to logging exporter + [#3053](https://github.com/open-telemetry/opentelemetry-cpp/pull/3053) + +* [EXAMPLE] Clean the tracer initialization in OStream example + [#3051](https://github.com/open-telemetry/opentelemetry-cpp/pull/3051) + +* [EXPORTER] Fix the format of SpanLink for ETW + [#3054](https://github.com/open-telemetry/opentelemetry-cpp/pull/3054) + +* [EXPORTER] Add in-memory metric exporter + [#3043](https://github.com/open-telemetry/opentelemetry-cpp/pull/3043) + +* [Code Health] include-what-you-use cleanup, part 4 + [#3040](https://github.com/open-telemetry/opentelemetry-cpp/pull/3040) + +* [BUILD] add loongarch info + [#3052](https://github.com/open-telemetry/opentelemetry-cpp/pull/3052) + +* [CI] Update otel-collector version + [#3067](https://github.com/open-telemetry/opentelemetry-cpp/pull/3067) + +* [SDK] Update MetricProducer interface to match spec + [#3044](https://github.com/open-telemetry/opentelemetry-cpp/pull/3044) + +* [EXPORTER] Fix URL in ES exporter, fix ipv6 supporting for http client + [#3081](https://github.com/open-telemetry/opentelemetry-cpp/pull/3081) + +* [EXPORTER] Add HttpHeaders in ElasticsearchLogRecordExporter + [#3083](https://github.com/open-telemetry/opentelemetry-cpp/pull/3083) + +Breaking changes: + +* [REMOVAL] Remove build option `WITH_DEPRECATED_SDK_FACTORY` + [#2717](https://github.com/open-telemetry/opentelemetry-cpp/pull/2717) + + * As announced in opentelemetry-cpp previous release 1.16.0, + CMake option `WITH_DEPRECATED_SDK_FACTORY` was temporary, + and to be removed by the next release. + * This option is now removed. + * Code configuring the SDK must be adjusted, as previously described: + + * [API/SDK] Provider cleanup + [#2664](https://github.com/open-telemetry/opentelemetry-cpp/pull/2664) + + * Before this fix: + * SDK factory methods such as: + * opentelemetry::sdk::trace::TracerProviderFactory::Create() + * opentelemetry::sdk::metrics::MeterProviderFactory::Create() + * opentelemetry::sdk::logs::LoggerProviderFactory::Create() + * opentelemetry::sdk::logs::EventLoggerProviderFactory::Create() + + returned an API object (opentelemetry::trace::TracerProvider) + to the caller. + + * After this fix, these methods return an SDK level object + (opentelemetry::sdk::trace::TracerProvider) to the caller. + * Returning an SDK object is necessary for the application to + cleanup and invoke SDK level methods, such as ForceFlush(), + on a provider. + * The application code that configures the SDK, by calling + the various provider factories, may need adjustment. + * All the examples have been updated, and in particular no + longer perform static_cast do convert an API object to an SDK object. + Please refer to examples for guidance on how to adjust. + +## [1.16.1 2024-07-17] + +* [BUILD] Add bazel missing BUILD file + [#2720](https://github.com/open-telemetry/opentelemetry-cpp/pull/2720) + +* [SDK] Added reserve for spans array in BatchSpanProcessor. + [#2724](https://github.com/open-telemetry/opentelemetry-cpp/pull/2724) + +* [DOC] Update "Using triplets" section in building-with-vcpkg documentation. + [#2726](https://github.com/open-telemetry/opentelemetry-cpp/pull/2726) + +* [DOC] Remove comment for unused LoggerProvider initialization params + [#2972](https://github.com/open-telemetry/opentelemetry-cpp/pull/2972) + +* [SECURITY] Remove OTLP HTTP support for TLS 1.0 and TLS 1.1, + require TLS 1.2 or better + [#2722](https://github.com/open-telemetry/opentelemetry-cpp/pull/2722) + +* [TEST] Fix opentelemetry-collector bind address + [#2989](https://github.com/open-telemetry/opentelemetry-cpp/pull/2989) + +* [EXPORTER] Fix references in AttributeValueVisitor + [#2985](https://github.com/open-telemetry/opentelemetry-cpp/pull/2985) + +* [Code health] include-what-you-use cleanup, part 2 + [#2704](https://github.com/open-telemetry/opentelemetry-cpp/pull/2704) + +* [Code Health] clang-tidy cleanup, part 1 + [#2990](https://github.com/open-telemetry/opentelemetry-cpp/pull/2990) + +* [CI] Build failures with ABSEIL 20240116 and CMAKE 3.30 + [#3002](https://github.com/open-telemetry/opentelemetry-cpp/pull/3002) + +* [CI] Enable bzlmod + [#2995](https://github.com/open-telemetry/opentelemetry-cpp/pull/2995) + +* [Metrics SDK] Fix hash calculation for nostd::string + [#2999](https://github.com/open-telemetry/opentelemetry-cpp/pull/2999) + +Breaking changes: + +* [SECURITY] Remove OTLP HTTP support for TLS 1.0 and TLS 1.1, + require TLS 1.2 or better + [#2722](https://github.com/open-telemetry/opentelemetry-cpp/pull/2722) + * The OTLP HTTP exporter no longer accept options like: + * min_TLS = 1.0 + * min_TLS = 1.1 + * max_TLS = 1.0 + * max_TLS = 1.1 + * When connecting to an OTLP HTTP endpoint, using `https`, + the connection will require TLS 1.2 by default, + unless min_TLS is set to 1.3 + * Plain `http` connections (insecure) are not affected. + +## [1.16.0] 2024-06-21 + +* [BUILD] Upgrade bazel abseil from 20220623.1 to 20230802.2 + [#2650](https://github.com/open-telemetry/opentelemetry-cpp/pull/2650) +* [BUILD] Use nostd::enable_if_t instead of std::enable_if_t + [#2648](https://github.com/open-telemetry/opentelemetry-cpp/pull/2648) +* [EXEMPLAR] Update ExemplarFilter and ExemplarReservoir for spec + [#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372) +* [BUILD] Link CoreFoundation on apple systems + [#2655](https://github.com/open-telemetry/opentelemetry-cpp/pull/2655) +* [SDK] Avoid missing conditional variable update and simplify atomic bool + [#2553](https://github.com/open-telemetry/opentelemetry-cpp/pull/2553) +* [BUILD] Build break in OLTP_FILE tests + [#2659](https://github.com/open-telemetry/opentelemetry-cpp/pull/2659) +* [EXPORTER] General cleanup for is_shutdown flags in exporters. + [#2663](https://github.com/open-telemetry/opentelemetry-cpp/pull/2663) +* [CI] Upgrade Maintainers CI to ubuntu-24.04 + [#2670](https://github.com/open-telemetry/opentelemetry-cpp/pull/2670) +* [BUILD] Upgrade to opentelemetry-proto 1.3.1 + [#2669](https://github.com/open-telemetry/opentelemetry-cpp/pull/2669) +* [API] Return NoopLogRecord from NoopLogger + [#2668](https://github.com/open-telemetry/opentelemetry-cpp/pull/2668) +* [BUILD] Remove the hard-coded separator in tracestate + [#2672](https://github.com/open-telemetry/opentelemetry-cpp/pull/2672) +* [SDK] Fix forceflush may wait for ever + [#2584](https://github.com/open-telemetry/opentelemetry-cpp/pull/2584) +* [API] DO not allow unsafe Logger::EmitLogRecord + [#2673](https://github.com/open-telemetry/opentelemetry-cpp/pull/2673) +* [BUILD] Read default proto version from third_party_release + [#2677](https://github.com/open-telemetry/opentelemetry-cpp/pull/2677) +* [CI] include-what-you-use + [#2629](https://github.com/open-telemetry/opentelemetry-cpp/pull/2629) +* [CI] Upgrade to clang-format 18 + [#2684](https://github.com/open-telemetry/opentelemetry-cpp/pull/2684) +* [CI] Fix CI failures on Ubuntu 24.04 + [#2686](https://github.com/open-telemetry/opentelemetry-cpp/pull/2686) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.26.0 + [#2687](https://github.com/open-telemetry/opentelemetry-cpp/pull/2687) +* [API/SDK] Provider cleanup + [#2664](https://github.com/open-telemetry/opentelemetry-cpp/pull/2664) +* [ETW] Add table name mapping for Logs other than the default Log table + [#2691](https://github.com/open-telemetry/opentelemetry-cpp/pull/2691) +* [CI] Remove benchmark overlay for vcpkg + [#2695](https://github.com/open-telemetry/opentelemetry-cpp/pull/2695) +* [BUILD] Remove the incorrect set of CMAKE_MSVC_RUNTIME_LIBRARY for vcpkg + [#2696](https://github.com/open-telemetry/opentelemetry-cpp/pull/2696) +* [BUILD] CMakeLists.txt: Enable CMAKE_MSVC_RUNTIME_LIBRARY support + [#2652](https://github.com/open-telemetry/opentelemetry-cpp/pull/2652) +* [EXPORTER] OTLP file: use thread-safe file/io + [#2675](https://github.com/open-telemetry/opentelemetry-cpp/pull/2675) +* [bazel] Bump version and deps + [#2679](https://github.com/open-telemetry/opentelemetry-cpp/pull/2679) +* [BUILD] Add support for bzlmod + [#2608](https://github.com/open-telemetry/opentelemetry-cpp/pull/2608) +* [BUILD] Fix Import Abseil-cpp + [#2701](https://github.com/open-telemetry/opentelemetry-cpp/pull/2701) +* [Code health] include-what-you-use cleanup + [#2692](https://github.com/open-telemetry/opentelemetry-cpp/pull/2692) +* [BUILD] Restore Bazel flag removed from public API + [#2702](https://github.com/open-telemetry/opentelemetry-cpp/pull/2702) +* [DOC] Fix typo tace_id -> trace_id in logger.h + [#2703](https://github.com/open-telemetry/opentelemetry-cpp/pull/2703) +* Bump docker/build-push-action from 5 to 6 + [#2705](https://github.com/open-telemetry/opentelemetry-cpp/pull/2705) +* [CI] Enable ARM64 build in CI + [#2699](https://github.com/open-telemetry/opentelemetry-cpp/pull/2699) +* [Code health] Remove Unicode Text from Source files + [#2707](https://github.com/open-telemetry/opentelemetry-cpp/pull/2707) +* [BUILD] Add option WITH_OTLP_GRPC_SSL_MTLS_PREVIEW + [#2714](https://github.com/open-telemetry/opentelemetry-cpp/pull/2714) +* [EXPORTER] All 2xx return codes should be considered successful. + [#2712](https://github.com/open-telemetry/opentelemetry-cpp/pull/2712) + +Important changes: + +* [API/SDK] Provider cleanup + [#2664](https://github.com/open-telemetry/opentelemetry-cpp/pull/2664) + * Before this fix: + * The API class `opentelemetry::trace::Tracer` exposed methods such + as `ForceFlush()`, `ForceFlushWithMicroseconds()`, `Close()` + and `CloseWithMicroseconds()`. + * These methods are meant to be used when configuring the SDK, + and should not be part of the API. Exposing them was an oversight. + * Two of these methods are virtual, and therefore part of the ABI. + * After this fix: + * In `OPENTELEMETRY_ABI_VERSION_NO 1`, nothing is changed, + because removing this code would break the ABI. + * In `OPENTELEMETRY_ABI_VERSION_NO 2`, these methods are moved + from the API to the SDK. This is a breaking change for ABI version 2, + which is still experimental. + * In all cases, instrumenting an application should not + invoke flush or close on a tracer, do not use these methods. + +Breaking changes: + +* [API/SDK] Provider cleanup + [#2664](https://github.com/open-telemetry/opentelemetry-cpp/pull/2664) + * Before this fix: + * SDK factory methods such as: + * opentelemetry::sdk::trace::TracerProviderFactory::Create() + * opentelemetry::sdk::metrics::MeterProviderFactory::Create() + * opentelemetry::sdk::logs::LoggerProviderFactory::Create() + * opentelemetry::sdk::logs::EventLoggerProviderFactory::Create() + returned an API object (opentelemetry::trace::TracerProvider) + to the caller. + * After this fix, these methods return an SDK level object + (opentelemetry::sdk::trace::TracerProvider) to the caller. + * Returning an SDK object is necessary for the application to + cleanup and invoke SDK level methods, such as ForceFlush(), + on a provider. + * The application code that configures the SDK, by calling + the various provider factories, may need adjustment. + * All the examples have been updated, and in particular no + longer perform static_cast do convert an API object to an SDK object. + Please refer to examples for guidance on how to adjust. + * If adjusting application code is impractical, + an alternate and temporary solution is to build with option + WITH_DEPRECATED_SDK_FACTORY=ON in CMake. + * Option WITH_DEPRECATED_SDK_FACTORY=ON will allow to build code + without application changes, posponing changes for later. + * WITH_DEPRECATED_SDK_FACTORY=ON is temporary, only to provide + an easier migration path. Expect this flag to be removed, + as early as by the next release. + +Notes on experimental features: + +* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372) + introduced `MeterProvider::SetExemplar()` which accepts en + `ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and + `kTraceBased`. + +## [1.15.0] 2024-04-21 + +* [EXPORTER] Change OTLP HTTP content_type default to binary + [#2564](https://github.com/open-telemetry/opentelemetry-cpp/pull/2564) +* [DOC] Fix OTLP documentation: Default endpoint is wrong for OTLP/HTTP + [#2560](https://github.com/open-telemetry/opentelemetry-cpp/pull/2560) +* [BUILD] Fix old style cast warning + [#2567](https://github.com/open-telemetry/opentelemetry-cpp/pull/2567) +* [EXPORTER] Gzip compression support for OTLP/HTTP and OTLP/gRPC exporter + [#2530](https://github.com/open-telemetry/opentelemetry-cpp/pull/2530) +* [BUILD] update vcpkg submodule to 2024.02.14 + [#2575](https://github.com/open-telemetry/opentelemetry-cpp/pull/2575) +* [SDK] Support for OTEL_SERVICE_NAME + [#2577](https://github.com/open-telemetry/opentelemetry-cpp/pull/2577) +* [EXPORTER] Support URL-encoded values for `OTEL_EXPORTER_OTLP_HEADERS` + [#2579](https://github.com/open-telemetry/opentelemetry-cpp/pull/2579) +* [BUILD] CMake cleanup for message() + [#2582](https://github.com/open-telemetry/opentelemetry-cpp/pull/2582) +* [BUILD] Bump CMake minimum required version to 3.9 + [#2581](https://github.com/open-telemetry/opentelemetry-cpp/pull/2581) +* [BUILD] Provide LIKELY / UNLIKELY macros + [#2580](https://github.com/open-telemetry/opentelemetry-cpp/pull/2580) +* [EXPORTER] OTLP: Fix missing ResourceMetrics SchemaURL + [#2587](https://github.com/open-telemetry/opentelemetry-cpp/pull/2587) +* [ETW] cleanup include path + [#2594](https://github.com/open-telemetry/opentelemetry-cpp/pull/2594) +* Upgrade to googletest 1.14.0 + [#2596](https://github.com/open-telemetry/opentelemetry-cpp/pull/2596) +* Upgrade to nlohmann_json 3.11.3 + [#2595](https://github.com/open-telemetry/opentelemetry-cpp/pull/2595) +* [BAZEL] Move -std=c++14 to .bazelrc + [#2600](https://github.com/open-telemetry/opentelemetry-cpp/pull/2600) +* [BAZEL] Fix -std=c++14 warning on Windows + [#2601](https://github.com/open-telemetry/opentelemetry-cpp/pull/2601) +* Upgrade to benchmark 1.8.3 + [#2597](https://github.com/open-telemetry/opentelemetry-cpp/pull/2597) +* Upgrade to prometheus 1.2.4 + [#2598](https://github.com/open-telemetry/opentelemetry-cpp/pull/2598) +* [DOC] Fix typo: Asynchronouse -> Asynchronous in meter.h + [#2604](https://github.com/open-telemetry/opentelemetry-cpp/pull/2604) +* [BUILD] Do not link prometheus-cpp::util when it doesn't exist + [#2606](https://github.com/open-telemetry/opentelemetry-cpp/pull/2606) +* [SDK] Remove unused variable + [#2609](https://github.com/open-telemetry/opentelemetry-cpp/pull/2609) +* [METRICS SDK] Remove extra OfferMeasurement call + in SyncMetricsStorage::OfferMeasurement + [#2610](https://github.com/open-telemetry/opentelemetry-cpp/pull/2610) +* [MISC] Use set -e on all shell scripts and pass shellcheck --severity=error + [#2616](https://github.com/open-telemetry/opentelemetry-cpp/pull/2616) +* [CI] Add shellcheck --severity=error as a CI step + [#2618](https://github.com/open-telemetry/opentelemetry-cpp/pull/2618) +* [CI] Upgrade to abseil 20240116.1 (CMake only) + [#2599](https://github.com/open-telemetry/opentelemetry-cpp/pull/2599) +* [CI] Benchmark, provide units with --benchmark_min_time + [#2621](https://github.com/open-telemetry/opentelemetry-cpp/pull/2621) +* [EXPORTER] OTLP file exporter + [#2540](https://github.com/open-telemetry/opentelemetry-cpp/pull/2540) +* [CI] Use platform CMake + [#2627](https://github.com/open-telemetry/opentelemetry-cpp/pull/2627) +* [PROTO] Upgrade to opentelemetry-proto 1.2.0 + [#2631](https://github.com/open-telemetry/opentelemetry-cpp/pull/2631) +* [SDK] DefaultLogHandler to print errors to std::cerr, add LogLevel::None + [#2622](https://github.com/open-telemetry/opentelemetry-cpp/pull/2622) +* [SEMANTIC CONVENTIONS] Upgrade to semantic convention 1.25.0 + [#2633](https://github.com/open-telemetry/opentelemetry-cpp/pull/2633) +* [DOC] Add readme and examples for OTLP FILE exporters. + [#2638](https://github.com/open-telemetry/opentelemetry-cpp/pull/2638) +* [SEMANTIC CONVENTIONS] Rework on semantic conventions 1.25.0 + [#2640](https://github.com/open-telemetry/opentelemetry-cpp/pull/2640) +* [DOC] Update INSTALL.md + [#2592](https://github.com/open-telemetry/opentelemetry-cpp/pull/2592) + +Important changes: + +* [EXPORTER] Gzip compression support for OTLP/HTTP and OTLP/gRPC exporter + [#2530](https://github.com/open-telemetry/opentelemetry-cpp/pull/2530) + * In the `OtlpHttpExporterOptions` and `OtlpGrpcExporterOptions`, a new + field called compression has been introduced. This field can be set + to "gzip†to enable gzip compression. + * The CMake option `WITH_OTLP_HTTP_COMPRESSION` is introduced to enable + gzip compression support for the OTLP HTTP Exporter and includes a + dependency on zlib. +* [SDK] Change OTLP HTTP content_type default to binary + [#2558](https://github.com/open-telemetry/opentelemetry-cpp/pull/2558) +* [CI] Use platform CMake + [#2627](https://github.com/open-telemetry/opentelemetry-cpp/pull/2627) + * The `CI` in github no longer install a different version of `cmake`. + * It now always use the `cmake` provided by the platform. + * As part of this change, the script `ci/setup_cmake.sh` was renamed + to `ci/setup_googletest.sh`, for clarity, now that this script + only installs googletest. +* [SDK] DefaultLogHandler to print to std::cerr, add LogLevel::None + [#2622](https://github.com/open-telemetry/opentelemetry-cpp/pull/2622) + * Change DefaultLogHandler output + * Before, the default internal logger, DefaultLogHandler, + used to print to std::cout. + * Now, DefaultLogHandler prints errors and warnings to std::cerr, + as expected, while printing info and debug messages to std::cout. + * Applications that expected to find the opentelemetry-cpp internal + error log in std::cout may need adjustments, either by looking + at std::cerr instead, or by using a custom log handler. + * Additional LogLevel::None + * LogLevel::None is a new supported log level, which does not print + any message. + * Custom log handlers may need to implement a new case, to avoid + compiler warnings. + * Numbering of log levels like OTEL_INTERNAL_LOG_LEVEL_ERROR + has changed, which requires to rebuild, as the SDK ABI differs. + +## [1.14.2] 2024-02-27 + +* [SDK] Fix observable attributes drop + [#2557](https://github.com/open-telemetry/opentelemetry-cpp/pull/2557) + +## [1.14.1] 2024-02-23 + +* [SDK] Restore Recordable API compatibility with versions < 1.14.0 + [#2547](https://github.com/open-telemetry/opentelemetry-cpp/pull/2547) +* [DOC] Add missing CHANGELOG. + [#2549](https://github.com/open-telemetry/opentelemetry-cpp/pull/2549) +* [EXPORTER] Error when grpc endpoint is empty + [#2507](https://github.com/open-telemetry/opentelemetry-cpp/pull/2507) +* [DOC] Fix typo in benchmarks.rst + [#2542](https://github.com/open-telemetry/opentelemetry-cpp/pull/2542) + +Important changes: + +* [SDK] Restore Recordable API compatibility with versions < 1.14.0 + [#2547](https://github.com/open-telemetry/opentelemetry-cpp/pull/2547) + * For third party _extending_ the SDK, release 1.14.0 introduced + an API breaking change compared to 1.13.0 + * This fix restores API (but not ABI) compatibility of + release 1.14.1 with release 1.13.0. + * This allows to build a third party exporter with no source code changes, + for both releases 1.14.1 and 1.13.0. + +## [1.14.0] 2024-02-16 + +* [BUILD] Add DLL build CI pipeline with CXX20 + [#2465](https://github.com/open-telemetry/opentelemetry-cpp/pull/2465) +* [EXPORTER] Set `is_monotonic` flag for Observable Counters + [#2478](https://github.com/open-telemetry/opentelemetry-cpp/pull/2478) +* [PROTO] Upgrade to opentelemetry-proto v1.1.0 + [#2488](https://github.com/open-telemetry/opentelemetry-cpp/pull/2488) +* [BUILD] Introduce CXX 20 CI pipeline for MSVC/Windows + [#2450](https://github.com/open-telemetry/opentelemetry-cpp/pull/2450) +* [API] Propagation: fix for hex conversion to binary for odd hex strings + [#2533](https://github.com/open-telemetry/opentelemetry-cpp/pull/2533) +* [DOC] Fix calendar link + [#2532](https://github.com/open-telemetry/opentelemetry-cpp/pull/2532) +* [ETW EXPORTER] Remove namespace using in ETW exporter which affects global + namespace + [#2531](https://github.com/open-telemetry/opentelemetry-cpp/pull/2531) +* [BUILD] Don't invoke vcpkg from this repo with CMAKE_TOOLCHAIN_FILE set + [#2527](https://github.com/open-telemetry/opentelemetry-cpp/pull/2527) +* [EXPORTER] Async exporting for otlp grpc + [#2407](https://github.com/open-telemetry/opentelemetry-cpp/pull/2407) +* [METRICS SDK] Fix attribute filtering for synchronous instruments. + [#2472](https://github.com/open-telemetry/opentelemetry-cpp/pull/2472) +* [BUILD] Better handling of OPENTELEMETRY_STL_VERSION under Bazel. + [#2503](https://github.com/open-telemetry/opentelemetry-cpp/pull/2503) +* [DOC] Fixes CI markdown error MD055 - Table pipe style + [#2517](https://github.com/open-telemetry/opentelemetry-cpp/pull/2517) +* [API] Propagators: do not overwrite the active span with a default invalid + span [#2511](https://github.com/open-telemetry/opentelemetry-cpp/pull/2511) +* [BUILD] Updated the recorded vcpkg submodule version + [#2513](https://github.com/open-telemetry/opentelemetry-cpp/pull/2513) +* [BUILD] Remove unnecessary usage/includes of nostd/type_traits + [#2509](https://github.com/open-telemetry/opentelemetry-cpp/pull/2509) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.24.0 + [#2461](https://github.com/open-telemetry/opentelemetry-cpp/pull/2461) +* [EXAMPLES] Improve readme of Metrics example + [#2510](https://github.com/open-telemetry/opentelemetry-cpp/pull/2510) +* [BUILD] Clang-15 warning about `__has_trivial_destructor` + [#2502](https://github.com/open-telemetry/opentelemetry-cpp/pull/2502) +* [BUILD] Fix multiple assignment operators for SpinLockMutex + [#2501](https://github.com/open-telemetry/opentelemetry-cpp/pull/2501) +* [BUILD] Alternative way of exporting symbols (generating .def file) + [#2476](https://github.com/open-telemetry/opentelemetry-cpp/pull/2476) +* [CI] Make cmake.c++20*.test actually use C++20 and add cmake.c++23*.test + [#2496](https://github.com/open-telemetry/opentelemetry-cpp/pull/2496) +* [DOCUMENTATION] Add api reference documentation for logs + [#2497](https://github.com/open-telemetry/opentelemetry-cpp/pull/2497) +* [BUILD] Fix variable shadow + [#2498](https://github.com/open-telemetry/opentelemetry-cpp/pull/2498) +* [BUILD] Fix checks on __cplusplus under MSVC, do not assume /Zc + [#2493](https://github.com/open-telemetry/opentelemetry-cpp/pull/2493) +* [EXAMPLES] Use logs API instead of logs bridge API in the example + [#2494](https://github.com/open-telemetry/opentelemetry-cpp/pull/2494) +* [EXPORTER] Fix forward protocol encoding for ETW exporter + [#2473](https://github.com/open-telemetry/opentelemetry-cpp/pull/2473) +* [BUILD] Skip patch alias target + [#2457](https://github.com/open-telemetry/opentelemetry-cpp/pull/2457) +* [EXPORTER] Rename populate_otel_scope to without_otel_scope + [#2479](https://github.com/open-telemetry/opentelemetry-cpp/pull/2479) +* [EXPORTER SDK] Additional fixes after NOMINMAX removal on Windows + [#2475](https://github.com/open-telemetry/opentelemetry-cpp/pull/2475) +* [EXPORTER] Do not use regex in `CleanUpString` because some implementations of + STL may crash. + [#2464](https://github.com/open-telemetry/opentelemetry-cpp/pull/2464) +* [EXPORTER] Fix Aggregation type detection in OTLP Exporter + [#2467](https://github.com/open-telemetry/opentelemetry-cpp/pull/2467) +* [EXPORTER] Add option to disable Prometheus otel_scope_name and + otel_scope_version attributes + [#2451](https://github.com/open-telemetry/opentelemetry-cpp/pull/2451) +* [SEMANTIC CONVENTIONS] Code generation script fails on SELINUX + [#2455](https://github.com/open-telemetry/opentelemetry-cpp/pull/2455) +* [BUILD] Fix removing of NOMINMAX on Windows + [#2449](https://github.com/open-telemetry/opentelemetry-cpp/pull/2449) +* [BUILD] Accept path list in OPENTELEMETRY_EXTERNAL_COMPONENT_PATH + [#2439](https://github.com/open-telemetry/opentelemetry-cpp/pull/2439) +* [BUILD] Remove gmock from GTEST_BOTH_LIBRARIES + [#2437](https://github.com/open-telemetry/opentelemetry-cpp/pull/2437) +* [REMOVAL] Remove option WITH_OTLP_HTTP_SSL_PREVIEW + [#2435](https://github.com/open-telemetry/opentelemetry-cpp/pull/2435) + +Important changes: + +Breaking changes: + +* [REMOVAL] Remove option WITH_OTLP_HTTP_SSL_PREVIEW + [#2435](https://github.com/open-telemetry/opentelemetry-cpp/pull/2435) + * CMake options `WITH_OTLP_HTTP_SSL_PREVIEW` and + `WITH_OTLP_HTTP_SSL_TLS_PREVIEW` are removed. Building opentelemetry-cpp + without SSL support is no longer possible. + +* [PROTO] Upgrade to opentelemetry-proto v1.1.0 + [#2488](https://github.com/open-telemetry/opentelemetry-cpp/pull/2488) + * Class `opentelemetry::sdk::trace::Recordable` has a new virtual method, + `SetTraceFlags()`. + * This is an incompatible change for the SDK Recordable API and ABI. + * Applications _configuring_ the SDK are not affected. + * Third parties providing SDK _extensions_ are affected, + and must provide a `SetTraceFlags()` implementation, + starting with opentelemetry-cpp 1.14.0. + +## [1.13.0] 2023-12-06 + +* [BUILD] Remove WITH_REMOVE_METER_PREVIEW, use WITH_ABI_VERSION_2 instead + [#2370](https://github.com/open-telemetry/opentelemetry-cpp/pull/2370) +* [SDK] Metrics ObservableRegistry Cleanup + [#2376](https://github.com/open-telemetry/opentelemetry-cpp/pull/2376) +* [BUILD] Make WITH_OTLP_HTTP_SSL_PREVIEW mainstream + [#2378](https://github.com/open-telemetry/opentelemetry-cpp/pull/2378) +* [SDK] Creating DoubleUpDownCounter with no matching view + [#2379](https://github.com/open-telemetry/opentelemetry-cpp/pull/2379) +* [API] Add InstrumentationScope attributes in TracerProvider::GetTracer() + [#2371](https://github.com/open-telemetry/opentelemetry-cpp/pull/2371) +* [BUILD] DLL export interface for Metrics + [#2344](https://github.com/open-telemetry/opentelemetry-cpp/pull/2344) +* [BUILD] enum CanonicalCode names too generic... conflict with old C defines + [#2385](https://github.com/open-telemetry/opentelemetry-cpp/pull/2385) +* [BUILD] Fix cpack broken package version + [#2386](https://github.com/open-telemetry/opentelemetry-cpp/pull/2386) +* [API] Add a new AddLink() operation to Span + [#2380](https://github.com/open-telemetry/opentelemetry-cpp/pull/2380) +* [opentracing-shim] Add check for sampled context + [#2390](https://github.com/open-telemetry/opentelemetry-cpp/pull/2390) +* [BUILD] Fix exported definitions when building DLL with STL + [#2387](https://github.com/open-telemetry/opentelemetry-cpp/pull/2387) +* [BUILD] Add missing includes to runtime_context_test + [#2395](https://github.com/open-telemetry/opentelemetry-cpp/pull/2395) +* [ADMIN] Add file .github/repository-settings.md + [#2392](https://github.com/open-telemetry/opentelemetry-cpp/pull/2392) +* [SDK] Fix GetLogger with empty library name + [#2398](https://github.com/open-telemetry/opentelemetry-cpp/pull/2398) +* [TEST] Fix compiling problem and removed -DENABLE_TEST + [#2401](https://github.com/open-telemetry/opentelemetry-cpp/pull/2401) +* [BUILD] Check windows options are not passed to non-Windows build + [#2399](https://github.com/open-telemetry/opentelemetry-cpp/pull/2399) +* [EXPORTER] Rework OTLP/HTTP and OTLP/GRPC exporter options + [#2388](https://github.com/open-telemetry/opentelemetry-cpp/pull/2388) +* [Build] Update vcpkg to latest release + [#2412](https://github.com/open-telemetry/opentelemetry-cpp/pull/2412) +* [SDK] Cardinality limits for metrics streams + (Sync Instruments + Delta Temporality) + [#2255](https://github.com/open-telemetry/opentelemetry-cpp/pull/2255) +* [EXPORTER] Prometheus: Add unit to names, convert to word + [#2213](https://github.com/open-telemetry/opentelemetry-cpp/pull/2213) +* [Metrics] Make context optional for histogram instruments in Metrics SDK + [#2416](https://github.com/open-telemetry/opentelemetry-cpp/pull/2416) +* [BUILD] Fix references to trace namespace to be fully qualified + [#2422](https://github.com/open-telemetry/opentelemetry-cpp/pull/2422) +* [BUILD] Bump third_party/googletest to same version as bazel + [#2421](https://github.com/open-telemetry/opentelemetry-cpp/pull/2421) +* [BUILD] Remove defining NOMINMAX from api + [#2420](https://github.com/open-telemetry/opentelemetry-cpp/pull/2420) +* [BUILD] 'uint8_t' not declared in this scope with gcc 13.2.1 + [#2423](https://github.com/open-telemetry/opentelemetry-cpp/pull/2423) +* [BUILD] Improve the handling of OPENTELEMETRY_HAVE_WORKING_REGEX + [#2430](https://github.com/open-telemetry/opentelemetry-cpp/pull/2430) +* [SEMANTIC CONVENTION] Upgrade to semconv 1.23.1 + [#2428](https://github.com/open-telemetry/opentelemetry-cpp/pull/2428) +* [BUILD] Use fully qualified references to trace/common namespace + [#2424](https://github.com/open-telemetry/opentelemetry-cpp/pull/2424) +* [API] Create root span with active span + [#2427](https://github.com/open-telemetry/opentelemetry-cpp/pull/2427) +* [REMOVAL] Remove ZPAGES + [#2433](https://github.com/open-telemetry/opentelemetry-cpp/pull/2433) + +Important changes: + +* [API] Add InstrumentationScope attributes in TracerProvider::GetTracer() + [#2371](https://github.com/open-telemetry/opentelemetry-cpp/pull/2371) + * TracerProvider::GetTracer() now accepts InstrumentationScope attributes. + * Because this is an `ABI` breaking change, the fix is only available + with the `CMake` option `WITH_ABI_VERSION_2=ON`. + * When building with `CMake` option `WITH_ABI_VERSION_1=ON` (by default) + the `ABI` is unchanged, and the fix is not available. + +* [API] Add a new AddLink() operation to Span + [#2380](https://github.com/open-telemetry/opentelemetry-cpp/pull/2380) + * New `API` Span::AddLink() adds a single link to a span. + * New `API` Span::AddLinks() adds multiple links to a span. + * Because this is an `ABI` breaking change, the fix is only available + with the `CMake` option `WITH_ABI_VERSION_2=ON`. + * When building with `CMake` option `WITH_ABI_VERSION_1=ON` (by default) + the `ABI` is unchanged, and the fix is not available. + +* [BUILD] Make WITH_OTLP_HTTP_SSL_PREVIEW mainstream + [#2378](https://github.com/open-telemetry/opentelemetry-cpp/pull/2378) + * The experimental `CMake` option `WITH_OTLP_HTTP_SSL_PREVIEW` + is now promoted to stable. The default is changed to `ON`. + * The experimental `CMake` option `WITH_OTLP_HTTP_SSL_TLS_PREVIEW` + is now promoted to stable. The default is changed to `ON`. + * These build options are scheduled to be removed by the next release, + building without SSL/TLS will no longer be possible. + +* [EXPORTER] Rework OTLP/HTTP and OTLP/GRPC exporter options + [#2388](https://github.com/open-telemetry/opentelemetry-cpp/pull/2388) + * `OtlpGrpcMetricExporterOptions` used to honor `_TRACES_` + environment variables, instead of `_METRICS_` environment variables. + * The implementation of `OtlpGrpcMetricExporterOptions` is now fixed. + * Please check configuration variables, + to make sure `_METRICS_` variables are set as expected. + +Breaking changes: + +* [BUILD] Remove WITH_REMOVE_METER_PREVIEW, use WITH_ABI_VERSION_2 instead + [#2370](https://github.com/open-telemetry/opentelemetry-cpp/pull/2370) + * The experimental `CMake` option `WITH_REMOVE_METER_PREVIEW` is removed, + use option `WITH_ABI_VERSION_2` instead. + +* [BUILD] enum CanonicalCode names too generic... conflict with old C defines + [#2385](https://github.com/open-telemetry/opentelemetry-cpp/pull/2385) + * Header file `opentelemetry/trace/canonical_code.h` is unused, + and is now removed. + * This header should not be included directly in an application. + If this is the case, please remove any remaining include directives. + +* [BUILD] Fix exported definitions when building DLL with STL + [#2387](https://github.com/open-telemetry/opentelemetry-cpp/pull/2387) + * The MeterSelector, MeterSelectorFactory, InstrumentSelector, + and InstrumentSelectorFactory APIs now use const std::string& + instead of nostd::string_view for name, version and schema to + maintain a single export definition for DLL. + +* [EXPORTER] Rework OTLP/HTTP and OTLP/GRPC exporter options + [#2388](https://github.com/open-telemetry/opentelemetry-cpp/pull/2388) + * `OtlpGrpcLogRecordExporter` incorrectly used `OtlpGrpcExporterOptions`, + which are options for traces and not logs. + * This created a bug: the `OtlpGrpcLogRecordExporter` honors `_TRACES_` + environment variables, instead of `_LOGS_` environment variables. + * `OtlpGrpcLogRecordExporter` is changed to use + `OtlpGrpcLogRecordExporterOptions` instead, fixing the bug. + * User code that initializes the SDK with a GRPC Log exporter, + and uses exporter options, should adjust to replace + `OtlpGrpcExporterOptions` with `OtlpGrpcLogRecordExporterOptions`. + * Please check configuration variables, + to make sure `_LOGS_` variables are set as expected. + +* [REMOVAL] Remove ZPAGES + [#2433](https://github.com/open-telemetry/opentelemetry-cpp/pull/2433) + * As announced in release 1.12.0, + the deprecated ZPAGES exporter is now removed. + +## [1.12.0] 2023-10-16 + +* [BUILD] Support `pkg-config` + [#2269](https://github.com/open-telemetry/opentelemetry-cpp/pull/2269) +* [CI] Do not automatically close stale issues + [#2277](https://github.com/open-telemetry/opentelemetry-cpp/pull/2277) +* [CI] Benchmark workflow fails, C++14 required to build grpc + [#2278](https://github.com/open-telemetry/opentelemetry-cpp/pull/2278) +* [SDK] Increase metric name maximum length from 63 to 255 characters + [#2284](https://github.com/open-telemetry/opentelemetry-cpp/pull/2284) +* [SEMANTIC CONVENTION] Deprecated semconv (in the spec) + not deprecated (in C++) + [#2285](https://github.com/open-telemetry/opentelemetry-cpp/pull/2285) +* [SDK] Remove unused member variables from SyncMetricStorage + [#2294](https://github.com/open-telemetry/opentelemetry-cpp/pull/2294) +* [DEPRECATION] Deprecate ZPAGES + [#2291](https://github.com/open-telemetry/opentelemetry-cpp/pull/2291) +* [API] Deliver ABI breaking changes + [#2222](https://github.com/open-telemetry/opentelemetry-cpp/pull/2222) +* [SDK] Allow metric instrument names to contain / characters + [#2310](https://github.com/open-telemetry/opentelemetry-cpp/pull/2310) +* [SDK] Fix Observable Counters/UpDownCounters + [#2298](https://github.com/open-telemetry/opentelemetry-cpp/pull/2298) +* [SDK] Add exemplar reservoir to async metric storage + [#2319](https://github.com/open-telemetry/opentelemetry-cpp/pull/2319) +* [TEST] Fix lifetime issues in prometheus test utils + [#2322](https://github.com/open-telemetry/opentelemetry-cpp/pull/2322) +* [EXPORTER] Prometheus: Remove explicit timestamps from metric points + [#2324](https://github.com/open-telemetry/opentelemetry-cpp/pull/2324) +* [EXPORTER] Prometheus: Handle attribute key collisions from sanitation + [#2326](https://github.com/open-telemetry/opentelemetry-cpp/pull/2326) +* [EXPORTER] Prometheus cleanup, test with TranslateToPrometheus + [#2329](https://github.com/open-telemetry/opentelemetry-cpp/pull/2329) +* [SDK] Fix log message in Meter::RegisterSyncMetricStorage + [#2325](https://github.com/open-telemetry/opentelemetry-cpp/pull/2325) +* [DOC] Simplify the project status section + [#2332](https://github.com/open-telemetry/opentelemetry-cpp/pull/2332) +* [EXPORTER] Prometheus: Sanitize labels according to spec + [#2330](https://github.com/open-telemetry/opentelemetry-cpp/pull/2330) +* [SDK] Fix deadlock when shuting down http client + [#2337](https://github.com/open-telemetry/opentelemetry-cpp/pull/2337) +* [Exporter] Group spans by resource and instrumentation scope + in OTLP export requests + [#2335](https://github.com/open-telemetry/opentelemetry-cpp/pull/2335) +* [BUILD] Need fine-grained HAVE_CPP_STDLIB + [#2304](https://github.com/open-telemetry/opentelemetry-cpp/pull/2304) +* [API] Add InstrumentationScope attributes in MeterProvider::GetMeter() + [#2224](https://github.com/open-telemetry/opentelemetry-cpp/pull/2224) +* [REMOVAL] Drop C++11 support + [#2342](https://github.com/open-telemetry/opentelemetry-cpp/pull/2342) +* [EXPORTER] prometheus: add otel_scope_name and otel_scope_version labels + [#2293](https://github.com/open-telemetry/opentelemetry-cpp/pull/2293) +* [EXPORTER] Export resource for prometheus + [#2301](https://github.com/open-telemetry/opentelemetry-cpp/pull/2301) +* [BUILD] error: read-only reference ‘value’ used as ‘asm’ output + [#2354](https://github.com/open-telemetry/opentelemetry-cpp/pull/2354) +* [BUILD] Build break with external CMake nlohman_json package + [#2353](https://github.com/open-telemetry/opentelemetry-cpp/pull/2353) +* [BUILD] Upgrade libcurl to version 8.4.0 + [#2358](https://github.com/open-telemetry/opentelemetry-cpp/pull/2358) +* [BUILD] Fix opentracing-shim when added in super project + [#2356](https://github.com/open-telemetry/opentelemetry-cpp/pull/2356) +* [BUILD] Fix protoc searching with non-imported protobuf::protoc target + [#2362](https://github.com/open-telemetry/opentelemetry-cpp/pull/2362) +* [BUILD] Support to use different cmake package CONFIG of dependencies + [#2263](https://github.com/open-telemetry/opentelemetry-cpp/pull/2263) +* [SEMANTIC CONVENTION] Upgrade to semconv 1.22.0 + [#2368](https://github.com/open-telemetry/opentelemetry-cpp/pull/2368) + +Important changes: + +* [API] Add InstrumentationScope attributes in MeterProvider::GetMeter() + [#2224](https://github.com/open-telemetry/opentelemetry-cpp/pull/2224) + * MeterProvider::GetMeter() now accepts InstrumentationScope attributes. + * Because this is an `ABI` breaking change, the fix is only available + with the `CMake` option `WITH_ABI_VERSION_2=ON`. + * When building with `CMake` option `WITH_ABI_VERSION_1=ON` (by default) + the `ABI` is unchanged, and the fix is not available. + +Breaking changes: + +* [BUILD] Need fine-grained HAVE_CPP_STDLIB + [#2304](https://github.com/open-telemetry/opentelemetry-cpp/pull/2304) + * In `CMAKE`, the boolean option `WITH_STL` as changed to an option + that accepts the values `OFF`, `ON`, `CXX11`, `CXX14`, `CXX17`, + `CXX20` and `CXX23`. + * Applications makefiles that did not set WITH_STL need to use + `WITH_STL=OFF` instead (this is the default). + * Applications makefiles that did set WITH_STL need to use + `WITH_STL=ON` instead, or may choose to pick a specific value. + * In the `API` header files, the preprocessor symbol `HAVE_CPP_STDLIB` + is no longer used. + * Applications that did set `HAVE_CPP_STDLIB` before, need to set + `OPENTELEMETRY_STL_VERSION=` instead, to build with a + specific STL version (2011, 2014, 2017, 2020, 2023). + * The opentelemetry-cpp makefile no longer sets + CMAKE_CXX_STANDARD by itself. + Instead, the CMAKE_CXX_STANDARD and/or compiler options -stdc++ used + by the caller are honored. + * Applications that set neither CMAKE_CXX_STANDARD nor -stdc++ + options may need to provide a C++ standard in their makefiles. + +* [REMOVAL] Drop C++11 support + [#2342](https://github.com/open-telemetry/opentelemetry-cpp/pull/2342) + * Building with C++11 is no longer supported. + +Deprecations: + +* [DEPRECATION] Deprecate ZPAGES + [#2291](https://github.com/open-telemetry/opentelemetry-cpp/pull/2291) + +## [1.11.0] 2023-08-21 + +* [BUILD] Fix more cases for symbol name for 32-bit win32 DLL build + [#2264](https://github.com/open-telemetry/opentelemetry-cpp/pull/2264) +* [BUILD] added public link of `opentelemetry_proto_grpc` against gRPC lib (only + if gRPC library is shared) + [#2268](https://github.com/open-telemetry/opentelemetry-cpp/pull/2268) +* [CI] use ubuntu-latest for tsan CI + [#2267](https://github.com/open-telemetry/opentelemetry-cpp/pull/2267) +* [SDK] Fixing an apparent logging macro bug + [#2265](https://github.com/open-telemetry/opentelemetry-cpp/pull/2265) +* [BUILD] Support protobuf 3.22 or upper + [#2163](https://github.com/open-telemetry/opentelemetry-cpp/pull/2163) +* [BUILD] Remove extra includes + [#2252](https://github.com/open-telemetry/opentelemetry-cpp/pull/2252) +* [LOGS API SDK] Mark logs signal as stable API/SDK + [#2229](https://github.com/open-telemetry/opentelemetry-cpp/pull/2229) +* [SEMANTIC CONVENTIONS] Upgrade to 1.21.0 + [#2248](https://github.com/open-telemetry/opentelemetry-cpp/pull/2248) +* [SDK] Valgrind errors on std::atomic variables + [#2244](https://github.com/open-telemetry/opentelemetry-cpp/pull/2244) +* [BUILD] Fix compile with clang 16 and libc++ + [#2242](https://github.com/open-telemetry/opentelemetry-cpp/pull/2242) +* [Metrics SDK] Add unit to Instrument selection criteria + [#2236](https://github.com/open-telemetry/opentelemetry-cpp/pull/2236) +* [SDK] Add OStreamLogRecordExporterFactory + [#2240](https://github.com/open-telemetry/opentelemetry-cpp/pull/2240) +* [SDK] Add support for LowMemory metrics temporality + [#2234](https://github.com/open-telemetry/opentelemetry-cpp/pull/2234) +* [CI] Misc build scripts cleanup + [#2232](https://github.com/open-telemetry/opentelemetry-cpp/pull/2232) +* [CI] Upgrade GoogleTest version from 1.12.1 to 1.13.0 + [#2114](https://github.com/open-telemetry/opentelemetry-cpp/pull/2114) +* [BUILD] include cstdint + [#2230](https://github.com/open-telemetry/opentelemetry-cpp/pull/2230) +* [EXPORTER] Support protobuf 3.22 or upper + [#2163](https://github.com/open-telemetry/opentelemetry-cpp/pull/2163) +* [SDK] Mark logs signal as stable API/SDK + [#2229](https://github.com/open-telemetry/opentelemetry-cpp/pull/2229) + +Breaking changes: + +* [SDK] Add unit to Instrument selection criteria + [#2236](https://github.com/open-telemetry/opentelemetry-cpp/pull/2236) + * The `View` constructor and `ViewFactory::Create` method now takes a + `unit` criteria as optional third argument. + * Please adjust SDK configuration code accordingly. + +## [1.10.0] 2023-07-11 + +* [REMOVAL] Remove the jaeger exporter + [#2031](https://github.com/open-telemetry/opentelemetry-cpp/pull/2031) + +* [CI] Add a C++11 build + [#2152](https://github.com/open-telemetry/opentelemetry-cpp/pull/2152) + +* [CI] Add Include what you use + [#2214](https://github.com/open-telemetry/opentelemetry-cpp/pull/2214) + +* [CI] opentelemetry-cpp project CI + [#2071](https://github.com/open-telemetry/opentelemetry-cpp/pull/2071) + +* [CI] Do not tag pull_request with the "need-triage" label + [#2228](https://github.com/open-telemetry/opentelemetry-cpp/pull/2228) + +* [BUILD] Fixing CMake to build GTest on Windows + [#1887](https://github.com/open-telemetry/opentelemetry-cpp/pull/1887) + +* [BUILD] Remove option WITH_OTLP + [#2161](https://github.com/open-telemetry/opentelemetry-cpp/pull/2161) + +* [BUILD] Link to opentelemetry_logs even without OTLP + [#2177](https://github.com/open-telemetry/opentelemetry-cpp/pull/2177) + +* [BUILD] Avoid dependency on protobuf from the OTLP HTTP metrics exporter header + [#2179](https://github.com/open-telemetry/opentelemetry-cpp/pull/2179) + +* [BUILD] Add ctime header to metrics_exporter.cc + [#2187](https://github.com/open-telemetry/opentelemetry-cpp/pull/2187) + +* [BUILD] Fix the exported symbol name for 32-bit win32 DLL + [#2190](https://github.com/open-telemetry/opentelemetry-cpp/pull/2190) + +* [BUILD] Upgrade to opentelemetry-proto 0.20.0 + [#2195](https://github.com/open-telemetry/opentelemetry-cpp/pull/2195) + +* [BUILD] SDK Header files cleanup, use forward declarations + [#2182](https://github.com/open-telemetry/opentelemetry-cpp/pull/2182) + +* [BUILD] Enable building otel-cpp extensions from main repo + [#1937](https://github.com/open-telemetry/opentelemetry-cpp/pull/1937) + +* [BUILD] Fix if check on environment variable and add CMake variable + [#2207](https://github.com/open-telemetry/opentelemetry-cpp/pull/2207) + +* [BUILD] Add `OPENTELEMETRY_CPP_FOUND` into cmake CONFIG file + [#2215](https://github.com/open-telemetry/opentelemetry-cpp/pull/2215) + +* [BUILD] Upgrade opentelemetry-proto to 1.0.0 + [#2216](https://github.com/open-telemetry/opentelemetry-cpp/pull/2216) + +* [BUILD] Include nostd/string_view which is used in severity.h + [#2219](https://github.com/open-telemetry/opentelemetry-cpp/pull/2219) + +* [TEST] Expand api singleton test to cover explicit dlopen() + [#2164](https://github.com/open-telemetry/opentelemetry-cpp/pull/2164) + +* [API] Remove include_trace_context + [#2194](https://github.com/open-telemetry/opentelemetry-cpp/pull/2194) + +* [API] Remove Meters + [#2205](https://github.com/open-telemetry/opentelemetry-cpp/pull/2205) + +* [SDK] Add AdaptingCircularBufferCounter for exponential histograms + [#2158](https://github.com/open-telemetry/opentelemetry-cpp/pull/2158) + +* [SDK] Add base2 exponential histogram indexer + [#2173](https://github.com/open-telemetry/opentelemetry-cpp/pull/2173) + +* [SDK] Simplify SDK version + [#2180](https://github.com/open-telemetry/opentelemetry-cpp/pull/2180) + +* [SDK] Add benchmark for base2 exponential histogram indexer + [#2181](https://github.com/open-telemetry/opentelemetry-cpp/pull/2181) + +* [SDK] Provide builders to avoid exposing Metrics SDK internals + [#2189](https://github.com/open-telemetry/opentelemetry-cpp/pull/2189) + +* [SDK] MeterProvider should own MeterContext, not share it + [#2218](https://github.com/open-telemetry/opentelemetry-cpp/pull/2218) + +* [SDK] TracerProvider should own TracerContext, not share it + [#2221](https://github.com/open-telemetry/opentelemetry-cpp/pull/2221) + +* [EXPORTER] Change OTLP Json field name to camelCase + [#2162](https://github.com/open-telemetry/opentelemetry-cpp/pull/2162) + +* [EXPORTER] Support empty arrays in `OtlpRecordable` attributes + [#2166](https://github.com/open-telemetry/opentelemetry-cpp/pull/2166) + +* [EXPORTER] set is_monotonic only for instrument type kCounter + [#2171](https://github.com/open-telemetry/opentelemetry-cpp/pull/2171) + +* [EXPORTER] Fixed HTTP CURL for 32bits platforms + [#2178](https://github.com/open-telemetry/opentelemetry-cpp/pull/2178) + +* [EXPORTER] Fix OTLP HTTP exporting in sync mode + [#2193](https://github.com/open-telemetry/opentelemetry-cpp/pull/2193) + +* [EXPORTER] Prometheus exporter sanitizes invalid characters + [#1934](https://github.com/open-telemetry/opentelemetry-cpp/pull/1934) + +* [EXPORTER] Prometheus: Error on ingesting samples + with different value but same timestamp + [#2200](https://github.com/open-telemetry/opentelemetry-cpp/pull/2200) + +* [EXPORTER] OTLP GRPC mTLS support + [#2120](https://github.com/open-telemetry/opentelemetry-cpp/pull/2120) + +* [DOC] Small fix for Histogram documentation + [#2156](https://github.com/open-telemetry/opentelemetry-cpp/pull/2156) + +* [DOC] Move Reiley Yang to emeritus + [#2198](https://github.com/open-telemetry/opentelemetry-cpp/pull/2198) + +Important changes: + +* [API] Remove Meters + [#2205](https://github.com/open-telemetry/opentelemetry-cpp/pull/2205) + * The CMake option `WITH_REMOVE_METER_PREVIEW` was added. + * This option is experimental, and may change in the future. + * Enabling it is an ABI breaking change. + +Breaking changes: + +* [REMOVAL] Remove the jaeger exporter + [#2031](https://github.com/open-telemetry/opentelemetry-cpp/pull/2031) + * The CMake `WITH_JAEGER` option has been removed + * Please remove usage of `WITH_JAEGER` from user scripts and makefiles. + +* [SDK] MeterProvider should own MeterContext, not share it + [#2218](https://github.com/open-telemetry/opentelemetry-cpp/pull/2218) + * The `MeterProvider` constructor now takes a `unique_ptr` on + `MeterContext`, instead of a `shared_ptr`. + * Please adjust SDK configuration code accordingly. + +* [SDK] TracerProvider should own TracerContext, not share it + [#2221](https://github.com/open-telemetry/opentelemetry-cpp/pull/2221) + * The `TracerProvider` constructor now takes a `unique_ptr` on + `TracerContext`, instead of a `shared_ptr`. + * The `LoggerProvider` constructor now takes a `unique_ptr` on + `LoggerContext`, instead of a `shared_ptr`. + * Please adjust SDK configuration code accordingly. + +## [1.9.1] 2023-05-26 + +* [DEPRECATION] Drop C++11 support + [#2146](https://github.com/open-telemetry/opentelemetry-cpp/pull/2146) + +* [CI] Upgrade Bazel and Bazelisk version + [#2118](https://github.com/open-telemetry/opentelemetry-cpp/pull/2118) +* [CI] Upgrade Google Benchmark version from 1.6.0 to 1.7.1 + [#2116](https://github.com/open-telemetry/opentelemetry-cpp/pull/2116) +* [CI] Upgrade Nlohmann JSON library version from 3.10.5 to 3.11.2 + [#2115](https://github.com/open-telemetry/opentelemetry-cpp/pull/2115) + +* [BUILD] Missed include + [#2143](https://github.com/open-telemetry/opentelemetry-cpp/pull/2143) +* [BUILD] Add opentelemetry_proto_grpc and allow build shared + opentelemetry_proto and opentelemetry_proto_grpc on non-Windows platform. + [#2097](https://github.com/open-telemetry/opentelemetry-cpp/pull/2097) +* [BUILD] Warning cleanup, single character wrapped by std::string + [#2137](https://github.com/open-telemetry/opentelemetry-cpp/pull/2137) +* [BUILD] Add missing target dependencies + [#2128](https://github.com/open-telemetry/opentelemetry-cpp/pull/2128) +* [BUILD] Fix if JSON library already added another CMake target + [#2126](https://github.com/open-telemetry/opentelemetry-cpp/pull/2126) +* [BUILD] shared libraries with version suffix, along with the symbolic link + [#2109](https://github.com/open-telemetry/opentelemetry-cpp/pull/2109) +* [BUILD] Show warning message if WITH_OTLP is enabled + [#2112](https://github.com/open-telemetry/opentelemetry-cpp/pull/2112) +* [BUILD] Add missing STL header. + [#2107](https://github.com/open-telemetry/opentelemetry-cpp/pull/2107) +* [BUILD] Build break with old curl, macro CURL_VERSION_BITS unknown + [#2102](https://github.com/open-telemetry/opentelemetry-cpp/pull/2102) +* [BUILD] Transitive dependency issue with the otlp http exporter + [#2154](https://github.com/open-telemetry/opentelemetry-cpp/pull/2154) + +* [TEST] Add unit test for log body implicit conversions. + [#2136](https://github.com/open-telemetry/opentelemetry-cpp/pull/2136) +* [TEST] Add event id to logger benchmark method + [#2133](https://github.com/open-telemetry/opentelemetry-cpp/pull/2133) + +* [API] Fix inclusion header files and use forward declaration + [#2124](https://github.com/open-telemetry/opentelemetry-cpp/pull/2124) +* [API] Add user facing Logging API and Benchmarks + [#2094](https://github.com/open-telemetry/opentelemetry-cpp/pull/2094) + +* [SDK] SDK support for the new OTel log + [#2123](https://github.com/open-telemetry/opentelemetry-cpp/pull/2123) + +* [EXPORTER] Fixed HTTP session cleanup on shutdown + [#2111](https://github.com/open-telemetry/opentelemetry-cpp/pull/2111) +* [EXPORTER] Delegate all API calls of gRPC into + opentelemetry_exporter_otlp_grpc_client, + and make it contains all symbols needed. + [#2005](https://github.com/open-telemetry/opentelemetry-cpp/pull/2005) + +* [DOC] Add Marc as maintainer. + [#2027](https://github.com/open-telemetry/opentelemetry-cpp/pull/2027) + +Breaking changes: + +* Add opentelemetry_proto_grpc and move gRPC sources into it. + [#2097](https://github.com/open-telemetry/opentelemetry-cpp/pull/2097) + * There will be no breaking changes for users who only use OTLP exporters and + do not directly use opentelemetry-cpp::proto. However, it is important to + note that `opentelemetry-cpp::proto` no longer contains generated gRPC codes + , and all components that depend on these gRPC codes should also link to + `opentelemetry-cpp::proto_grpc`. + +Deprecations: + +* The Jaeger Exporter is deprecated, see [DEPRECATED](./DEPRECATED.md) for details. +* C++11 support is to end, C++14 will be supported instead, + see [DEPRECATED](./DEPRECATED.md) for details. + +## [1.9.0] 2023-04-12 + +* [CI] Make build environment parallel (Windows) + [#2080](https://github.com/open-telemetry/opentelemetry-cpp/pull/2080) +* [CI] Make build environment parallel (Linux) + [#2076](https://github.com/open-telemetry/opentelemetry-cpp/pull/2076) +* [CI] Remove separate run of metrics ostream example + [#2030](https://github.com/open-telemetry/opentelemetry-cpp/pull/2030) + +* [BUILD] Include directory path added for Zipkin exporter example + [#2069](https://github.com/open-telemetry/opentelemetry-cpp/pull/2069) +* [BUILD] Ignore more warning in generated protobuf files + [#2067](https://github.com/open-telemetry/opentelemetry-cpp/pull/2067) +* [BUILD] Clean warnings in ETW exporters + [#2063](https://github.com/open-telemetry/opentelemetry-cpp/pull/2063) +* [BUILD] Fix default value of OPENTELEMETRY_INSTALL_default + [#2062](https://github.com/open-telemetry/opentelemetry-cpp/pull/2062) + +* [SEMANTIC CONVENTIONS] Upgrade to version 1.20.0 + [#2088](https://github.com/open-telemetry/opentelemetry-cpp/pull/2088) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.19.0 + [#2017](https://github.com/open-telemetry/opentelemetry-cpp/pull/2017) + +* [API] Checking indices before dereference in string utils + [#2040](https://github.com/open-telemetry/opentelemetry-cpp/pull/2040) +* [API] Export factory class of log provider + [#2041](https://github.com/open-telemetry/opentelemetry-cpp/pull/2041) + +* [SDK] Implement Forceflush for Periodic Metric Reader + [#2064](https://github.com/open-telemetry/opentelemetry-cpp/pull/2064) +* [SDK] Add `ForceFlush` for all `LogRecordExporter` and `SpanExporter` + [#2000](https://github.com/open-telemetry/opentelemetry-cpp/pull/2000) +* [SDK] Fix schema URL precedence bug in `Resource::Merge` + [#2036](https://github.com/open-telemetry/opentelemetry-cpp/pull/2036) +* [SDK] Use sdk_start_ts for MetricData start_ts for instruments having + cumulative aggregation temporality. + [#2086](https://github.com/open-telemetry/opentelemetry-cpp/pull/2086) + +* [EXPORTER] Add OTLP HTTP SSL support + [#1793](https://github.com/open-telemetry/opentelemetry-cpp/pull/1793) +* [EXPORTER] GRPC endpoint scheme should take precedence over OTEL_EXPORTER_OTLP_TRACES_INSECURE + [#2060](https://github.com/open-telemetry/opentelemetry-cpp/pull/2060) + +* [EXAMPLES] Remove unused 'alerting' section from prometheus.yml in examples + [#2055](https://github.com/open-telemetry/opentelemetry-cpp/pull/2055) +* [EXAMPLES] Fix view names in Prometheus example + [#2034](https://github.com/open-telemetry/opentelemetry-cpp/pull/2034) + +* [DOC] Fix some docs typo + [#2057](https://github.com/open-telemetry/opentelemetry-cpp/pull/2057) +* [DOC] Update OpenTracing shim README.md + [#2028](https://github.com/open-telemetry/opentelemetry-cpp/pull/2028) +* [DOC] INSTALL doc clarifications + [#2078](https://github.com/open-telemetry/opentelemetry-cpp/pull/2078) + +Important changes: + +* [EXPORTER] GRPC endpoint scheme should take precedence over OTEL_EXPORTER_OTLP_TRACES_INSECURE + [#2060](https://github.com/open-telemetry/opentelemetry-cpp/pull/2060) + * The logic to decide whether or not an OTLP GRPC exporter uses SSL has + changed to comply with the specification: + * Before this change, the following settings were evaluated, in order: + * OTEL_EXPORTER_OTLP_TRACES_INSECURE (starting with 1.8.3) + * OTEL_EXPORTER_OTLP_INSECURE (starting with 1.8.3) + * OTEL_EXPORTER_OTLP_TRACES_SSL_ENABLE + * OTEL_EXPORTER_OTLP_SSL_ENABLE + * With this change, the following settings are evaluated, in order: + * The GRPC endpoint scheme, if provided: + * "https" imply with SSL, + * "http" imply without ssl. + * OTEL_EXPORTER_OTLP_TRACES_INSECURE + * OTEL_EXPORTER_OTLP_INSECURE + * OTEL_EXPORTER_OTLP_TRACES_SSL_ENABLE + * OTEL_EXPORTER_OTLP_SSL_ENABLE + * As a result, a behavior change for GRPC SSL is possible, + because the endpoint scheme now takes precedence. + Please verify configuration settings for the GRPC endpoint. +* [SDK] Add `ForceFlush` for all `LogRecordExporter` and `SpanExporter` + [#2000](https://github.com/open-telemetry/opentelemetry-cpp/pull/2000) + * `LogRecordExporter` and `SpanExporter` add a new virtual function + `ForceFlush`, and if users implement any customized `LogRecordExporter` and + `SpanExporter`, they should also implement this function. + There should be no impact if users only use factory to create exporters. + +Deprecations: + +* The Jaeger Exporter is deprecated, see [DEPRECATED](./DEPRECATED.md) for details. + +## [1.8.3] 2023-03-06 + +* Provide version major/minor/patch macros + [#2014](https://github.com/open-telemetry/opentelemetry-cpp/pull/2014) +* [BUILD] Add `OPENTELEMETRY_INSTALL` to allow user to skip install targets. + [#2022](https://github.com/open-telemetry/opentelemetry-cpp/pull/2022) +* [SDK] Rename the global SDK version variables to avoid naming clash + [#2011](https://github.com/open-telemetry/opentelemetry-cpp/pull/2011) +* [BUILD] Fix typo in CMakeLists.txt + [#2010](https://github.com/open-telemetry/opentelemetry-cpp/pull/2010) +* [EXPORTER] fix Prometheus test iterator iterator increment + [#2006](https://github.com/open-telemetry/opentelemetry-cpp/pull/2006) +* [SDK]Add attributes for InstrumentationScope + [#2004](https://github.com/open-telemetry/opentelemetry-cpp/pull/2004) +* [METRICS SDK] Performance improvement in measurement processing + [#1993](https://github.com/open-telemetry/opentelemetry-cpp/pull/1993) +* [EXAMPLE] Add example for logs ostream exporter + [#1992](https://github.com/open-telemetry/opentelemetry-cpp/pull/1992) +* [ETW Exporter] Support serialize span/log attributes into JSON + [#1991](https://github.com/open-telemetry/opentelemetry-cpp/pull/1991) +* [ETW Exporter]Do not overwrite ParentId when setting attribute on Span + [#1989](https://github.com/open-telemetry/opentelemetry-cpp/pull/1989) +* Upgrade prometheus-cpp to v1.1.0 + [#1954](https://github.com/open-telemetry/opentelemetry-cpp/pull/1954) +* Convert Prometheus Exporter to Pull MetricReader + [#1953](https://github.com/open-telemetry/opentelemetry-cpp/pull/1953) +* [DOCS] Add alpine packages to INSTALL.md + [#1957](https://github.com/open-telemetry/opentelemetry-cpp/pull/1957) +* [METRICS SDK] Add benchmark tests for Sum Aggregation. + [#1948](https://github.com/open-telemetry/opentelemetry-cpp/pull/1948) +* [BUILD] Build OpenTelemetry SDK and exporters into DLL + [#1932](https://github.com/open-telemetry/opentelemetry-cpp/pull/1932) +* [CI] Enforce copyright check in CI + [#1965](https://github.com/open-telemetry/opentelemetry-cpp/pull/1965) +* [BUILD] Fix typo GENENV -> GETENV + [#1972](https://github.com/open-telemetry/opentelemetry-cpp/pull/1972) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.18.0 + [#1974](https://github.com/open-telemetry/opentelemetry-cpp/pull/1974) +* [EXT] Fix thread-safety when shutdown. + [#1977](https://github.com/open-telemetry/opentelemetry-cpp/pull/1977) +* [SDK] Fix missing ObservedTimestamp. + [#1985](https://github.com/open-telemetry/opentelemetry-cpp/pull/1985) +* [METRICS SDK] fix variable names + [#1987](https://github.com/open-telemetry/opentelemetry-cpp/pull/1987) +* [EXPORTER] Fix Prometheus server crash on listening to already used port + [#1986](https://github.com/open-telemetry/opentelemetry-cpp/pull/1986) +* [EXPORTER] Boolean environment variables not parsed per the spec + [#1982](https://github.com/open-telemetry/opentelemetry-cpp/pull/1982) +* [EXPORTER] Opentracing shim + [#1909](https://github.com/open-telemetry/opentelemetry-cpp/pull/1909) + +## [1.8.2] 2023-01-31 + +* Remove redundant macro check in nostd::shared_ptr [#1939](https://github.com/open-telemetry/opentelemetry-cpp/pull/1939) +* Fix typo in packages.cmake causing incorrect nuget package versions [#1936](https://github.com/open-telemetry/opentelemetry-cpp/pull/1936) +* [METRICS] Custom Aggregation support [#1899](https://github.com/open-telemetry/opentelemetry-cpp/pull/1899) +* Small fix in INSTALL.md for enabling building package. [#1930](https://github.com/open-telemetry/opentelemetry-cpp/pull/1930) +* [METRICS] Fix warning for misconfiguration of PeriodicExportingMetricReader [#1929](https://github.com/open-telemetry/opentelemetry-cpp/pull/1929) +* Make macros.h available for all source files via version.h [#1918](https://github.com/open-telemetry/opentelemetry-cpp/pull/1918) +* [METRICS] Histogram Aggregation: Fix bucket detection logic, + performance improvements, and benchmark tests [#1869](https://github.com/open-telemetry/opentelemetry-cpp/pull/1869) +* Remove unused namespace alias for nostd [#1914](https://github.com/open-telemetry/opentelemetry-cpp/pull/1914) +* [METRICS] Update meter.h [#1907](https://github.com/open-telemetry/opentelemetry-cpp/pull/1907) +* sdk::resource::Resource::Merge should be const [#1905](https://github.com/open-telemetry/opentelemetry-cpp/pull/1905) +* [METRICS] Collect and Export metric data before + PeriodicMetricReader shutdown. [#1860](https://github.com/open-telemetry/opentelemetry-cpp/pull/1860) +* [ETW EXPORTER] Add Virtual destructor for TailSampler, Update Maintainer + mode warnings for MSVC [#1897](https://github.com/open-telemetry/opentelemetry-cpp/pull/1897) +* Fix #1867 Orderly shutdown in examples [#1868](https://github.com/open-telemetry/opentelemetry-cpp/pull/1868) +* [METRICS] minor metrics handling optimizations [#1890](https://github.com/open-telemetry/opentelemetry-cpp/pull/1890) +* fix SpinLockMutex for Intel Compiler [#1885](https://github.com/open-telemetry/opentelemetry-cpp/pull/1885) +* [LOGS] Change BatchLogRecordProcessorFactory::Create to static method [#1876](https://github.com/open-telemetry/opentelemetry-cpp/pull/1876) +* Enable generating deb, rpm, NuGet, tgz, zip package through cmake build [#1662](https://github.com/open-telemetry/opentelemetry-cpp/pull/1662) +* Updated clone command in INSTALL.md [#1818](https://github.com/open-telemetry/opentelemetry-cpp/pull/1818) +* Small cleanup to remove old metrics design docs [#1855](https://github.com/open-telemetry/opentelemetry-cpp/pull/1855) +* [BUILD] Fix build error with older version of VS2017 compiler. [1857](https://github.com/open-telemetry/opentelemetry-cpp/pull/1857) +* [EXPORTERS] Enable setting Span endtime for ETW exporter [#1846](https://github.com/open-telemetry/opentelemetry-cpp/pull/1846) +* [REMOVAL] Remove deprecated experimental semantic conventions [#1743](https://github.com/open-telemetry/opentelemetry-cpp/pull/1743) +* [EXPORTERS] Fix console debug logs for otlp exporters. [#1848](https://github.com/open-telemetry/opentelemetry-cpp/pull/1848) +* [LOGS] Add `include_trace_context` and `EventLogger` [#1884](https://github.com/open-telemetry/opentelemetry-cpp/pull/1884) +* [METRICS] Change BatchLogRecordProcessorFactory::Create to static method +* [BUILD] Fix OTELCPP_MAINTAINER_MODE [#1844](https://github.com/open-telemetry/opentelemetry-cpp/pull/1844) +* [BUILD] Fix compatibility when using clang and libc++, upgrade GTest and + cmake when using C++20 [#1852](https://github.com/open-telemetry/opentelemetry-cpp/pull/1852) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.16.0 + [#1854](https://github.com/open-telemetry/opentelemetry-cpp/pull/1854) +* [SDK] BatchSpanProcessor now logs a warning when dropping a span because the + queue is full + [1871](https://github.com/open-telemetry/opentelemetry-cpp/pull/1871) +* [BUILD] Migrate from @bazel_tools//platforms to [Bazel Platforms](https://github.com/bazelbuild/platforms) + to enable Bazel 6.0.0 compatibility [#1873](https://github.com/open-telemetry/opentelemetry-cpp/pull/1873) +* [BUILD] Cleanup CMake makefiles for nlohmann_json + [#1912](https://github.com/open-telemetry/opentelemetry-cpp/pull/1912) +* [BUILD] Cleanup CMake makefiles for CURL usage + [#1916](https://github.com/open-telemetry/opentelemetry-cpp/pull/1916) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.17.0 + [#1927](https://github.com/open-telemetry/opentelemetry-cpp/pull/1927) +* [MAINTAINER DOC] Define and document a deprecation process, + [DEPRECATION] Deprecate the Jaeger exporter, + implemented by [#1923](https://github.com/open-telemetry/opentelemetry-cpp/pull/1923) +* [BUILD] OTLP HTTP Exporter has build warnings in maintainer mode + [#1943](https://github.com/open-telemetry/opentelemetry-cpp/pull/1943) + +Deprecations: + +* [MAINTAINER DOC] Define and document a deprecation process, + [#1923](https://github.com/open-telemetry/opentelemetry-cpp/pull/1923) + * A new file, [DEPRECATED](./DEPRECATED.md) list all the code currently + deprecated. + * A new [deprecation process](./docs/deprecation-process.md) details the plan to + deprecate and later remove code. +* [DEPRECATION] Deprecate the Jaeger exporter + [#1923](https://github.com/open-telemetry/opentelemetry-cpp/pull/1923) + * The Jaeger Exporter is deprecated, see [DEPRECATED](./DEPRECATED.md) for details. + +Important changes: + +* [BUILD] Cleanup CMake makefiles for CURL usage + [#1916](https://github.com/open-telemetry/opentelemetry-cpp/pull/1916) + * CMake option `WITH_OTLP_HTTP` + * Before this change, the CMake option `WITH_OTLP_HTTP` was unpredictable, + sometime set to ON and sometime set to OFF by default, + depending on whether a CURL package was found or not. + The option `WITH_OTLP_HTTP` was sometime not displayed in the ccmake + UI, making it impossible to even discover there is an option of that name. + * With this change, CMake option `WITH_OTLP_HTTP` is always OFF by + default. WITH_OTLP_HTTP MUST be set to ON explicitly to build the + OTLP HTTP exporter. The option is always visible in the ccmake UI. + * CMake option `BUILD_W3CTRACECONTEXT_TEST` + * Before this change, the W3C trace context tests were built, or + not, in an unpredictable way, depending on the presence, or not, of a + CURL package. In particular, the build could ignore the W3C trace + context tests even when BUILD_W3CTRACECONTEXT_TEST=ON. + * With this change, option BUILD_W3CTRACECONTEXT_TEST is honored. + * HTTP client/server examples + * Before this change, the HTTP client/server examples were built, or + not, in an unpredictable way, depending on the presence, or not, of a + CURL package. + * With this change, a new option `WITH_EXAMPLES_HTTP` is used to + build the HTTP client/server examples. + +## [1.8.1] 2022-12-04 + +* [ETW Exporter] Tail based sampling support [#1780](https://github.com/open-telemetry/opentelemetry-cpp/pull/1780) +* [EXPORTERS] fix typo [affecting otlp exported histogram metrics max uint] [#1827](https://github.com/open-telemetry/opentelemetry-cpp/pull/1827) +* [EXPORTERS] fix enum-compare-switch warning [#1833](https://github.com/open-telemetry/opentelemetry-cpp/pull/1833) +* [METRICS] Change default temporality as "Cumulative" for OTLP metrics +exporters [#1828](https://github.com/open-telemetry/opentelemetry-cpp/pull/1828) +* [BUILD] Moved otlp_grpc_utils.cc to opentelemetry_exporter_otlp_grpc_client. +[#1829](https://github.com/open-telemetry/opentelemetry-cpp/pull/1829) +* Fix type mismatch when move nostd::shared_ptr [#1815](https://github.com/open-telemetry/opentelemetry-cpp/pull/1815) +* [BUILD] Fix Prometheus target name [#1820](https://github.com/open-telemetry/opentelemetry-cpp/pull/1820) +* Clean unused docker files [#1817](https://github.com/open-telemetry/opentelemetry-cpp/pull/1817) +* [BUILD] Fix default bazel build [#1816](https://github.com/open-telemetry/opentelemetry-cpp/pull/1816) +* [BUILD] move client::nosend under test_common [#1811](https://github.com/open-telemetry/opentelemetry-cpp/pull/1811) +* [BUILD] Fix opentelemetry-proto file exists check [#1824](https://github.com/open-telemetry/opentelemetry-cpp/pull/1824) + +## [1.8.0] 2022-11-27 + +* [DOC] Update Metrics status in README.md [#1722](https://github.com/open-telemetry/opentelemetry-cpp/pull/1722) +* [DOC] Remove misleading comments about ABI compatibility for nostd::span [#1731](https://github.com/open-telemetry/opentelemetry-cpp/pull/1731) +* [BUILD] Bump abseil-cpp for cmake CI [#1807](https://github.com/open-telemetry/opentelemetry-cpp/pull/1807) +* [Exporter] Add status code to OTLP grpc trace log [#1792](https://github.com/open-telemetry/opentelemetry-cpp/pull/1792) +* [Exporter] add fix for prometheus exporter build [#1795](https://github.com/open-telemetry/opentelemetry-cpp/pull/1795) +* [BUILD] Add option WITH_BENCHMARK to disable building benchmarks [#1794](https://github.com/open-telemetry/opentelemetry-cpp/pull/1794) +* [BUILD] Fix CI benchmark [#1799](https://github.com/open-telemetry/opentelemetry-cpp/pull/1799) +* [BUILD] bump to gRPC v1.48.1 for bazel CIs [#1786](https://github.com/open-telemetry/opentelemetry-cpp/pull/1786) +* [BUILD] Fix CI build [#1798](https://github.com/open-telemetry/opentelemetry-cpp/pull/1798) +* [BUILD] Fix clang-format in CI [#1796](https://github.com/open-telemetry/opentelemetry-cpp/pull/1796) +* Fix session lock of OtlpHttpClient [#1760](https://github.com/open-telemetry/opentelemetry-cpp/pull/1760) +* [Metrics SDK] Add MeterContext::ForEachMeter() method to process callbacks on + Meter in thread-safe manner [#1783](https://github.com/open-telemetry/opentelemetry-cpp/pull/1783) +* [DOC] Document that clang-format version 10.0 is used. [#1782](https://github.com/open-telemetry/opentelemetry-cpp/pull/1782) +* [BUILD] Upgrade bazel build to use abseil-cpp-20220623.1 [#1779](https://github.com/open-telemetry/opentelemetry-cpp/pull/1779) +* Fix GlobalLogHandler singleton creation order [#1767](https://github.com/open-telemetry/opentelemetry-cpp/pull/1767) +* [Metrics SDK] Change Prometheus CMake target name [#1765](https://github.com/open-telemetry/opentelemetry-cpp/pull/1765) +* [DOC] Cleanup INSTALL.md [#1757](https://github.com/open-telemetry/opentelemetry-cpp/pull/1757) +* [DOC] Format config options in OTLP exporter readme [#1748](https://github.com/open-telemetry/opentelemetry-cpp/pull/1748) +* [DOC] Cleanup ENABLE_METRICS_PREVIEW [#1745](https://github.com/open-telemetry/opentelemetry-cpp/pull/1745) +* [Build] Multiple CURL packages leads to invalid build (#1738) [#1739](https://github.com/open-telemetry/opentelemetry-cpp/pull/1739) +* [Metrics SDK] Cleanup ENABLE_METRICS_PREVIEW [#1735](https://github.com/open-telemetry/opentelemetry-cpp/pull/1735) +* [Logs SDK] LogProcessor, LogExporter class name [#1736](https://github.com/open-telemetry/opentelemetry-cpp/pull/1736) +* [Metrics SDK] Cleanup of old _metric api/sdk [#1734](https://github.com/open-telemetry/opentelemetry-cpp/pull/1734) +* [ETW Exporter] Fix span timestamp(s) precision to nanoseconds [#1726](https://github.com/open-telemetry/opentelemetry-cpp/pull/1726) +* [LOGS SDK] Rename LogProcessor and LogExporter to LogRecordProcessor and LogRecordExporter + [#1727](https://github.com/open-telemetry/opentelemetry-cpp/pull/1727) +* [METRICS SDK] - Remove old metrics from Github CI + [#1733](https://github.com/open-telemetry/opentelemetry-cpp/pull/1733) +* [BUILD] Add CMake OTELCPP_PROTO_PATH [#1730](https://github.com/open-telemetry/opentelemetry-cpp/pull/1730) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.15.0 + [#1761](https://github.com/open-telemetry/opentelemetry-cpp/pull/1761) +* [LOGS SDK] New LogRecord and logs::Recordable implementations. + [#1766](https://github.com/open-telemetry/opentelemetry-cpp/pull/1766) + +Deprecation notes: + +* [Deprecation] Deprecate experimental semantic conventions + [#1744](https://github.com/open-telemetry/opentelemetry-cpp/pull/1744) + * The file + `api/include/opentelemetry/trace/experimental_semantic_conventions.h` + is deprecated, and will be removed in a future release. + Use file + `api/include/opentelemetry/trace/semantic_conventions.h` + instead. + + * The file + `sdk/include/opentelemetry/sdk/resource/experimental_semantic_conventions.h` + is deprecated, and will be removed in a future release. + Use file + `sdk/include/opentelemetry/sdk/resource/semantic_conventions.h` + instead. + + * The function, declared in the global namespace + `uint32_t hashCode(const char *str, uint32_t h = 0)` + is deprecated, and will be removed in a future release. + No replacement will be provided. + Note that function `opentelemetry::utils::hashCode`, + declared in the ETW exporter, is not affected by this deprecation. + +Breaking changes: + +* [SEMANTIC CONVENTIONS] Upgrade to version 1.15.0 + [#1761](https://github.com/open-telemetry/opentelemetry-cpp/pull/1761) + * Naming of semantic conventions has changed from uppercase constants, + like `SemanticConventions::SERVICE_NAME`, + to camel case, like `SemanticConventions::kServiceName`. + This is necessary to avoid collisions with macros in general, + which breaks the build on some platforms. + * Semantic conventions are flagged as experimental, + which is why this change is done in this release. + +## [1.7.0] 2022-10-28 + +* [METRICS SDK] Validate Instrument meta data (name, unit, description) [#1713](https://github.com/open-telemetry/opentelemetry-cpp/pull/1713) +* [DOCS] Document libthrift 0.12.0 doesn't work with Jaeger exporter [#1714](https://github.com/open-telemetry/opentelemetry-cpp/pull/1714) +* [Metrics SDK] Add Monotonic Property to Sum Aggregation, and +unit tests for Up Down Counter [#1675](https://github.com/open-telemetry/opentelemetry-cpp/pull/1675) +* [Metrics SDK] Move Metrics Exemplar processing behind feature flag [#1710](https://github.com/open-telemetry/opentelemetry-cpp/pull/1710) +* [Metrics API/SDK] Change Meter API/SDK to return nostd::unique_ptr + for Sync Instruments [#1707](https://github.com/open-telemetry/opentelemetry-cpp/pull/1707) +which includes breaking change in the Metrics api and sdk. +* [BUILD] Add e2e test to asan & tsan CI [#1670](https://github.com/open-telemetry/opentelemetry-cpp/pull/1670) +* [BUILD] Add otlp-grpc example bazel [#1708](https://github.com/open-telemetry/opentelemetry-cpp/pull/1708) +* [TRACE SDK] Fix debug log of OTLP HTTP exporter and ES log exporter [#1703](https://github.com/open-telemetry/opentelemetry-cpp/pull/1703) +* [METRICS SDK] Fix a potential precision loss on integer in +ReservoirCellIndexFor [#1696](https://github.com/open-telemetry/opentelemetry-cpp/pull/1696) +* [METRICS SDK] Fix Histogram crash [#1685](https://github.com/open-telemetry/opentelemetry-cpp/pull/1685) +* [METRICS SDK] Fix:1676 Segfault when short export period is used for metrics [#1682](https://github.com/open-telemetry/opentelemetry-cpp/pull/1682) +* [METRICS SDK] Add timeout support to MeterContext::ForceFlush [#1673](https://github.com/open-telemetry/opentelemetry-cpp/pull/1673) +* [DOCS] - Minor updates to OStream Metrics exporter documentation [#1679](https://github.com/open-telemetry/opentelemetry-cpp/pull/1679) +* [DOCS] Fix:#1575 API Documentation for Metrics SDK and API [#1678](https://github.com/open-telemetry/opentelemetry-cpp/pull/1678) +* [BUILD] Fixed compiler warnings [#1677](https://github.com/open-telemetry/opentelemetry-cpp/pull/1677) +* [METRICS SDK] Fix threading issue between Meter::RegisterSyncMetricStorage + and Meter::Collect [#1666](https://github.com/open-telemetry/opentelemetry-cpp/pull/1666) +* [METRICS SDK] Fix data race on MeterContext::meters_ [#1668](https://github.com/open-telemetry/opentelemetry-cpp/pull/1668) +* [METRICS SDK] Fix observable Gauge metrics generation [#1651](https://github.com/open-telemetry/opentelemetry-cpp/pull/1651) +* [BUILD] Detect ARCH=sparc in CMake [#1660](https://github.com/open-telemetry/opentelemetry-cpp/pull/1660) +* [SDK] Add user agent for OTLP http/grpc client [#1657](https://github.com/open-telemetry/opentelemetry-cpp/pull/1657) +* [BUILD] Fix clang and gcc warnings [#1658](https://github.com/open-telemetry/opentelemetry-cpp/pull/1658) +* [Metrics SDK] Add Metrics ExemplarFilter and ExemplarReservoir [#1584](https://github.com/open-telemetry/opentelemetry-cpp/pull/1584) +* [LOGS SDK] Rename OnReceive to OnEmit [#1652](https://github.com/open-telemetry/opentelemetry-cpp/pull/1652) +* [METRICS SDK] Fix Observable Gauge does not reflect updated values, +and send the old value always [#1641](https://github.com/open-telemetry/opentelemetry-cpp/pull/1641) +* [Metrics SDK] Change boundary type to double for Explicit Bucket Histogram Aggregation, +and change default bucket range [#1626](https://github.com/open-telemetry/opentelemetry-cpp/pull/1626) +* [METRICS SDK] Fix occasional Segfault with LongCounter instrument [#1638](https://github.com/open-telemetry/opentelemetry-cpp/pull/1638) +* [BUILD] Bump vcpk to 2022.08.15 [#1633](https://github.com/open-telemetry/opentelemetry-cpp/pull/1633) +* [BUILD] Bump gRPC to v1.48.1 for CMake Linux CI [#1608](https://github.com/open-telemetry/opentelemetry-cpp/pull/1608) +* [Metrics] Switch to explicit 64 bit integers [#1686](https://github.com/open-telemetry/opentelemetry-cpp/pull/1686) + which includes breaking change in the Metrics api and sdk. +* [Metrics SDK] Add support for Pull Metric Exporter [#1701](https://github.com/open-telemetry/opentelemetry-cpp/pull/1701) + which includes breaking change in the Metrics api. +* [BUILD] Add CMake OTELCPP_MAINTAINER_MODE [#1650](https://github.com/open-telemetry/opentelemetry-cpp/pull/1650) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.14.0 [#1697](https://github.com/open-telemetry/opentelemetry-cpp/pull/1697) + +Notes: + +Metrics API/SDK GA release includes PRs [#1686](https://github.com/open-telemetry/opentelemetry-cpp/pull/1686), +[#1701](https://github.com/open-telemetry/opentelemetry-cpp/pull/1701), and +[#1707](https://github.com/open-telemetry/opentelemetry-cpp/pull/1707) +with breaking changes in the Metrics API and SDK. + +## [1.6.1] 2022-09-22 + +* [BUILD] Upgrade opentelemetry-proto to v0.19.0 [#1579](https://github.com/open-telemetry/opentelemetry-cpp/pull/1579) +* [METRICS EXPORTER] Add `OtlpGrpcMetricExporterFactory` and `OtlpHttpMetricExporterFactory`. + [#1606](https://github.com/open-telemetry/opentelemetry-cpp/pull/1606) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.13.0 [#1624](https://github.com/open-telemetry/opentelemetry-cpp/pull/1624) +* [BUILD] Fixes span creation benchmark issue. [#1622](https://github.com/open-telemetry/opentelemetry-cpp/pull/1622) +* [BUILD] Fix more build warnings (#1616) [#1620](https://github.com/open-telemetry/opentelemetry-cpp/pull/1620) +* [SDK gRPC]: Fix out-of-bounds access of string_view in GrpcClientCarrier in + the example + [#1619](https://github.com/open-telemetry/opentelemetry-cpp/pull/1619) +* [EXPORTER ETW] Add Trace flags in SpanContext [#1618](https://github.com/open-telemetry/opentelemetry-cpp/pull/1618) +* [SDK] resource sdk: Update Resource::Merge function docs [#1615](https://github.com/open-telemetry/opentelemetry-cpp/pull/1615) +* [BUILD] Fix build warnings [#1613](https://github.com/open-telemetry/opentelemetry-cpp/pull/1613) +* [API BUILD] Fix header only api singletons (#1520) [#1604](https://github.com/open-telemetry/opentelemetry-cpp/pull/1604) +* [METRICS SDK] Fix default value of + `OtlpHttpMetricExporterOptions::aggregation_temporality`. + [#1601](https://github.com/open-telemetry/opentelemetry-cpp/pull/1601) +* [METRICS EXAMPLE] Example for OTLP gRPC exporter for Metrics. [#1598](https://github.com/open-telemetry/opentelemetry-cpp/pull/1598) +* [SDK] Fix `LoggerContext::Shutdown` and tsan of `OtlpHttpClient` [#1592](https://github.com/open-telemetry/opentelemetry-cpp/pull/1592) +* [METRICS SDK] Fix 1585 - Multiple cumulative metric collections without + measurement recording. + [#1586](https://github.com/open-telemetry/opentelemetry-cpp/pull/1586) +* [BUILD] metrics warnings [#1583](https://github.com/open-telemetry/opentelemetry-cpp/pull/1583) +* [METRICS SDK] Fix ObservableInstrument::RemoveCallback [#1582](https://github.com/open-telemetry/opentelemetry-cpp/pull/1582) +* [SDK] Add error log when getting a http error code [#1581](https://github.com/open-telemetry/opentelemetry-cpp/pull/1581) +* [EXPORTER] ETW Exporter - Add support for Sampler and ID Generator [#1547](https://github.com/open-telemetry/opentelemetry-cpp/pull/1547) + +Notes: + +While [OpenTelemetry semantic +convention](https://github.com/open-telemetry/opentelemetry-specification/tree/main/semantic_conventions) +is still in experimental state, PR +[#1624](https://github.com/open-telemetry/opentelemetry-cpp/pull/1624) upgraded +it from 1.12.0 to 1.13.0 which **MAY** break the instrumentation library. Please +update the semantic convention in instrumentation library is needed. + +## [1.6.0] 2022-08-15 + +* [METRICS SDK] Calling Observable Instruments callback during metrics + collection + [#1554](https://github.com/open-telemetry/opentelemetry-cpp/pull/1554) +* [METRICS CI] Add CI jobs for new and deprecated metrics [#1531](https://github.com/open-telemetry/opentelemetry-cpp/pull/1531) +* [METRICS BUILD] Fix metrics asan and tsan CI [#1562](https://github.com/open-telemetry/opentelemetry-cpp/pull/1562) +* [METRICS SDK] remove throw check from metrics with noexcept [#1560](https://github.com/open-telemetry/opentelemetry-cpp/pull/1560) +* [METRICS SDK] fix metrics race condition [#1552](https://github.com/open-telemetry/opentelemetry-cpp/pull/1552) +* [METRICS SDK] Fix metrics context circular reference [#1535](https://github.com/open-telemetry/opentelemetry-cpp/pull/1535) +* [METRICS EXPORTER] Improve scope/instrument names in metrics ostream exporter [#1544](https://github.com/open-telemetry/opentelemetry-cpp/pull/1544) +* [METRICS BUILD] fix IWYU error in instruments.h [#1555](https://github.com/open-telemetry/opentelemetry-cpp/pull/1555) +* [EXPORTER] Prometheus exporter support Gauge Type [#1553](https://github.com/open-telemetry/opentelemetry-cpp/pull/1553) +* [METRICS SDK] Fix default Metric view name [#1515](https://github.com/open-telemetry/opentelemetry-cpp/pull/1515) +* [SDK] Fix infinitely waiting when shutdown with more than one running http + sessions. + [#1549](https://github.com/open-telemetry/opentelemetry-cpp/pull/1549) +* [METRICS SDK] Fix OTLP gRPC Metrics env variables [#1543](https://github.com/open-telemetry/opentelemetry-cpp/pull/1543) +* [METRICS SDK] Metric aggregation temporality controls [#1541](https://github.com/open-telemetry/opentelemetry-cpp/pull/1541) +* [METRICS SDK] Histogram min/max support [#1540](https://github.com/open-telemetry/opentelemetry-cpp/pull/1540) +* [METRICS EXPORTER] ostream exporter should print out resource attributes [#1523](https://github.com/open-telemetry/opentelemetry-cpp/pull/1523) +* [METRICS SDK] Support multiple async callbacks [#1495](https://github.com/open-telemetry/opentelemetry-cpp/pull/1495) +* [BUILD] Fix code scanning alert [#1530](https://github.com/open-telemetry/opentelemetry-cpp/pull/1530) +* [BUILD] Fix several compiling/linking errors [#1539](https://github.com/open-telemetry/opentelemetry-cpp/pull/1539) +* [TRACE SDK] Add SpanData getter for Span Recordable [#1508](https://github.com/open-telemetry/opentelemetry-cpp/pull/1508) +* [LOG SDK] Fix log sdk builder (#1486) [#1524](https://github.com/open-telemetry/opentelemetry-cpp/pull/1524) +* [METRICS SDK] Add configuration options for Aggregation creation [#1513](https://github.com/open-telemetry/opentelemetry-cpp/pull/1513) +* [METRICS TEST] Fix metrics unit test memory leack [#1533](https://github.com/open-telemetry/opentelemetry-cpp/pull/1533) +* [LOG SDK] Add log sdk builders (#1486) [#1524](https://github.com/open-telemetry/opentelemetry-cpp/pull/1524) + +## [1.5.0] 2022-07-29 + +* [EXPORTER BUILD] Add resources to dep list of prometheus exporter test [#1527](https://github.com/open-telemetry/opentelemetry-cpp/pull/1527) +* [BUILD] Don't require applications using jaeger exporter to know about libcurl + [#1518](https://github.com/open-telemetry/opentelemetry-cpp/pull/1518) +* [EXPORTER] Inline print_value() in ostream exporter [#1512](https://github.com/open-telemetry/opentelemetry-cpp/pull/1512) +* [SDK] fix: urlPaser will incorrect parsing url like `http://abc.com/xxx@xxx/a/b` + [#1511](https://github.com/open-telemetry/opentelemetry-cpp/pull/1511) +* [SDK] Rename `InstrumentationLibrary` to `InstrumentationScope` [#1507](https://github.com/open-telemetry/opentelemetry-cpp/pull/1507) +* [BUILD] Try to build nlohmann-json only it's depended. [#1505](https://github.com/open-telemetry/opentelemetry-cpp/pull/1505) +* [EXPORTER BUILD] Link opentelemetry_api to ETW exporter test [#1503](https://github.com/open-telemetry/opentelemetry-cpp/pull/1503) +* [SDK] Add automatically semantic conventions from the spec (#873) [#1497](https://github.com/open-telemetry/opentelemetry-cpp/pull/1497) +* [SDK] Use template class for in-memory data. [#1496](https://github.com/open-telemetry/opentelemetry-cpp/pull/1496) +* [SDK] fix compiler warnings [#1499](https://github.com/open-telemetry/opentelemetry-cpp/pull/1499) +* [TRACE SDK] Add trace sdk builders (#1393) [#1471](https://github.com/open-telemetry/opentelemetry-cpp/pull/1471) +* [METRICS BUILD] Enable bazel build for metrics proto files [#1489](https://github.com/open-telemetry/opentelemetry-cpp/pull/1489) +* [METRICS EXPORTER] Add metrics OTLP/HTTP exporter [#1487](https://github.com/open-telemetry/opentelemetry-cpp/pull/1487) +* [EXPORTER] fix otlp grpc exporter naming [#1488](https://github.com/open-telemetry/opentelemetry-cpp/pull/1488) +* [BUILD] Remove `--config Debug` when installing. [#1480](https://github.com/open-telemetry/opentelemetry-cpp/pull/1480) +* [EXPORTER] Fix endpoint in otlp grpc exporter [#1474](https://github.com/open-telemetry/opentelemetry-cpp/pull/1474) +* [EXAMPLE] Fix memory ownership of InMemorySpanExporter (#1473) [#1471](https://github.com/open-telemetry/opentelemetry-cpp/pull/1471) +* [EXPORTER TESTS] Prometheus unit test [#1461](https://github.com/open-telemetry/opentelemetry-cpp/pull/1461) +* [DOCS] Update docs to use relative code links. [#1447](https://github.com/open-telemetry/opentelemetry-cpp/pull/1447) +* [SDK] Remove reference to deprecated InstrumentationLibrary in OTLP [#1469](https://github.com/open-telemetry/opentelemetry-cpp/pull/1469) +* [SDK] Fix trace kIsSampled flag set incorrectly [#1465](https://github.com/open-telemetry/opentelemetry-cpp/pull/1465) +* [METRICS EXPORTER] OTLP gRPC Metrics Exporter [#1454](https://github.com/open-telemetry/opentelemetry-cpp/pull/1454) +* [EXPORTER] fix prometheus exporter failure type [#1460](https://github.com/open-telemetry/opentelemetry-cpp/pull/1460) +* [SDK] Fix build warnings about missing aggregates. [#1368](https://github.com/open-telemetry/opentelemetry-cpp/pull/1368) +* [EXT] `curl::HttpClient` use `curl_multi_handle` instead of creating a thread + for every request and it's able to reuse connections now. ([#1317](https://github.com/open-telemetry/opentelemetry-cpp/pull/1317)) +* [SEMANTIC CONVENTIONS] Upgrade to version 1.12.0 [#873](https://github.com/open-telemetry/opentelemetry-cpp/pull/873) + +## [1.4.1] 2022-06-19 + +* [METRICS SDK] Fix variables inizialization [#1430](https://github.com/open-telemetry/opentelemetry-cpp/pull/1430) +* [DOCS] Fixed broken link to OpenTelemetry.io (#1445) [#1446](https://github.com/open-telemetry/opentelemetry-cpp/pull/1446) +* [BUILD] Upgrade nlohmann_json to 3.10.5 (#1438) [#1441](https://github.com/open-telemetry/opentelemetry-cpp/pull/1441) +* [METRICS SDK] fix histogram [#1440](https://github.com/open-telemetry/opentelemetry-cpp/pull/1440) +* [DOCS] Fix GettingStarted documentation for Jaeger HTTP exporter (#1347) [#1439](https://github.com/open-telemetry/opentelemetry-cpp/pull/1439) +* [BUILD] install sdk-config.h [#1419](https://github.com/open-telemetry/opentelemetry-cpp/pull/1419) +* [EXAMPLE] Log current timestamp instead of epoch time [#1434](https://github.com/open-telemetry/opentelemetry-cpp/pull/1434) +* [METRICS SDK] Add attributes/dimensions to metrics ostream exporter [#1400](https://github.com/open-telemetry/opentelemetry-cpp/pull/1400) +* [SDK] Fix global log handle symbols when using dlopen [#1420](https://github.com/open-telemetry/opentelemetry-cpp/pull/1420) +* [METRICS] Only record non-negative / finite / Non-NAN histogram values([#1427](https://github.com/open-telemetry/opentelemetry-cpp/pull/1427)) +* [ETW EXPORTER] Fix ETW log exporter header inclusion [#1426](https://github.com/open-telemetry/opentelemetry-cpp/pull/1426) +* [ETW EXPORTER] Copy string_view passed to ETW exporter in PropertyVariant [#1425](https://github.com/open-telemetry/opentelemetry-cpp/pull/1425) +* [METRICS API/SDK] Pass state to async callback function. [#1408](https://github.com/open-telemetry/opentelemetry-cpp/pull/1408) +* [BUILD] fix nlohmann_json's (third party) include dir [#1415](https://github.com/open-telemetry/opentelemetry-cpp/pull/1415) +* [SDK] fix: WaitOnSocket select error when sockfd above FD_SETSIZE [#1410](https://github.com/open-telemetry/opentelemetry-cpp/pull/1410) +* [SDK] fix OTEL_INTERNAL_LOG_INFO [#1407](https://github.com/open-telemetry/opentelemetry-cpp/pull/1407) +* [DOCS] Document Getting Started with Prometheus and Grafana [#1396](https://github.com/open-telemetry/opentelemetry-cpp/pull/1396) + +## [1.4.0] 2022-05-17 + +* [API SDK] Upgrade proto to v0.17.0, update log data model ([#1383](https://github.com/open-telemetry/opentelemetry-cpp/pull/1383)) +* [BUILD] Alpine image ([#1382](https://github.com/open-telemetry/opentelemetry-cpp/pull/1382)) +* [LOGS SDK] Get span_id from context when Logger::Log received invalid span_id + ([#1398](https://github.com/open-telemetry/opentelemetry-cpp/pull/1398)) +* [METRICS SDK] Connect async storage with async instruments ([#1388](https://github.com/open-telemetry/opentelemetry-cpp/pull/1388)) +* [DOCS] Getting started document using ostream exporter ([#1394](https://github.com/open-telemetry/opentelemetry-cpp/pull/1394)) +* [BUILD] Fix missing link to nlohmann_json ([#1390](https://github.com/open-telemetry/opentelemetry-cpp/pull/1390)) +* [SDK] Fix sharing resource in batched exported spans ([#1386](https://github.com/open-telemetry/opentelemetry-cpp/pull/1386)) +* [PROTOCOL \& LOGS] Upgrade proto to v0.17.0, update log data model ([#1383](https://github.com/open-telemetry/opentelemetry-cpp/pull/1383)) +* [METRICS SDK] Remove un-necessary files. ([#1379](https://github.com/open-telemetry/opentelemetry-cpp/pull/1379)) +* [EXPORTER] Prometheus exporter meters and instrument name ([#1378](https://github.com/open-telemetry/opentelemetry-cpp/pull/1378)) +* [API] Add noexcept/const qualifier at missing places for Trace API. ([#1374](https://github.com/open-telemetry/opentelemetry-cpp/pull/1374)) +* [SDK] Fix empty tracestate header propagation ([#1373](https://github.com/open-telemetry/opentelemetry-cpp/pull/1373)) +* [METRICS SDK] Reuse temporal metric storage for sync storage ([#1369](https://github.com/open-telemetry/opentelemetry-cpp/pull/1369)) +* [SDK] Fix baggage propagation for empty/invalid baggage context ([#1367](https://github.com/open-telemetry/opentelemetry-cpp/pull/1367)) +* [BUILD] Export opentelemetry_otlp_recordable ([#1365](https://github.com/open-telemetry/opentelemetry-cpp/pull/1365)) +* [TESTS] Disable test on prometheus-cpp which not need ([#1363](https://github.com/open-telemetry/opentelemetry-cpp/pull/1363)) +* [METRICS] Fix class member initialization order ([#1360](https://github.com/open-telemetry/opentelemetry-cpp/pull/1360)) +* [METRICS SDK] Simplify SDK Configuration: Use View with default aggregation if + no matching View is configured + ([#1358](https://github.com/open-telemetry/opentelemetry-cpp/pull/1358)) +* [BUILD] Add missing include guard ([#1357](https://github.com/open-telemetry/opentelemetry-cpp/pull/1357)) +* [ETW EXPORTER] Fix scalar delete against array ([#1356](https://github.com/open-telemetry/opentelemetry-cpp/pull/1356)) +* [ETW EXPORTER] Conditional include for codecvt header ([#1355](https://github.com/open-telemetry/opentelemetry-cpp/pull/1355)) +* [BUILD] Use latest TraceLoggingDynamic.h ([#1354](https://github.com/open-telemetry/opentelemetry-cpp/pull/1354)) +* [SDK] Add explicit type cast in baggage UrlDecode ([#1353](https://github.com/open-telemetry/opentelemetry-cpp/pull/1353)) +* [METRICS SDK] Remove exporter registration to meter provider ([#1350](https://github.com/open-telemetry/opentelemetry-cpp/pull/1350)) +* [METRICS SDK] Fix output time in metrics OStream exporter ([#1346](https://github.com/open-telemetry/opentelemetry-cpp/pull/1346)) +* [BUILD] ostream metrics cmake ([#1344](https://github.com/open-telemetry/opentelemetry-cpp/pull/1344)) +* [BUILD] Link `opentelemetry_ext` with `opentelemetry_api` ([#1336](https://github.com/open-telemetry/opentelemetry-cpp/pull/1336)) +* [METRICS SDK] Enable metric collection for Async Instruments - Delta and + Cumulative + ([#1334](https://github.com/open-telemetry/opentelemetry-cpp/pull/1334)) +* [BUILD] Dependencies image as artifact ([#1333](https://github.com/open-telemetry/opentelemetry-cpp/pull/1333)) +* [EXAMPLE] Prometheus example ([#1332](https://github.com/open-telemetry/opentelemetry-cpp/pull/1332)) +* [METRICS EXPORTER] Prometheus exporter ([#1331](https://github.com/open-telemetry/opentelemetry-cpp/pull/1331)) +* [METRICS] Metrics histogram example ([#1330](https://github.com/open-telemetry/opentelemetry-cpp/pull/1330)) +* [TESTS] Replace deprecated googletest API ([#1327](https://github.com/open-telemetry/opentelemetry-cpp/pull/1327)) +* [BUILD] Fix Ninja path ([#1326](https://github.com/open-telemetry/opentelemetry-cpp/pull/1326)) +* [API] Update yield logic for ARM processor ([#1325](https://github.com/open-telemetry/opentelemetry-cpp/pull/1325)) +* [BUILD] Fix metrics compiler warnings ([#1328](https://github.com/open-telemetry/opentelemetry-cpp/pull/1328)) +* [METRICS SDK] Implement Merge and Diff operation for Histogram Aggregation ([#1303](https://github.com/open-telemetry/opentelemetry-cpp/pull/1303)) + +Notes: + +While opentelemetry-cpp Logs are still in experimental stage, +[#1383](https://github.com/open-telemetry/opentelemetry-cpp/pull/1383) updated +opentelemetry-proto to 0.17.0, which includes some breaking change in the +protocol, like +[this](https://github.com/open-telemetry/opentelemetry-proto/pull/373). This +makes `name` parameter for our log API unnecessary. However, this parameter is +marked deprecated instead of being removed in this release, and it will be +removed in future release. + +## [1.3.0] 2022-04-11 + +* [ETW EXPORTER] ETW provider handle cleanup ([#1322](https://github.com/open-telemetry/opentelemetry-cpp/pull/1322)) +* [BUILD] Move public definitions into `opentelemetry_api`. ([#1314](https://github.com/open-telemetry/opentelemetry-cpp/pull/1314)) +* [METRICS] OStream example ([#1312](https://github.com/open-telemetry/opentelemetry-cpp/pull/1312)) +* [BUILD] Rename `http_client_curl` to `opentelemetry_http_client_curl` ([#1301](https://github.com/open-telemetry/opentelemetry-cpp/pull/1301)) +* [METRICS SDK] Add InstrumentationInfo and Resource to the metrics data to be + exported. + ([#1299](https://github.com/open-telemetry/opentelemetry-cpp/pull/1299)) +* [TESTS] Add building test without RTTI ([#1294](https://github.com/open-telemetry/opentelemetry-cpp/pull/1294)) +* [METRICS SDK] Implement periodic exporting metric reader ([#1286](https://github.com/open-telemetry/opentelemetry-cpp/pull/1286)) +* [SDK] Bugfix: span SetAttribute crash ([#1283](https://github.com/open-telemetry/opentelemetry-cpp/pull/1283)) +* [BUG] Remove implicitly deleted default constructor ([#1267](https://github.com/open-telemetry/opentelemetry-cpp/pull/1267)) +* [METRICS SDK] Synchronous Metric collection (Delta , Cumulative) ([#1265](https://github.com/open-telemetry/opentelemetry-cpp/pull/1265)) +* [METRICS SDK] Metrics exemplar round 1 ([#1264](https://github.com/open-telemetry/opentelemetry-cpp/pull/1264)) +* [EXPORTER] Fix: use CURLOPT_TIMEOUT_MS to config OtlpHttpExporter's timeout + instead of CURLOPT_TIMEOUT + ([#1261](https://github.com/open-telemetry/opentelemetry-cpp/pull/1261)) +* [EXPORTER] Jaeger Exporter - Populate Span Links ([#1251](https://github.com/open-telemetry/opentelemetry-cpp/pull/1251)) +* [SDK] Reorder the destructor of members in LoggerProvider and TracerProvider ([#1245](https://github.com/open-telemetry/opentelemetry-cpp/pull/1245)) +* [METRICS SDK] Enable metric collection from MetricReader ([#1241](https://github.com/open-telemetry/opentelemetry-cpp/pull/1241)) +* [METRICS SDK] Asynchronous Aggregation storage ([#1232](https://github.com/open-telemetry/opentelemetry-cpp/pull/1232)) +* [METRICS SDK] Synchronous Instruments - Aggregation Storage(s) creation for + configured views + ([#1219](https://github.com/open-telemetry/opentelemetry-cpp/pull/1219)) +* [BUILD] Added s390x arch into CMake build. ([#1216](https://github.com/open-telemetry/opentelemetry-cpp/pull/1216)) +* [API] Allow extension of the lifetime of ContextStorage. ([#1214](https://github.com/open-telemetry/opentelemetry-cpp/pull/1214)) +* [METRICS SDK] Add Aggregation storage ([#1213](https://github.com/open-telemetry/opentelemetry-cpp/pull/1213)) +* [TESTS] Fix ostream_log_test Mac ([#1208](https://github.com/open-telemetry/opentelemetry-cpp/pull/1208)) +* [BUILD] Update grpc to v1.43.2 to support VS2022/MSVC 19.30 and bazel 5.0 ([#1207](https://github.com/open-telemetry/opentelemetry-cpp/pull/1207)) +* [DOCS] Benchmark documentation ([#1205](https://github.com/open-telemetry/opentelemetry-cpp/pull/1205)) +* [DOCS] Fix errors in SDK documentation ([#1201](https://github.com/open-telemetry/opentelemetry-cpp/pull/1201)) +* [METRICS EXPORTER] Ostream metric exporter ([#1196](https://github.com/open-telemetry/opentelemetry-cpp/pull/1196)) +* [Metrics SDK] Filtering metrics attributes ([#1191](https://github.com/open-telemetry/opentelemetry-cpp/pull/1191)) +* [Metrics SDK] Sync and Async Instruments SDK ([#1184](https://github.com/open-telemetry/opentelemetry-cpp/pull/1184)) +* [Metrics SDK] Add Aggregation as part of metrics SDK. ([#1178](https://github.com/open-telemetry/opentelemetry-cpp/pull/1178)) +* [BUILD] Cmake: thrift requires boost headers, include them as + Boost_INCLUDE_DIRS + ([#1100](https://github.com/open-telemetry/opentelemetry-cpp/pull/1100)) + +Notes: + +[#1301](https://github.com/open-telemetry/opentelemetry-cpp/pull/1301) added +`opentelemetry_` as prefix to http_client_curl library for resolving potential +naming conflict, this could break existing cmake build if http_client_curl is +listed as explicit dependency in user's cmake file. + +## [1.2.0] 2022-01-31 + +* [CI] Continuous benchmark tests as part of the CI ([#1174](https://github.com/open-telemetry/opentelemetry-cpp/pull/1174)) +* [API] Allow to use external abseil for bazel targets ([#1172](https://github.com/open-telemetry/opentelemetry-cpp/pull/1172)) +* [EXPORTER] Importing gsl::span if std::span is not available ([#1167](https://github.com/open-telemetry/opentelemetry-cpp/pull/1167)) +* [EXPORTER] Synchronized calls to Exporter::Export & Shutdown ([#1164](https://github.com/open-telemetry/opentelemetry-cpp/pull/1164)) +* [EXPORTER] OTLP http exporter block thread ([#1163](https://github.com/open-telemetry/opentelemetry-cpp/pull/1163)) +* [TESTS] Jaeger: ThriftSender unit test ([#1162](https://github.com/open-telemetry/opentelemetry-cpp/pull/1162)) +* [EXPORTER] InMemorySpanExporter shutdown fix ([#1161](https://github.com/open-telemetry/opentelemetry-cpp/pull/1161)) +* [EXPORTER] Fix leak in Jaeger exporter ([#1160](https://github.com/open-telemetry/opentelemetry-cpp/pull/1160)) +* [TESTS] ZipkinExporter unit-tests ([#1155](https://github.com/open-telemetry/opentelemetry-cpp/pull/1155)) +* [SDK] Logger: propagating resources through LoggerProvider ([#1154](https://github.com/open-telemetry/opentelemetry-cpp/pull/1154)) +* [SDK] Logger: support for instrumentation library ([#1149](https://github.com/open-telemetry/opentelemetry-cpp/pull/1149)) +* [SDK] Add log level for internal log of sdk ([#1147](https://github.com/open-telemetry/opentelemetry-cpp/pull/1147)) +* [METRICS] Metrics SDK: View API ([#1110](https://github.com/open-telemetry/opentelemetry-cpp/pull/1110)) + +Notes on experimental features: + +[#1149](https://github.com/open-telemetry/opentelemetry-cpp/pull/1149) and +[#1154](https://github.com/open-telemetry/opentelemetry-cpp/pull/1154) from +above CHANGELOG introduced API changes which are not backward compatible with +previous logs, please update API package to this release if +`ENABLE_LOGS_PREVIEW` is turned on (it is turned off by default). + +## [1.1.1] 2021-12-20 + +* [SDK] Rename OTEL_CPP_GET_ATTR macro, and define it using fully qualified attr + function + ([#1140](https://github.com/open-telemetry/opentelemetry-cpp/pull/1140)) +* [SDK] Default resource attributes and attributes in OTEL_RESOURCE_ATTRIBUTES + are missing when using Otlp*LogExporter + ([#1082](https://github.com/open-telemetry/opentelemetry-cpp/pull/1082)) +* [METRICS] Add Meter and MeterProvider in the SDK + ([#1078](https://github.com/open-telemetry/opentelemetry-cpp/pull/1078)) +* [EXPORTER] ZipkinExporter shutdown + ([#1153](https://github.com/open-telemetry/opentelemetry-cpp/pull/1153)) +* [EXPORTER] Jaeger exporter shutdown + ([#1150](https://github.com/open-telemetry/opentelemetry-cpp/pull/1150)) +* [EXPORTER] Bugfix: `jaeger::TUDPTransport::write` crash when `getaddrinfo` + returns error + ([#1116](https://github.com/open-telemetry/opentelemetry-cpp/pull/1116)) +* [EXPORTER] Bugfix: Jaeger exporter: extend supported attributes types + ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) +* [EXPORTER] Fix otlp generates null span ids + ([#1113](https://github.com/open-telemetry/opentelemetry-cpp/pull/1113)) +* [EXPORTER] Jaeger bazel (Linux only) + ([#1077](https://github.com/open-telemetry/opentelemetry-cpp/pull/1077)) +* [DOCS] Add note on DLL support + ([#1137](https://github.com/open-telemetry/opentelemetry-cpp/pull/1137)) +* [DOCS] Improve the instructions for Bazel build + ([#1136](https://github.com/open-telemetry/opentelemetry-cpp/pull/1136)) +* [DOCS] Document dependencies + ([#1119](https://github.com/open-telemetry/opentelemetry-cpp/pull/1119)) +* [DOCS] Dockerfile for quick demo/troubleshooting purpose + ([#905](https://github.com/open-telemetry/opentelemetry-cpp/pull/905)) +* [TESTS] Fix data race in BM_ThreadYieldSpinLockThrashing + ([#1099](https://github.com/open-telemetry/opentelemetry-cpp/pull/1099)) +* [EXAMPLE] Otlp gRPC log example + ([#1083](https://github.com/open-telemetry/opentelemetry-cpp/pull/1083)) +* [BUILD] C++20 not Building with VS2019 + ([#1144](https://github.com/open-telemetry/opentelemetry-cpp/pull/1144)) +* [BUILD] Mark tags to bazel + targets([#1075](https://github.com/open-telemetry/opentelemetry-cpp/pull/1075)) + +## [1.1.0] 2021-11-19 + +* [BUILD] build release tarball when nlohmann-json not installed + ([#1074](https://github.com/open-telemetry/opentelemetry-cpp/pull/1074)) +* [SDK] Bugfix: regex is neither working on GCC 4.9.x + ([#1069](https://github.com/open-telemetry/opentelemetry-cpp/pull/1069)) +* [SDK] Improvement: span_id should not break strict aliasing. + ([#1068](https://github.com/open-telemetry/opentelemetry-cpp/pull/1068)) +* [EXAMPLE] OTLP HTTP log example + ([#1062](https://github.com/open-telemetry/opentelemetry-cpp/pull/1062)) +* [SDK] OTLP gRPC log export should fail after shutdown + ([#1064](https://github.com/open-telemetry/opentelemetry-cpp/pull/1064)) +* [BUILD] Building otlp exporter from the release tarball + ([#1056](https://github.com/open-telemetry/opentelemetry-cpp/pull/1056)) +* [METRICS] Move old metrics implementation to different directory, and rename + targets to \_deprecated + ([#1053](https://github.com/open-telemetry/opentelemetry-cpp/pull/1053)) +* [EXPORTER] Add OTLP/gRPC Log Exporter + ([#1048](https://github.com/open-telemetry/opentelemetry-cpp/pull/1048)) +* [EXPORTER] Prometheus Exporter + ([#1031](https://github.com/open-telemetry/opentelemetry-cpp/pull/1031)) +* [EXPORTER] Add OTLP/HTTP Log Exporter + ([#1030](https://github.com/open-telemetry/opentelemetry-cpp/pull/1030)) +* [SDK] fix: issue 368- consistent namespace scope resolution + ([#1008](https://github.com/open-telemetry/opentelemetry-cpp/pull/1008)) + +## [1.0.1] 2021-10-21 + +* [EXPORTER] Exports span attributes to ETW + ([#1021](https://github.com/open-telemetry/opentelemetry-cpp/pull/1021)) +* [BUILD] cmake: add FindThrift.cmake find module method for thrift + ([#1020](https://github.com/open-telemetry/opentelemetry-cpp/pull/1020)) +* [BUILD] Fix nlohmann_json package dependency + ([#1017](https://github.com/open-telemetry/opentelemetry-cpp/pull/1017)) +* [EXPORTER] Change OTLP/HTTP default port from 4317 to 4318 + ([#1018](https://github.com/open-telemetry/opentelemetry-cpp/pull/1018)) +* [EXPORTER] ETW Log Exporter + ([#1006](https://github.com/open-telemetry/opentelemetry-cpp/pull/1006)) +* [API] Adding new Logger:log() method + ([#1005](https://github.com/open-telemetry/opentelemetry-cpp/pull/1005)) +* [EXPORTER] Remove scheme from OTLP endpoint before passing to gRPC + ([#988](https://github.com/open-telemetry/opentelemetry-cpp/pull/988)) +* [BUILD] Update opentelemetry-proto for bazel build to 0.9.0 + ([#984](https://github.com/open-telemetry/opentelemetry-cpp/pull/984)) +* [BUILD] Cross compling grpc_cpp_plugin not found bug + ([#982](https://github.com/open-telemetry/opentelemetry-cpp/pull/982)) +* [EXPORTER] Support environment variables for both `OtlpGrpcExporter` and + `OtlpHttpExporter` + ([#983](https://github.com/open-telemetry/opentelemetry-cpp/pull/983)) +* [API/SDK] Add schema_url support to both Resource and InstrumentationLibrary + ([#979](https://github.com/open-telemetry/opentelemetry-cpp/pull/979)) +* [BUILD] Fix build issue where _memcpy_ was not declared in scope + ([#985](https://github.com/open-telemetry/opentelemetry-cpp/issues/985)) + +## [1.0.0] 2021-09-16 + +### API + +* Document DefaultSpan, remove DefaultTracer + ([#959](https://github.com/open-telemetry/opentelemetry-cpp/pull/959)) +* Separate baggage<->Context api from Baggage Propagator + ([#963](https://github.com/open-telemetry/opentelemetry-cpp/pull/963)) +* Remove unused public API to_span_ptr + ([#964](https://github.com/open-telemetry/opentelemetry-cpp/pull/964)) +* :collision: Make span context management public + ([#967](https://github.com/open-telemetry/opentelemetry-cpp/pull/967)) +* Support determining parent span from Context while creating new Span + ([#969](https://github.com/open-telemetry/opentelemetry-cpp/pull/969)) +* :collision: Traces: Add note on experimental semantic convention + implementation, prefix semantics headers with experimental tag + ([#970](https://github.com/open-telemetry/opentelemetry-cpp/pull/970)) +* Increment OPENTELEMETRY_ABI_VERSION_NO to 1 + ([#980](https://github.com/open-telemetry/opentelemetry-cpp/pull/980)) + +### SDK + +* Clean up `GetEnvironmentVariable` and remove unused variable under `NO_GETENV` + ([#976](https://github.com/open-telemetry/opentelemetry-cpp/pull/976)) +* :collision: Resources: Add note on experimental semantic convention + implementation, prefix semantics headers with experimental tag + ([#970](https://github.com/open-telemetry/opentelemetry-cpp/pull/970)) + +### OTLP Exporter + +* :bug: Ignore status description if status code is not Error + ([#962](https://github.com/open-telemetry/opentelemetry-cpp/pull/962)) +* :collision: Make Otlp exporter configuration environment variables + specs-compliant + ([#974](https://github.com/open-telemetry/opentelemetry-cpp/pull/974)) + +### Zipkin Exporter + +* :bug: Don't set parentId in case parentId is empty + ([#943](https://github.com/open-telemetry/opentelemetry-cpp/pull/943)) +* :rocket: Extend zipkin exporter with ability to provide headers + ([#951](https://github.com/open-telemetry/opentelemetry-cpp/pull/951)) + +### DOCS + +* :book: Add getting-started documentation for SDK: + ([#942](https://github.com/open-telemetry/opentelemetry-cpp/pull/942)) +* :book: Remove unnecessary spaces and spelling of gRPC in README + ([#965](https://github.com/open-telemetry/opentelemetry-cpp/pull/965)) + +### BUILD + +* Disable bazel build for gcc 4.8, upgrade versions for grpc(v1.39.1) and + bazel(4.2.0), document bazel support + ([#953](https://github.com/open-telemetry/opentelemetry-cpp/pull/953)) +* Move CMake config template to cmake folder + ([#958](https://github.com/open-telemetry/opentelemetry-cpp/pull/958)) +* Enable CMake to search the new package variable `_ROOT` + ([#975](https://github.com/open-telemetry/opentelemetry-cpp/pull/975)) +* :bug: Do not override CMAKE_CXX_STANDARD + ([#977](https://github.com/open-telemetry/opentelemetry-cpp/pull/977)) + +### :construction: Experiemental Features (Will change in future) + +* Semantic Conventions for traces - As the specs is still experimental, the + implementation will change in future. +* Semantic Convention for resource - As the specs is still experimental, the + implementation will change in future. +* Logs and Metrics API & SDK - These are not compliant, and are behind feature + flag. Not recommended to use for now. + +## [1.0.0-rc4] 2021-08-04 + +* [EXPORTER] `BREAKING CHANGE` Fix default HTTP port for OTLP HTTP Exporter + ([#939](https://github.com/open-telemetry/opentelemetry-cpp/pull/939)) +* [API] Fix timeout calculation for Tracer::Flush() and Tracer::Close() + ([#937](https://github.com/open-telemetry/opentelemetry-cpp/pull/937)) +* [API] Fix for Stack::Resize that new_capacity is not assigned to capacity_ + ([#934](https://github.com/open-telemetry/opentelemetry-cpp/pull/934)) +* [SDK] Fix race condition in circular buffer simulation test + ([#931](https://github.com/open-telemetry/opentelemetry-cpp/pull/931)) +* [EXPORTER] Fix error logging in Jaeger Exporter + ([#930](https://github.com/open-telemetry/opentelemetry-cpp/pull/930)) +* [BUILD] Use latest grpc version (v1.39.0) for cmake build of otlp exporter + ([#927](https://github.com/open-telemetry/opentelemetry-cpp/pull/927)) +* [EXPORTER] Add Jaeger Thrift HTTP exporter + ([#926](https://github.com/open-telemetry/opentelemetry-cpp/pull/926)) +* [SDK] Move env-var read logic to common dir, and optional reading of env-var + ([#924](https://github.com/open-telemetry/opentelemetry-cpp/pull/924)) +* [EXPORTER] Remove recordable header from CMake install rules for exporters + ([#923](https://github.com/open-telemetry/opentelemetry-cpp/pull/923)) +* [EXPORTER] `BREAKING CHANGE` Rename Recordable to JaegerRecordable in Jaeger + exporter + ([#919](https://github.com/open-telemetry/opentelemetry-cpp/pull/919)) +* [EXPORTER] `BREAKING CHANGE` Rename Jaeger exporter target + ([#918](https://github.com/open-telemetry/opentelemetry-cpp/pull/918)) +* [EXPORTER] Add Zipkin exporter example + ([#917](https://github.com/open-telemetry/opentelemetry-cpp/pull/917)) +* [EXPORTER] Bazel build for Zipkin exorter + ([#916](https://github.com/open-telemetry/opentelemetry-cpp/pull/916)) +* [BUILD] Allow to use local GSL + ([#915](https://github.com/open-telemetry/opentelemetry-cpp/pull/915)) +* [DOCS] Document vcpkg toolchain configuration + ([#913](https://github.com/open-telemetry/opentelemetry-cpp/pull/913)) +* [SDK] Fix for resource deletion after tracer provider shutdown + ([#911](https://github.com/open-telemetry/opentelemetry-cpp/pull/911)) +* [BUILD] Add bazel build for grpc example + ([#910](https://github.com/open-telemetry/opentelemetry-cpp/pull/910)) +* [EXPORTER] Add resource and instrumentation library support for + OStreamSpanExporter + ([#906](https://github.com/open-telemetry/opentelemetry-cpp/pull/906)) +* [API] Adding semantic-convention attributes for trace + ([#868](https://github.com/open-telemetry/opentelemetry-cpp/pull/868)) + +## [1.0.0-rc3] 2021-07-12 + +* [DOCS] Add doxygen reference docs for SDK + ([#902](https://github.com/open-telemetry/opentelemetry-cpp/pull/902)) +* [EXPORTER] Jaeger Exporter - Populate resource attributes into process tags in + Jaeger ([#897](https://github.com/open-telemetry/opentelemetry-cpp/pull/897)) +* [EXPORTER] Zipkin Exporter - Report Event timestamp into microseconds + ([#896](https://github.com/open-telemetry/opentelemetry-cpp/pull/896)) +* [EXPORTER] Jaeger Exporter - Handle span events + ([#895](https://github.com/open-telemetry/opentelemetry-cpp/pull/895)) +* [DOCS] Fix API docs for Scope object + ([#894](https://github.com/open-telemetry/opentelemetry-cpp/pull/894)) +* [BUILD] Fix Linking error for libcurl on some macOS environments + ([#893](https://github.com/open-telemetry/opentelemetry-cpp/pull/893)) +* [API] Context cleanup from Runtime Storage + ([#885](https://github.com/open-telemetry/opentelemetry-cpp/pull/885)) +* [DOCS] Document strategy to avoid conflict between two different versions of + Abseil ([#883](https://github.com/open-telemetry/opentelemetry-cpp/pull/883/)) +* [EXPORTER] ETW Exporter - Document example for ETW Exporter + ([#882](https://github.com/open-telemetry/opentelemetry-cpp/pull/882)) +* [SDK] Create Span with Valid spanId and traceId irrespective of Sampling + decision + ([#879](https://github.com/open-telemetry/opentelemetry-cpp/pull/879)) +* [EXPORTER] Jaeger Exporter - Rename bswap macros to avoid clash on some + systems ([#876](https://github.com/open-telemetry/opentelemetry-cpp/pull/876)) +* [API] Add Semantics Conventions attributes for Resources + ([#872](https://github.com/open-telemetry/opentelemetry-cpp/pull/872)) +* [BUILD] Use nlohmann-json from submodules if not already installed + ([#870](https://github.com/open-telemetry/opentelemetry-cpp/pull/870)) + +## [1.0.0-rc2] 2021-06-18 + +* [EXPORTER] Jaeger Exporter - Support for Instrumentation Library + ([#864](https://github.com/open-telemetry/opentelemetry-cpp/pull/864)) +* [TESTS] Adding benchmark tests for baggage api + ([#861](https://github.com/open-telemetry/opentelemetry-cpp/pull/861)) +* [BUILD] Fix for GCC9/C++20 Support for using STL for modern C++ features + ([#860](https://github.com/open-telemetry/opentelemetry-cpp/pull/860)) +* [TESTS] Adding benchmark tests for span create api + ([#856](https://github.com/open-telemetry/opentelemetry-cpp/pull/856)) +* [BUILD] Fix for using Abseil library for modern C++ features + ([#850](https://github.com/open-telemetry/opentelemetry-cpp/pull/850)) +* [BUILD] Fix issues with win32/x86 compilation + ([#847](https://github.com/open-telemetry/opentelemetry-cpp/pull/847)) +* [DOCS] Document OSS dependencies and their licenses + ([#844](https://github.com/open-telemetry/opentelemetry-cpp/pull/844)) +* [BUILD] Various fixes to build with Visual Studio 2015 + ([#840](https://github.com/open-telemetry/opentelemetry-cpp/pull/840)) +* [INSTRUMENTATION] HTTPClient: Change support for full URL argument + ([#833](https://github.com/open-telemetry/opentelemetry-cpp/pull/833)) +* [EXPORTER] Jaeger Exporter - fix endianness of Jaeger IDs for transmission + ([#832](https://github.com/open-telemetry/opentelemetry-cpp/pull/832)) +* [INSTRUMENTATION] fix protobuf compilation warning in gRPC example + ([#830](https://github.com/open-telemetry/opentelemetry-cpp/pull/830)) +* [EXPORTER] `BREAKING CHANGE` - Add OTLP/HTTP+JSON Protocol exporter; Rename + `OtlpExporter` to `OtlpGrpcExporter` + ([#810](https://github.com/open-telemetry/opentelemetry-cpp/pull/810)) + +## [1.0.0-rc1] 2021-06-04 + +* [BUILD] Enable Jaeger exporter build in Windows + ([#815](https://github.com/open-telemetry/opentelemetry-cpp/pull/815)) +* [DOCS] Versioning doc update to clarify release and versioning policy + ([#811](https://github.com/open-telemetry/opentelemetry-cpp/pull/811)) +* [LOGS] Move Logging implementation under feature-flag + ([#807](https://github.com/open-telemetry/opentelemetry-cpp/pull/807)) +* [BUILD] Filter metric headers files from `opentelemetry-api` and + `opentelemetry-sdk` targets if metrics feature-flag is disabled + ([#806](https://github.com/open-telemetry/opentelemetry-cpp/pull/806)) +* [BUILD] Fix install rule for ostream exporter, Jaeger, ETW, ElasticSearch + ([#805](Fix install rule for header files of ostream exporter)) +* [API/SDK] Switch from mpark::variant to absl::variant as default + ([#771](https://github.com/open-telemetry/opentelemetry-cpp/pull/771)) +* [API/SDK] Support `const char *` as acceptable data type for attributes and + resources + ([#771](https://github.com/open-telemetry/opentelemetry-cpp/pull/771)) +* [EXAMPLE] gRPC instrumentation example with context propagation + ([#729](https://github.com/open-telemetry/opentelemetry-cpp/pull/729)) + +## [0.7.0] 2021-05-26 + +* [METRICS] Move metrics api/sdk under preview feature flag + ([#745](https://github.com/open-telemetry/opentelemetry-cpp/pull/745)) +* [DOCS] Add instructions to build using Bazel + ([#747](https://github.com/open-telemetry/opentelemetry-cpp/pull/747)) +* [DOCS] Update copyright headers + ([#754](https://github.com/open-telemetry/opentelemetry-cpp/pull/754)) +* [EXPORTER] Populate resource to OTLP proto data + ([#758](https://github.com/open-telemetry/opentelemetry-cpp/pull/758)) +* [CI] Add CodeQL security scan CI workflow + ([#770](https://github.com/open-telemetry/opentelemetry-cpp/pull/770)) +* [BUILD] Enable building API only CMake Project + ([#778](https://github.com/open-telemetry/opentelemetry-cpp/pull/778)) +* [SDK] Fix for sampling of root span + ([#784](https://github.com/open-telemetry/opentelemetry-cpp/pull/784)) +* [CI] Add Jaeger exporter to CMake CI build + ([#786](https://github.com/open-telemetry/opentelemetry-cpp/pull/786)) +* [API] `BREAKING CHANGE` - Tracer::WithActiveSpan() to return Scope object + intead of unique_ptr + ([#788](https://github.com/open-telemetry/opentelemetry-cpp/pull/788)) +* [DOCS] Add docs for nested spans and context propagation in readthedocs + ([#792](https://github.com/open-telemetry/opentelemetry-cpp/pull/792)) +* [CI] Output verbose error for failed unit-test in CI + ([#796](https://github.com/open-telemetry/opentelemetry-cpp/pull/796)) + +## [0.6.0] 2021-05-11 + +* [EXPORTER] Add Jaeger exporter + ([#534](https://github.com/open-telemetry/opentelemetry-cpp/pull/534)) +* [SDK] Support multiple processors + ([#692](https://github.com/open-telemetry/opentelemetry-cpp/pull/692)) +* [SDK] Add instrumentation library and multiple tracer support + ([#693](https://github.com/open-telemetry/opentelemetry-cpp/pull/693)) +* [SDK] Resource integration with Exporters + ([#706](https://github.com/open-telemetry/opentelemetry-cpp/pull/706)) +* [EXAMPLE] Enhance existing http example with propagation + ([#727](https://github.com/open-telemetry/opentelemetry-cpp/pull/727)) + +## [0.5.0] 2021-04-26 + +* [SDK] Support custom span-id and trace-id generator + ([#681](https://github.com/open-telemetry/opentelemetry-cpp/pull/681)) +* [SDK] Add SpanContext (and TraceState) to Recordable + ([#667](https://github.com/open-telemetry/opentelemetry-cpp/pull/667)) +* [SDK] Global Propagator + ([#668](https://github.com/open-telemetry/opentelemetry-cpp/pull/668)) +* [SDK] Create SharedContext for updating span pipeline + ([#650](https://github.com/open-telemetry/opentelemetry-cpp/pull/650)) +* [API] Baggage implementation + ([#676](https://github.com/open-telemetry/opentelemetry-cpp/pull/676)) +* [API] Move class from opentelemetry::core namespace to opentelemetry::common + namespace + ([#686](https://github.com/open-telemetry/opentelemetry-cpp/pull/686)) + +## [0.4.0] 2021-04-12 + +* [EXPORTER] ETW Exporter enhancements + ([#519](https://github.com/open-telemetry/opentelemetry-cpp/pull/519)) +* [EXPORTER] Read Zipkin endpoint from environment variable. + ([#624](https://github.com/open-telemetry/opentelemetry-cpp/pull/624)) +* [EXPORTER] Split Zpages webserver hosting from Exporter + ([#626](https://github.com/open-telemetry/opentelemetry-cpp/pull/626)) +* [EXPORTER] ETW Exporter Usage Instructions + ([#628](https://github.com/open-telemetry/opentelemetry-cpp/pull/628)) +* [INSTRUMENTATION] HTTP Client/Server Instrumentation example + ([#632](https://github.com/open-telemetry/opentelemetry-cpp/pull/632)) +* [EXPORTER] Enable tls authentication for otlp grpc exporter ([#635](Enable tls + authentication for otlp grpc exporter)) +* [API] Refactoring trace_state to reuse common functionality in baggage + ([#638](https://github.com/open-telemetry/opentelemetry-cpp/pull/638/files)) + +## [0.3.0] 2021-03-19 + +* [EXPORTER] Added Zipkin Exporter. + ([#471](https://github.com/open-telemetry/opentelemetry-cpp/pull/471)) +* [API] Added Jaeger propagator. + ([#599](https://github.com/open-telemetry/opentelemetry-cpp/pull/599)) +* [PROPAGATOR] Added Composite Propagator + ([#597](https://github.com/open-telemetry/opentelemetry-cpp/pull/597)) +* [API] Propagate traceflag from parent + ([#603](https://github.com/open-telemetry/opentelemetry-cpp/pull/603)) +* [DOCS] Add sphinx support for api doc generation + ([595](https://github.com/open-telemetry/opentelemetry-cpp/pull/595)) +* [SDK] Add service.name if missing in Resource + ([#616](https://github.com/open-telemetry/opentelemetry-cpp/pull/616)) + +## [0.2.0] 2021-03-02 + +* [SDK] Added `ForceFlush` to `TracerProvider`. + ([#588](https://github.com/open-telemetry/opentelemetry-cpp/pull/588)). +* [SDK] Added Resource API. + ([#502](https://github.com/open-telemetry/opentelemetry-cpp/pull/502)) +* [API] Modified TraceState support for w3c trace context as per specs. +* [SDK] TraceState implementation as per spec + ([#551](https://github.com/open-telemetry/opentelemetry-cpp/pull/551)) +* [API] Added B3 Propagator. + ([#523](https://github.com/open-telemetry/opentelemetry-cpp/pull/523)) +* [Exporter] Added ETW Exporter. + ([#376](https://github.com/open-telemetry/opentelemetry-cpp/pull/376)) +* [CI] Enable cache for Bazel for faster builds. + ([#505](https://github.com/open-telemetry/opentelemetry-cpp/pull/505)) + +## [0.0.1] 2020-12-16 + +### Added + +* Trace API and SDK experimental +* OTLP Exporter + +### Changed + +### Removed diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeLists.txt b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeLists.txt new file mode 100644 index 00000000..4e65f049 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeLists.txt @@ -0,0 +1,927 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.14) + +# See https://cmake.org/cmake/help/latest/policy/CMP0074.html required by +# certain version of zlib which CURL depends on. +if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12") + cmake_policy(SET CMP0074 NEW) +endif() + +# Allow to use normal variable for option() +if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13") + cmake_policy(SET CMP0077 NEW) +endif() + +# Prefer CMAKE_MSVC_RUNTIME_LIBRARY if possible +if(POLICY CMP0091) + cmake_policy(SET CMP0091 NEW) +endif() + +if(POLICY CMP0092) + # https://cmake.org/cmake/help/latest/policy/CMP0092.html#policy:CMP0092 Make + # sure the /W3 is not removed from CMAKE_CXX_FLAGS since CMake 3.15 + cmake_policy(SET CMP0092 OLD) +endif() + +# MSVC RTTI flag /GR should not be not added to CMAKE_CXX_FLAGS by default. @see +# https://cmake.org/cmake/help/latest/policy/CMP0117.html +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20.0") + cmake_policy(SET CMP0117 NEW) +endif() + +project(opentelemetry-cpp) + +# Mark variables as used so cmake doesn't complain about them +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +# Note: CMAKE_FIND_PACKAGE_PREFER_CONFIG requires cmake 3.15. Prefer cmake +# CONFIG search mode to find dependencies. This is important to properly find +# protobuf versions 3.22.0 and above due to the abseil-cpp dependency. +set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE) + +# Don't use customized cmake modules if vcpkg is used to resolve dependence. +if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") +endif() + +if(EXISTS "${CMAKE_SOURCE_DIR}/third_party_release") + file(STRINGS "${CMAKE_SOURCE_DIR}/third_party_release" third_party_tags) + foreach(third_party ${third_party_tags}) + string(REGEX REPLACE "^[ ]+" "" third_party ${third_party}) + string(REGEX MATCH "^[^=]+" third_party_name ${third_party}) + string(REPLACE "${third_party_name}=" "" third_party_tag ${third_party}) + set(${third_party_name} "${third_party_tag}") + endforeach() +endif() + +if(DEFINED ENV{ARCH}) + # Architecture may be specified via ARCH environment variable + set(ARCH $ENV{ARCH}) +else() + # Autodetection logic that populates ARCH variable + if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") + # Windows may report AMD64 even if target is 32-bit + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH x64) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(ARCH x86) + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") + # Windows may report x86 even if target is 64-bit + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH x64) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(ARCH x86) + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc") + # AIX will report the processor as 'powerpc' even if building in 64-bit mode + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH ppc64) + else() + set(ARCH ppc32) + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES + "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") + set(ARCH arm64) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") + set(ARCH arm) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le") + set(ARCH ppc64le) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") + set(ARCH ppc64) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips.*|MIPS.*)") + set(ARCH mips) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv.*|RISCV.*)") + set(ARCH riscv) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x.*|S390X.*)") + set(ARCH s390x) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(sparc.*|SPARC.*)") + set(ARCH sparc) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(loongarch.*|LOONGARCH.*)") + set(ARCH loongarch) + else() + message( + FATAL_ERROR + "opentelemetry-cpp: unrecognized target processor ${CMAKE_SYSTEM_PROCESSOR} configuration!" + ) + endif() +endif() +message(STATUS "Building for architecture ARCH=${ARCH}") + +# Autodetect vcpkg toolchain +if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE + "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + CACHE STRING "") +endif() + +if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}") +endif() + +option(WITH_ABI_VERSION_1 "ABI version 1" ON) +option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF) + +file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h" + OPENTELEMETRY_CPP_HEADER_VERSION_H) + +# +# We do not want to have WITH_ABI_VERSION = "1" or "2", and instead prefer two +# distinct flags, WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2. +# +# This allows: +# +# * to have a specific option description for each ABI +# * to mark experimental/stable/deprecated on flags, for clarity +# * to search for exact abi usage move easily, discouraging: +# +# * cmake -DWITH_ABI_VERSION=${ARG} +# +# While not supported, having distinct WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2 +# flags also opens the possibility to support multiple ABI concurrently, should +# that become necessary. +# +if(WITH_ABI_VERSION_1 AND WITH_ABI_VERSION_2) + # + # Only one ABI is supported in a build. + # + message( + FATAL_ERROR "Set either WITH_ABI_VERSION_1 or WITH_ABI_VERSION_2, not both") +endif() + +if(WITH_ABI_VERSION_2) + set(OPENTELEMETRY_ABI_VERSION_NO "2") +elseif(WITH_ABI_VERSION_1) + set(OPENTELEMETRY_ABI_VERSION_NO "1") +else() + if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES + "OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?") + math(EXPR OPENTELEMETRY_ABI_VERSION_NO ${CMAKE_MATCH_1}) + else() + message( + FATAL_ERROR + "OPENTELEMETRY_ABI_VERSION_NO not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h" + ) + endif() +endif() + +message(STATUS "OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO}") + +if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES + "OPENTELEMETRY_VERSION[ \t\r\n]+\"?([^\"]+)\"?") + set(OPENTELEMETRY_VERSION ${CMAKE_MATCH_1}) +else() + message( + FATAL_ERROR + "OPENTELEMETRY_VERSION not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h" + ) +endif() + +message(STATUS "OPENTELEMETRY_VERSION=${OPENTELEMETRY_VERSION}") + +option(WITH_NO_DEPRECATED_CODE "Do not include deprecated code" OFF) + +set(WITH_STL + "OFF" + CACHE STRING "Which version of the Standard Library for C++ to use") + +option(WITH_GSL + "Whether to use Guidelines Support Library for C++ latest features" OFF) + +set(OPENTELEMETRY_INSTALL_default ON) +if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(OPENTELEMETRY_INSTALL_default OFF) +endif() +option(OPENTELEMETRY_INSTALL "Whether to install opentelemetry targets" + ${OPENTELEMETRY_INSTALL_default}) + +include("${PROJECT_SOURCE_DIR}/cmake/tools.cmake") + +if(NOT WITH_STL STREQUAL "OFF") + # These definitions are needed for test projects that do not link against + # opentelemetry-api library directly. We ensure that variant implementation + # (absl::variant or std::variant) in variant unit test code is consistent with + # the global project build definitions. Optimize for speed to reduce the hops + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + if(CMAKE_BUILD_TYPE MATCHES Debug) + # Turn off optimizations for DEBUG + set(MSVC_CXX_OPT_FLAG "/Od") + else() + string(REGEX MATCH "\/O" result ${CMAKE_CXX_FLAGS}) + if(NOT ${result} MATCHES "\/O") + set(MSVC_CXX_OPT_FLAG "/O2") + endif() + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MSVC_CXX_OPT_FLAG}") + endif() +endif() + +option(WITH_OTLP_RETRY_PREVIEW + "Whether to enable experimental retry functionality" OFF) + +option(WITH_OTLP_GRPC_SSL_MTLS_PREVIEW + "Whether to enable mTLS support fro gRPC" OFF) + +option(WITH_OTLP_GRPC "Whether to include the OTLP gRPC exporter in the SDK" + OFF) + +option(WITH_OTLP_HTTP "Whether to include the OTLP http exporter in the SDK" + OFF) + +option(WITH_OTLP_FILE "Whether to include the OTLP file exporter in the SDK" + OFF) + +option( + WITH_OTLP_HTTP_COMPRESSION + "Whether to include gzip compression for the OTLP http exporter in the SDK" + OFF) + +option(WITH_CURL_LOGGING "Whether to enable select CURL verbosity in OTel logs" + OFF) + +option(WITH_ZIPKIN "Whether to include the Zipkin exporter in the SDK" OFF) + +option(WITH_PROMETHEUS "Whether to include the Prometheus Client in the SDK" + OFF) + +option(WITH_ELASTICSEARCH + "Whether to include the Elasticsearch Client in the SDK" OFF) + +option(WITH_NO_GETENV "Whether the platform supports environment variables" OFF) + +option(BUILD_TESTING "Whether to enable tests" ON) + +option(WITH_BENCHMARK "Whether to build benchmark program" ON) + +option(BUILD_W3CTRACECONTEXT_TEST "Whether to build w3c trace context" OFF) + +option(OTELCPP_MAINTAINER_MODE "Build in maintainer mode (-Wall -Werror)" OFF) + +option(WITH_OPENTRACING "Whether to include the Opentracing shim" OFF) + +option(OTELCPP_VERSIONED_LIBS "Whether to generate the versioned shared libs" + OFF) + +# +# This option is experimental, subject to change in the spec: +# +# * https://github.com/open-telemetry/opentelemetry-specification/issues/2232 +# +option(WITH_REMOVE_METER_PREVIEW + "EXPERIMENTAL, ABI BREAKING: Allow to remove a meter" OFF) + +if(OTELCPP_VERSIONED_LIBS AND NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "OTELCPP_VERSIONED_LIBS=ON requires BUILD_SHARED_LIBS=ON") +endif() + +if(WIN32) + option(WITH_ETW "Whether to include the ETW Exporter in the SDK" ON) +else() + if(DEFINED (WITH_ETW)) + message(FATAL_ERROR "WITH_ETW is only supported on Windows") + endif() +endif(WIN32) + +# Do not convert deprecated message to error +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + add_compile_options(-Wno-error=deprecated-declarations) +endif() + +option( + WITH_API_ONLY + "Only build the API (use as a header-only library). Overrides WITH_EXAMPLES and all options to enable exporters" + OFF) +option(WITH_EXAMPLES "Whether to build examples" ON) + +# This requires CURL, OFF by default. +option( + WITH_EXAMPLES_HTTP + "Whether to build http client/server examples. Requires WITH_EXAMPLES and CURL" + OFF) + +option(WITH_FUNC_TESTS "Whether to build functional tests" ON) + +option(WITH_ASYNC_EXPORT_PREVIEW "Whether to enable async export" OFF) + +# Exemplar specs status is experimental, so behind feature flag by default +option(WITH_METRICS_EXEMPLAR_PREVIEW + "Whether to enable exemplar within metrics" OFF) + +# Experimental, so behind feature flag by default +option(WITH_THREAD_INSTRUMENTATION_PREVIEW + "Whether to enable thread instrumentation" OFF) + +option(OPENTELEMETRY_SKIP_DYNAMIC_LOADING_TESTS + "Whether to build test libraries that are always linked as shared libs" + OFF) + +# +# Verify options dependencies +# + +if(WITH_EXAMPLES_HTTP AND NOT WITH_EXAMPLES) + message(FATAL_ERROR "WITH_EXAMPLES_HTTP=ON requires WITH_EXAMPLES=ON") +endif() + +find_package(Threads) + +function(install_windows_deps) + # Bootstrap vcpkg from CMake and auto-install deps in case if we are missing + # deps on Windows. Respect the target architecture variable. + set(VCPKG_TARGET_ARCHITECTURE + ${ARCH} + PARENT_SCOPE) + message(STATUS "Installing build tools and dependencies...") + set(ENV{ARCH} ${ARCH}) + execute_process( + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/setup-buildtools.cmd) + set(CMAKE_TOOLCHAIN_FILE + ${CMAKE_CURRENT_SOURCE_DIR}/tools/vcpkg/scripts/buildsystems/vcpkg.cmake + CACHE FILEPATH "") + message( + STATUS + "Make sure that vcpkg.cmake is set as the CMAKE_TOOLCHAIN_FILE at the START of the cmake build process! + Can be command-line arg (cmake -DCMAKE_TOOLCHAIN_FILE=...) or set in your editor of choice." + ) + +endfunction() + +function(set_target_version target_name) + if(OTELCPP_VERSIONED_LIBS) + set_target_properties( + ${target_name} PROPERTIES VERSION ${OPENTELEMETRY_VERSION} + SOVERSION ${OPENTELEMETRY_ABI_VERSION_NO}) + endif() +endfunction() + +if(MSVC) + # Options for Visual C++ compiler: /Zc:__cplusplus - report an updated value + # for recent C++ language standards. Without this option MSVC returns the + # value of __cplusplus="199711L" + if(MSVC_VERSION GREATER 1900) + # __cplusplus flag is not supported by Visual Studio 2015 + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") + endif() +endif() + +# include GNUInstallDirs before include cmake/opentelemetry-proto.cmake because +# opentelemetry-proto installs targets to the location variables defined in +# GNUInstallDirs. +include(GNUInstallDirs) + +if(WITH_PROMETHEUS) + find_package(prometheus-cpp CONFIG QUIET) + if(NOT prometheus-cpp_FOUND) + message(STATUS "Trying to use local prometheus-cpp from submodule") + if(EXISTS ${PROJECT_SOURCE_DIR}/third_party/prometheus-cpp/.git) + set(SAVED_ENABLE_TESTING ${ENABLE_TESTING}) + set(SAVED_CMAKE_CXX_CLANG_TIDY ${CMAKE_CXX_CLANG_TIDY}) + set(SAVED_CMAKE_CXX_INCLUDE_WHAT_YOU_USE + ${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}) + set(ENABLE_TESTING OFF) + set(CMAKE_CXX_CLANG_TIDY "") + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "") + add_subdirectory(third_party/prometheus-cpp) + set(ENABLE_TESTING ${SAVED_ENABLE_TESTING}) + set(CMAKE_CXX_CLANG_TIDY ${SAVED_CMAKE_CXX_CLANG_TIDY}) + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE + ${SAVED_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}) + + # Get the version of the prometheus-cpp submodule + find_package(Git QUIET) + if(Git_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/third_party/prometheus-cpp + OUTPUT_VARIABLE prometheus-cpp_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "^v" "" prometheus-cpp_VERSION + "${prometheus-cpp_VERSION}") + endif() + + message( + STATUS + "Using local prometheus-cpp from submodule. Version = ${prometheus-cpp_VERSION}" + ) + else() + message( + FATAL_ERROR + "\nprometheus-cpp package was not found. Please either provide it manually or clone with submodules. " + "To initialize, fetch and checkout any nested submodules, you can use the following command:\n" + "git submodule update --init --recursive") + endif() + else() + message(STATUS "Using external prometheus-cpp") + endif() +endif() + +if(WITH_OTLP_GRPC + OR WITH_OTLP_HTTP + OR WITH_OTLP_FILE) + + # Including the CMakeFindDependencyMacro resolves an error from + # gRPCConfig.cmake on some grpc versions. See + # https://github.com/grpc/grpc/pull/33361 for more details. + include(CMakeFindDependencyMacro) + + # Protobuf 3.22+ depends on abseil-cpp and must be found using the cmake + # find_package CONFIG search mode. The following attempts to find Protobuf + # using the CONFIG mode first, and if not found, falls back to the MODULE + # mode. See https://gitlab.kitware.com/cmake/cmake/-/issues/24321 for more + # details. + find_package(Protobuf CONFIG) + if(NOT Protobuf_FOUND) + find_package(Protobuf MODULE) + if(Protobuf_FOUND AND Protobuf_VERSION VERSION_GREATER_EQUAL "3.22.0") + message( + WARNING + "Found Protobuf version ${Protobuf_VERSION} using MODULE mode. " + "Linking errors may occur. Protobuf 3.22+ depends on abseil-cpp " + "and should be found using the CONFIG mode.") + endif() + endif() + + if(WITH_OTLP_GRPC) + find_package(gRPC CONFIG) + endif() + if((NOT Protobuf_FOUND) OR (WITH_OTLP_GRPC AND NOT gRPC_FOUND)) + if(WIN32 AND (NOT DEFINED CMAKE_TOOLCHAIN_FILE)) + install_windows_deps() + endif() + + if(WIN32 AND (NOT DEFINED CMAKE_TOOLCHAIN_FILE)) + message(FATAL_ERROR "Windows dependency installation failed!") + endif() + if(WIN32) + include(${CMAKE_TOOLCHAIN_FILE}) + endif() + + if(NOT Protobuf_FOUND) + find_package(Protobuf CONFIG REQUIRED) + endif() + if(NOT gRPC_FOUND AND WITH_OTLP_GRPC) + find_package(gRPC CONFIG) + endif() + if(WIN32) + # Always use x64 protoc.exe + if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") + set(Protobuf_PROTOC_EXECUTABLE + ${CMAKE_CURRENT_SOURCE_DIR}/tools/vcpkg/packages/protobuf_x64-windows/tools/protobuf/protoc.exe + ) + endif() + endif() + endif() + # Latest Protobuf imported targets and without legacy module support + if(TARGET protobuf::protoc) + if(CMAKE_CROSSCOMPILING AND Protobuf_PROTOC_EXECUTABLE) + set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE}) + else() + project_build_tools_get_imported_location(PROTOBUF_PROTOC_EXECUTABLE + protobuf::protoc) + # If protobuf::protoc is not a imported target, then we use the target + # directly for fallback + if(NOT PROTOBUF_PROTOC_EXECUTABLE) + set(PROTOBUF_PROTOC_EXECUTABLE protobuf::protoc) + endif() + endif() + elseif(Protobuf_PROTOC_EXECUTABLE) + # Some versions of FindProtobuf.cmake uses mixed case instead of uppercase + set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE}) + endif() + include(CMakeDependentOption) + + message(STATUS "PROTOBUF_PROTOC_EXECUTABLE=${PROTOBUF_PROTOC_EXECUTABLE}") + set(SAVED_CMAKE_CXX_CLANG_TIDY ${CMAKE_CXX_CLANG_TIDY}) + set(CMAKE_CXX_CLANG_TIDY "") + include(cmake/opentelemetry-proto.cmake) + set(CMAKE_CXX_CLANG_TIDY ${SAVED_CMAKE_CXX_CLANG_TIDY}) +endif() + +# +# Do we need HTTP CLIENT CURL ? +# + +if(WITH_OTLP_HTTP + OR WITH_ELASTICSEARCH + OR WITH_ZIPKIN + OR BUILD_W3CTRACECONTEXT_TEST + OR WITH_EXAMPLES_HTTP) + set(WITH_HTTP_CLIENT_CURL ON) +else() + set(WITH_HTTP_CLIENT_CURL OFF) +endif() + +# +# Do we need CURL ? +# + +if((NOT WITH_API_ONLY) AND WITH_HTTP_CLIENT_CURL) + # No specific version required. + find_package(CURL REQUIRED) + # Set the CURL_VERSION from the legacy CURL_VERSION_STRING Required for CMake + # versions below 4.0 + if(NOT DEFINED CURL_VERSION AND DEFINED CURL_VERSION_STRING) + set(CURL_VERSION ${CURL_VERSION_STRING}) + endif() +endif() + +# +# Do we need ZLIB ? +# + +if((NOT WITH_API_ONLY) + AND WITH_HTTP_CLIENT_CURL + AND WITH_OTLP_HTTP_COMPRESSION) + # No specific version required. + find_package(ZLIB REQUIRED) + # Set the ZLIB_VERSION from the legacy ZLIB_VERSION_STRING Required for CMake + # versions below 3.26 + if(NOT DEFINED ZLIB_VERSION AND DEFINED ZLIB_VERSION_STRING) + set(ZLIB_VERSION ${ZLIB_VERSION_STRING}) + endif() +endif() + +# +# Do we need NLOHMANN_JSON ? +# + +if(WITH_ELASTICSEARCH + OR WITH_ZIPKIN + OR WITH_OTLP_HTTP + OR WITH_OTLP_FILE + OR BUILD_W3CTRACECONTEXT_TEST + OR WITH_ETW) + set(USE_NLOHMANN_JSON ON) +else() + set(USE_NLOHMANN_JSON OFF) +endif() + +if((NOT WITH_API_ONLY) AND USE_NLOHMANN_JSON) + include(cmake/nlohmann-json.cmake) +endif() + +if(OTELCPP_MAINTAINER_MODE) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + message(STATUS "Building with gcc in maintainer mode.") + + add_compile_options(-Wall) + add_compile_options(-Werror) + add_compile_options(-Wextra) + + # Tested with GCC 9.4 on github. + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.4) + message(STATUS "Building with additional warnings for gcc.") + + # Relaxed warnings + + # Enforced warnings + + # C++ options only + add_compile_options($<$,CXX>:-Wextra-semi>) + add_compile_options( + $<$,CXX>:-Woverloaded-virtual>) + add_compile_options( + $<$,CXX>:-Wsuggest-override>) + add_compile_options( + $<$,CXX>:-Wold-style-cast>) + + # C and C++ + add_compile_options(-Wcast-qual) + add_compile_options(-Wformat-security) + add_compile_options(-Wlogical-op) + add_compile_options(-Wmissing-include-dirs) + add_compile_options(-Wstringop-truncation) + add_compile_options(-Wundef) + add_compile_options(-Wvla) + endif() + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + message(STATUS "Building with clang in maintainer mode.") + + add_compile_options(-Wall) + add_compile_options(-Werror) + add_compile_options(-Wextra) + + # Tested with Clang 11.0 on github. + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0) + message(STATUS "Building with additional warnings for clang.") + + # Relaxed warnings + add_compile_options(-Wno-error=unused-private-field) + + # Enforced warnings + add_compile_options(-Wcast-qual) + add_compile_options(-Wconditional-uninitialized) + add_compile_options(-Wextra-semi) + add_compile_options(-Wformat-security) + add_compile_options(-Wheader-hygiene) + add_compile_options(-Winconsistent-missing-destructor-override) + add_compile_options(-Winconsistent-missing-override) + add_compile_options(-Wnewline-eof) + add_compile_options(-Wnon-virtual-dtor) + add_compile_options(-Woverloaded-virtual) + add_compile_options(-Wrange-loop-analysis) + add_compile_options(-Wundef) + add_compile_options(-Wundefined-reinterpret-cast) + add_compile_options(-Wvla) + add_compile_options(-Wold-style-cast) + endif() + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + message(STATUS "Building with msvc in maintainer mode.") + + add_compile_options(/WX) + add_compile_options(/W4) + + # Relaxed warnings + add_compile_options(/wd4100) + add_compile_options(/wd4125) + add_compile_options(/wd4566) + add_compile_options(/wd4127) + add_compile_options(/wd4512) + add_compile_options(/wd4267) + add_compile_options(/wd4996) + + # Enforced warnings + add_compile_options(/we4265) # 'class': class has virtual functions, but + # destructor is not virtual + add_compile_options(/we5204) # A class with virtual functions has + # non-virtual trivial destructor. + + elseif() + message(FATAL_ERROR "Building with unknown compiler in maintainer mode.") + endif() +endif(OTELCPP_MAINTAINER_MODE) + +list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}") + +include(CTest) +if(BUILD_TESTING) + if(EXISTS ${CMAKE_BINARY_DIR}/lib/libgtest.a) + # Prefer GTest from build tree. GTest is not always working with + # CMAKE_PREFIX_PATH + set(GTEST_INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/include + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googlemock/include) + if(TARGET gtest) + set(GTEST_BOTH_LIBRARIES gtest gtest_main) + else() + set(GTEST_BOTH_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libgtest.a + ${CMAKE_BINARY_DIR}/lib/libgtest_main.a) + endif() + elseif(WIN32) + # Make sure we are always bootsrapped with vcpkg on Windows + find_package(GTest) + if(NOT (GTEST_FOUND OR GTest_FOUND)) + if(DEFINED CMAKE_TOOLCHAIN_FILE) + message( + FATAL_ERROR + "Pleaes install GTest with the CMAKE_TOOLCHAIN_FILE at ${CMAKE_TOOLCHAIN_FILE}" + ) + else() + install_windows_deps() + include(${CMAKE_TOOLCHAIN_FILE}) + find_package(GTest REQUIRED) + endif() + endif() + else() + # Prefer GTest installed by OS distro, brew or vcpkg package manager + find_package(GTest REQUIRED) + endif() + if(NOT GTEST_BOTH_LIBRARIES) + # New GTest package names + if(TARGET GTest::gtest) + set(GTEST_BOTH_LIBRARIES GTest::gtest GTest::gtest_main) + elseif(TARGET GTest::GTest) + set(GTEST_BOTH_LIBRARIES GTest::GTest GTest::Main) + endif() + endif() + if(GTEST_INCLUDE_DIRS) + include_directories(SYSTEM ${GTEST_INCLUDE_DIRS}) + endif() + message(STATUS "GTEST_INCLUDE_DIRS = ${GTEST_INCLUDE_DIRS}") + message(STATUS "GTEST_BOTH_LIBRARIES = ${GTEST_BOTH_LIBRARIES}") + + # Try to find gmock + if(NOT GMOCK_LIB AND TARGET GTest::gmock) + set(GMOCK_LIB GTest::gmock) + elseif(MSVC) + # Explicitly specify that we consume GTest from shared library. The rest of + # code logic below determines whether we link Release or Debug flavor of the + # library. These flavors have different prefix on Windows, gmock and gmockd + # respectively. + add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY=1) + if(GMOCK_LIB) + # unset GMOCK_LIB to force find_library to redo the lookup, as the cached + # entry could cause linking to incorrect flavor of gmock and leading to + # runtime error. + unset(GMOCK_LIB CACHE) + endif() + endif() + if(NOT GMOCK_LIB) + if(MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") + find_library(GMOCK_LIB gmockd PATH_SUFFIXES lib) + else() + find_library(GMOCK_LIB gmock PATH_SUFFIXES lib) + endif() + # Reset GMOCK_LIB if it was not found, or some target may link + # GMOCK_LIB-NOTFOUND + if(NOT GMOCK_LIB) + unset(GMOCK_LIB) + unset(GMOCK_LIB CACHE) + endif() + endif() + + enable_testing() + if(WITH_BENCHMARK) + # Benchmark respects the CMAKE_PREFIX_PATH + find_package(benchmark CONFIG REQUIRED) + endif() +endif() + +# Record build config and versions +message(STATUS "---------------------------------------------") +message(STATUS "build settings") +message(STATUS "---------------------------------------------") +message(STATUS "OpenTelemetry: ${OPENTELEMETRY_VERSION}") +message(STATUS "OpenTelemetry ABI: ${OPENTELEMETRY_ABI_VERSION_NO}") +message(STATUS "ARCH: ${ARCH}") +message(STATUS "CXX: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") +message(STATUS "CXXFLAGS: ${CMAKE_CXX_FLAGS}") +message(STATUS "CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}") +message(STATUS "CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}") +message(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") + +message(STATUS "---------------------------------------------") +message(STATUS "opentelemetry-cpp build options") +message(STATUS "---------------------------------------------") +message(STATUS "WITH_API_ONLY: ${WITH_API_ONLY}") +message(STATUS "WITH_NO_DEPRECATED_CODE: ${WITH_NO_DEPRECATED_CODE}") +message(STATUS "WITH_ABI_VERSION_1: ${WITH_ABI_VERSION_1}") +message(STATUS "WITH_ABI_VERSION_2: ${WITH_ABI_VERSION_2}") +message(STATUS "OTELCPP_VERSIONED_LIBS: ${OTELCPP_VERSIONED_LIBS}") +message(STATUS "OTELCPP_MAINTAINER_MODE: ${OTELCPP_MAINTAINER_MODE}") +message(STATUS "WITH_STL: ${WITH_STL}") +message(STATUS "WITH_GSL: ${WITH_GSL}") +message(STATUS "WITH_NO_GETENV: ${WITH_NO_GETENV}") + +message(STATUS "---------------------------------------------") +message(STATUS "opentelemetry-cpp cmake component options") +message(STATUS "---------------------------------------------") +message(STATUS "WITH_OTLP_GRPC: ${WITH_OTLP_GRPC}") +message(STATUS "WITH_OTLP_HTTP: ${WITH_OTLP_HTTP}") +message(STATUS "WITH_OTLP_FILE: ${WITH_OTLP_FILE}") +message(STATUS "WITH_HTTP_CLIENT_CURL: ${WITH_HTTP_CLIENT_CURL}") +message(STATUS "WITH_ZIPKIN: ${WITH_ZIPKIN}") +message(STATUS "WITH_PROMETHEUS: ${WITH_PROMETHEUS}") +message(STATUS "WITH_ELASTICSEARCH: ${WITH_ELASTICSEARCH}") +message(STATUS "WITH_OPENTRACING: ${WITH_OPENTRACING}") +message(STATUS "WITH_ETW: ${WITH_ETW}") +message(STATUS "OPENTELEMETRY_BUILD_DLL: ${OPENTELEMETRY_BUILD_DLL}") + +message(STATUS "---------------------------------------------") +message(STATUS "feature preview options") +message(STATUS "---------------------------------------------") +message(STATUS "WITH_ASYNC_EXPORT_PREVIEW: ${WITH_ASYNC_EXPORT_PREVIEW}") +message( + STATUS + "WITH_THREAD_INSTRUMENTATION_PREVIEW: ${WITH_THREAD_INSTRUMENTATION_PREVIEW}" +) +message( + STATUS "WITH_METRICS_EXEMPLAR_PREVIEW: ${WITH_METRICS_EXEMPLAR_PREVIEW}") +message(STATUS "WITH_REMOVE_METER_PREVIEW: ${WITH_REMOVE_METER_PREVIEW}") +message( + STATUS "WITH_OTLP_GRPC_SSL_MTLS_PREVIEW: ${WITH_OTLP_GRPC_SSL_MTLS_PREVIEW}") +message(STATUS "WITH_OTLP_RETRY_PREVIEW: ${WITH_OTLP_RETRY_PREVIEW}") +message(STATUS "---------------------------------------------") +message(STATUS "third-party options") +message(STATUS "---------------------------------------------") +message(STATUS "WITH_NLOHMANN_JSON: ${USE_NLOHMANN_JSON}") +message(STATUS "WITH_CURL_LOGGING: ${WITH_CURL_LOGGING}") +message(STATUS "WITH_OTLP_HTTP_COMPRESSION: ${WITH_OTLP_HTTP_COMPRESSION}") +message(STATUS "---------------------------------------------") +message(STATUS "examples and test options") +message(STATUS "---------------------------------------------") +message(STATUS "WITH_BENCHMARK: ${WITH_BENCHMARK}") +message(STATUS "WITH_EXAMPLES: ${WITH_EXAMPLES}") +message(STATUS "WITH_EXAMPLES_HTTP: ${WITH_EXAMPLES_HTTP}") +message(STATUS "WITH_FUNC_TESTS: ${WITH_FUNC_TESTS}") +message(STATUS "BUILD_W3CTRACECONTEXT_TEST: ${BUILD_W3CTRACECONTEXT_TEST}") +message(STATUS "BUILD_TESTING: ${BUILD_TESTING}") +message(STATUS "---------------------------------------------") +message(STATUS "versions") +message(STATUS "---------------------------------------------") +message(STATUS "CMake: ${CMAKE_VERSION}") +message(STATUS "GTest: ${GTest_VERSION}") +message(STATUS "benchmark: ${benchmark_VERSION}") +if(WITH_GSL) + message(STATUS "GSL: ${GSL_VERSION}") +endif() +if(absl_FOUND) + message(STATUS "Abseil: ${absl_VERSION}") +endif() +if(Protobuf_FOUND) + message(STATUS "Protobuf: ${Protobuf_VERSION}") +endif() +if(gRPC_FOUND) + message(STATUS "gRPC: ${gRPC_VERSION}") +endif() +if(CURL_FOUND) + message(STATUS "CURL: ${CURL_VERSION}") +endif() +if(ZLIB_FOUND) + message(STATUS "ZLIB: ${ZLIB_VERSION}") +endif() +if(USE_NLOHMANN_JSON) + message(STATUS "nlohmann-json: ${nlohmann_json_VERSION}") +endif() +if(prometheus-cpp_FOUND) + message(STATUS "prometheus-cpp: ${prometheus-cpp_VERSION}") +endif() +message(STATUS "---------------------------------------------") + +include("${PROJECT_SOURCE_DIR}/cmake/otel-install-functions.cmake") + +include(CMakePackageConfigHelpers) + +if(DEFINED OPENTELEMETRY_BUILD_DLL) + if(NOT WIN32) + message(FATAL_ERROR "Build DLL is only supported on Windows!") + endif() + if(NOT MSVC) + message(WARNING "Build DLL is supposed to work with MSVC!") + endif() + if(WITH_STL) + message( + WARNING "Build DLL with C++ STL could cause binary incompatibility!") + endif() + add_definitions(-DOPENTELEMETRY_BUILD_EXPORT_DLL) +endif() + +add_subdirectory(api) + +if(WITH_OPENTRACING) + find_package(OpenTracing CONFIG QUIET) + if(NOT OpenTracing_FOUND) + set(OPENTRACING_DIR "third_party/opentracing-cpp") + message(STATUS "Trying to use local ${OPENTRACING_DIR} from submodule") + if(EXISTS "${PROJECT_SOURCE_DIR}/${OPENTRACING_DIR}/.git") + set(SAVED_BUILD_TESTING ${BUILD_TESTING}) + set(BUILD_TESTING OFF) + set(SAVED_CMAKE_CXX_INCLUDE_WHAT_YOU_USE + ${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}) + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "") + add_subdirectory(${OPENTRACING_DIR}) + set(BUILD_TESTING ${SAVED_BUILD_TESTING}) + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE + ${SAVED_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}) + else() + message( + FATAL_ERROR + "\nopentracing-cpp package was not found. Please either provide it manually or clone with submodules. " + "To initialize, fetch and checkout any nested submodules, you can use the following command:\n" + "git submodule update --init --recursive") + endif() + else() + message(STATUS "Using external opentracing-cpp") + endif() + add_subdirectory(opentracing-shim) +endif() + +if(NOT WITH_API_ONLY) + set(BUILD_TESTING ${BUILD_TESTING}) + + add_subdirectory(sdk) + add_subdirectory(ext) + add_subdirectory(exporters) + + if(BUILD_TESTING) + add_subdirectory(test_common) + endif() + if(WITH_EXAMPLES) + add_subdirectory(examples) + endif() + if(WITH_FUNC_TESTS) + add_subdirectory(functional) + endif() +endif() + +include(cmake/opentelemetry-build-external-component.cmake) +include(cmake/patch-imported-config.cmake) + +if(OPENTELEMETRY_INSTALL) + # Install the cmake config and version files + otel_install_cmake_config() + + # Install the components and associated files + otel_install_components() + + # Install the thirdparty dependency definition file + otel_install_thirdparty_definitions() + + if(BUILD_PACKAGE) + include(cmake/package.cmake) + include(CPack) + endif() +endif() diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeSettings.json b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeSettings.json new file mode 100644 index 00000000..02d068a3 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CMakeSettings.json @@ -0,0 +1,126 @@ +{ + "configurations": [ + { + "name": "nostd-x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ + "msvc_x64_x64" + ], + "buildRoot": "${projectDir}\\out\\vs2019\\${name}", + "installRoot": "${projectDir}\\out\\vs2019\\${name}\\install", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "variables": [ + { + "name": "WITH_OTLP_GRPC", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_EXAMPLES", + "value": "true", + "type": "BOOL" + } + ] + }, + { + "name": "nostd-x64-Release", + "generator": "Ninja", + "configurationType": "Release", + "inheritEnvironments": [ + "msvc_x64_x64" + ], + "buildRoot": "${projectDir}\\out\\vs2019\\${name}", + "installRoot": "${projectDir}\\out\\vs2019\\${name}\\install", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "cmakeToolchain": "", + "variables": [ + { + "name": "WITH_OTLP_GRPC", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_EXAMPLES", + "value": "true", + "type": "BOOL" + } + ] + }, + { + "name": "stdlib-x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ + "msvc_x64_x64" + ], + "buildRoot": "${projectDir}\\out\\vs2019\\${name}", + "installRoot": "${projectDir}\\out\\vs2019\\${name}\\install", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "variables": [ + { + "name": "WITH_STL", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_OTLP_GRPC", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_EXAMPLES", + "value": "true", + "type": "BOOL" + }, + { + "name": "WITH_PROMETHEUS", + "value": "True", + "type": "BOOL" + } + ] + }, + { + "name": "stdlib-x64-Release", + "generator": "Ninja", + "configurationType": "Release", + "inheritEnvironments": [ + "msvc_x64_x64" + ], + "buildRoot": "${projectDir}\\out\\vs2019\\${name}", + "installRoot": "${projectDir}\\out\\vs2019\\${name}\\install", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "cmakeToolchain": "", + "variables": [ + { + "name": "WITH_STL", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_OTLP_GRPC", + "value": "True", + "type": "BOOL" + }, + { + "name": "WITH_EXAMPLES", + "value": "true", + "type": "BOOL" + }, + { + "name": "WITH_PROMETHEUS", + "value": "True", + "type": "BOOL" + } + ] + } + ] +} diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/CODE_OF_CONDUCT.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..fee94ae5 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# OpenTelemetry Community Code of Conduct + +OpenTelemetry follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/CONTRIBUTING.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CONTRIBUTING.md new file mode 100644 index 00000000..fda99e09 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/CONTRIBUTING.md @@ -0,0 +1,322 @@ +# Contributing to opentelemetry-cpp + +The OpenTelemetry C/C++ special interest group (SIG) meets regularly. See the +OpenTelemetry [community](https://github.com/open-telemetry/community#cc-sdk) +repo for information on this and other language SIGs. + +See the [public meeting +notes](https://docs.google.com/document/d/1i1E4-_y4uJ083lCutKGDhkpi3n4_e774SBLi9hPLocw/edit) +for a summary description of past meetings. To request edit access, join the +meeting or get in touch on +[Slack](https://cloud-native.slack.com/archives/C01N3AT62SJ). + +See the [community membership +document](https://github.com/open-telemetry/community/blob/main/community-membership.md) +on how to become a +[**Member**](https://github.com/open-telemetry/community/blob/main/community-membership.md#member), +[**Approver**](https://github.com/open-telemetry/community/blob/main/community-membership.md#approver) +and +[**Maintainer**](https://github.com/open-telemetry/community/blob/main/community-membership.md#maintainer). + +## Development + +OpenTelemetry C++ uses the [Google naming +convention](https://google.github.io/styleguide/cppguide.html#Naming). + +Code is formatted automatically and enforced by CI. + +### Build and Run Code Examples + +Note: these instructions apply to examples configured with Bazel, see +example-specific documentation for other build automation tools. + +Install the latest bazel version by following the steps listed +[here](https://docs.bazel.build/versions/master/install.html). + +Select an example of interest from the [examples +folder](https://github.com/open-telemetry/opentelemetry-cpp/tree/main/examples). +Inside each example directory is a `BUILD` file containing instructions for +Bazel. Find the binary name of your example by inspecting the contents of this +`BUILD` file. + +Build the example from the root of the opentelemetry-cpp directory using Bazel. +Replace `` with the identifier found in the previous step: + +```sh +bazel build //examples/: +``` + +Run the resulting executable to see telemetry from the application as it calls +the instrumented library: + +```sh +bazel-bin/examples// +``` + +For instance, building and running the `simple` example can be done as follows: + +```sh +bazel build //examples/simple:example_simple +bazel-bin/examples/simple/example_simple +``` + +### DevContainer Setup for Project + +This guide provides instructions on how to set up and use the development +container (`devcontainer`) environment to streamline testing and development +for this project. With the DevContainer, you can work in a consistent environment +configured with all the necessary dependencies and tools. + +#### Prerequisites + +Before getting started, ensure you have the following installed: + +* **Docker**: DevContainers require Docker for containerization. +* **Visual Studio Code (VSCode)** with the **Remote - Containers** extension. + +#### Getting Started + +* **Open the Project in DevContainer**: + + Open the project in VSCode. When prompted to "Reopen in Container," select + this option. If you’re not prompted, you can manually open the container by + selecting **Remote-Containers: Reopen in Container** from the command palette + (`F1` or `Ctrl+Shift+P`). + +* **Container Setup**: + + The DevContainer environment will automatically build based on the configuration + files provided (e.g., `.devcontainer/devcontainer.json`). This setup will install + required dependencies, tools, and environment variables needed for the project. + +* **Container Customization**: + See `.devcontainer/README.md` for devcontainer configuration options. + +#### Available Commands + +Once inside the DevContainer, you can use the following commands to run tests +and CI workflows. + +##### 1. Run Tests with Bazelisk + +To run tests with Bazelisk using specific compilation options, use: + +```bash +bazelisk-linux-amd64 test --copt=-DENABLE_LOGS_PREVIEW +--test_output=errors --cache_test_results=no --copt=-DENABLE_TEST //exporters/otlp/... +``` + +###### Command Breakdown + +* `--copt=-DENABLE_LOGS_PREVIEW`: Enables preview logs. +* `--test_output=errors`: Shows only the errors in the test output. +* `--cache_test_results=no`: Forces Bazel to re-run tests without caching. +* `--copt=-DENABLE_TEST`: Enables testing capabilities for the target code. +* `//exporters/otlp/...`: Specifies the test target path. + +##### 2. Run CI Script + +You can also run the CI script provided to perform testing with the +following command as an +example: + +```bash +bash ci/do_ci.sh cmake.exporter.otprotocol.test +``` + +This command initiates the CI pipeline, executing tests specifically for the +**cmake.exporter.otprotocol** module. + +#### Troubleshooting + +If you encounter issues: + +* **Rebuild the DevContainer**: From the command palette, run + **Remote-Containers: Rebuild Container** to reinitialize the environment. +* **Check Bazelisk and CI Script Logs**: Inspect logs for any configuration or + dependency issues. + +#### Additional Notes + +* You can adjust compiler options (`--copt`) as needed to test additional flags + or enable/disable specific features. +* The test results will be displayed in the terminal within the DevContainer for + easy debugging. + +#### Resources + +* **Bazelisk Documentation**: [https://github.com/bazelbuild/bazelisk](https://github.com/bazelbuild/bazelisk) +* **VSCode DevContainer Documentation**: [https://code.visualstudio.com/docs/remote/containers](https://code.visualstudio.com/docs/remote/containers) + +### Docker Development Image + +The `.devcontainer/Dockerfile.dev` +dockerfile can be built directly with the following command. + +```sh + docker build -t opentelemetry-cpp-dev -f ./.devcontainer/Dockerfile.dev . +``` + +You can customize the image using build arguments + to match permissions with the host user. + +```sh + docker build -t opentelemetry-cpp-dev \ + --build-arg USER_UID="$(id -u)" \ + --build-arg USER_GID="$(id -g)" \ + -f ./.devcontainer/Dockerfile.dev . + +``` + +Run an interactive bash session binding your host + opentelemetry-cpp directory to the container's workspace: + +```sh +docker run -it -v "$PWD:/workspaces/opentelemetry-cpp" opentelemetry-cpp-dev bash +``` + +## Pull Requests + +### How to Send Pull Requests + +Everyone is welcome to contribute code to `opentelemetry-cpp` via GitHub pull +requests (PRs). + +To create a new PR, fork the project in GitHub and clone the upstream repo: + +```sh +git clone --recursive https://github.com/open-telemetry/opentelemetry-cpp.git +``` + +Add your fork as a remote: + +```sh +git remote add fork https://github.com/YOUR_GITHUB_USERNAME/opentelemetry-cpp.git +``` + +If you haven't, make sure you are loading the submodules required to build +OpenTelemetry + +```sh +git submodule init +git submodule update +``` + +The source code is automatically formatted using clang-format. + +The output can vary between versions, so make sure to install `clang-format` +version `10.0`, and have `clang-format-10` in your execution path, +so that the helper script `tools/format.sh` can find it. + +Check out a new branch, make modifications and push the branch to your fork: + +```sh +git checkout -b feature +# edit files +tools/format.sh +git commit +git push fork feature +``` + +If you made changes to the Markdown documents (`*.md` files), install the latest +[`markdownlint-cli`](https://github.com/igorshubovych/markdownlint-cli) and run: + +```sh +markdownlint . +``` + +If you modified shell scripts (`*.sh` files), install `shellcheck` and run: + +```sh +shellcheck --severity=error .sh +``` + +Open a pull request against the main `opentelemetry-cpp` repo. + +To run tests locally, please read the [CI instructions](ci/README.md). + +### How to Receive Comments + +* If the PR is not ready for review, please put `[WIP]` in the title, tag it as + `work-in-progress`, or mark it as + [`draft`](https://github.blog/2019-02-14-introducing-draft-pull-requests/). +* Make sure [CLA](https://identity.linuxfoundation.org/projects/cncf) is signed + and CI is clear. +* For non-trivial changes, please update the [CHANGELOG](./CHANGELOG.md). + +### How to Get PRs Merged + +A PR is considered to be **ready to merge** when: + +* It has received two approvals with at least one approval from + [Approver](https://github.com/open-telemetry/community/blob/main/community-membership.md#approver) + / + [Maintainer](https://github.com/open-telemetry/community/blob/main/community-membership.md#maintainer) + (at different company). +* A pull request opened by an Approver / Maintainer can be merged with only one + approval from Approver / Maintainer (at different company). +* Major feedback items/points are resolved. +* It has been open for review for at least one working day. This gives people + reasonable time to review. +* Trivial changes (typo, cosmetic, doc, etc.) don't have to wait for one day. +* Urgent fixes can take exceptions as long as it has been actively communicated. + +Any Maintainer can merge the PR once it is **ready to merge**. Maintainer can +make conscious judgement to merge pull requests which have not strictly met +above mentioned requirements. + +If a PR has been stuck (e.g. there are lots of debates and people couldn't agree +on each other), the owner should try to get people aligned by: + +* Consolidating the perspectives and putting a summary in the PR. It is + recommended to add a link into the PR description, which points to a comment + with a summary in the PR conversation +* Stepping back to see if it makes sense to narrow down the scope of the PR or + split it up. + +If none of the above worked and the PR has been stuck for more than 2 weeks, the +owner should bring it to the OpenTelemetry C++ SIG meeting. See +[README.md](README.md#contributing) for the meeting link. + +## Design Choices + +As with other OpenTelemetry clients, opentelemetry-cpp follows the +[opentelemetry-specification](https://github.com/open-telemetry/opentelemetry-specification). + +It's especially valuable to read through the [library +guidelines](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/library-guidelines.md). + +## Useful Resources + +Hi! If you’re looking at this document, these resources will provide you the +knowledge to get started as a newcomer to the OpenTelemetry project. They will +help you understand the OpenTelemetry Project, its components, and specifically +the C++ repository. + +### Reading Resources + +* Medium + [article](https://medium.com/opentelemetry/how-to-start-contributing-to-opentelemetry-b23991ad91f4) + (October 2019) on how to start contributing to the OpenTelemetry project. +* Medium + [article](https://medium.com/opentelemetry/opentelemetry-beyond-getting-started-5ac43cd0fe26) + (January 2020) describing the overarching goals and use cases for + OpenTelemetry. + +### Relevant Documentation + +* [OpenTelemetry + Specification](https://github.com/open-telemetry/opentelemetry-specification) +* The OpenTelemetry Specification describes the requirements and expectations + of for all OpenTelemetry implementations. + +* Read through the OpenTelemetry C++ documentation +* The + [API](https://opentelemetry-cpp.readthedocs.io/en/latest/api/api.html) + and + [SDK](https://opentelemetry-cpp.readthedocs.io/en/latest/sdk/sdk.html) + documentation provides a lot of information on what the classes and their + functions are used for. + +Please contribute! You’re welcome to add more information if you come across any +helpful resources. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/DEPRECATED.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/DEPRECATED.md new file mode 100644 index 00000000..ec97f420 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/DEPRECATED.md @@ -0,0 +1,139 @@ +# Deprecated + +This document lists all the items currently deprecated in opentelemetry-cpp. + +Deprecated items will be removed in the future. + +## Guidelines + +### Maintainer guidelines + +See the [deprecation-process](./docs/deprecation-process.md) + +## [TEMPLATE] + +### New Deprecation Title (Template) + +#### Announcement (Template) + +#### Motivation (Template) + +#### Scope (Template) + +#### Mitigation (Template) + +#### Planned removal (Template) + +## [Platforms] + +N/A + +## [Compilers] + +N/A + +## [Third party dependencies] + +N/A + +## [Build tools] + +N/A + +## [Build scripts] + +N/A + +## [opentelemetry-cpp API] + +N/A + +## [opentelemetry-cpp SDK] + +N/A + +## [opentelemetry-cpp Exporter] + +N/A + +## [Documentation] + +N/A + +## Semantic conventions + +### Header files "semantic_conventions.h" + +#### Announcement (semantic_conventions.h) + +Deprecation is announced as part of the migration to weaver: + +* `Version:` release following opentelemetry-cpp 1.17.0 +* `Date:` Nov 9, 2024 +* `PR:` [PR 3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + +#### Motivation (semantic_conventions.h) + +The header files for semantic conventions are generated automatically. +The tooling to generate these files is changing: + +* before, the build-tool repository was used +* now, the weaver repository is used + +Changes in tooling allows to generate code that is better organized, +with dedicated header files per group of semantic conventions, +instead of a single header file for everything. + +#### Scope (semantic_conventions.h) + +The following files: + +* `api/include/opentelemetry/trace/semantic_conventions.h` +* `sdk/include/opentelemetry/sdk/resource/semantic_conventions.h` + +are now deprecated. + +They correspond to semantic conventions v1.27.0, +and will no longer be maintained up to date. + +These files will be removed in the future. + +#### Mitigation (semantic_conventions.h) + +Two things have changed: + +* the header file to use +* the symbol name to use. + +Before, the semantic convention for `url.full` was: + +* declared in file `semantic_conventions.h` +* declared as symbol `SemanticConventions::kUrlFull` + +Now, the `url.full` convention, which is part or the `url` group, is: + +* declared in file `semconv/url_attributes.h` +* declared as symbol `semconv::url::kUrlFull` + +Application code that uses semantic conventions must be adjusted +accordingly. + +In addition, semantic conventions that are not marked as stable +are generated in a different header file, placed under directory +`incubating`, to better separate stable and non stable code. + +For example, file `semconv/incubating/url_attributes.h` +defines `semconv::url::kUrlDomain`, +which is not marked as stable in semconv v1.27.0 + +#### Planned removal (semantic_conventions.h) + +The following files: + +* `api/include/opentelemetry/trace/semantic_conventions.h` +* `sdk/include/opentelemetry/sdk/resource/semantic_conventions.h` + +will be removed. + +The removal date is planned for July 1, 2025. +This allows more than six months for applications to adjust. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/INSTALL.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/INSTALL.md new file mode 100644 index 00000000..296a61c4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/INSTALL.md @@ -0,0 +1,452 @@ +# Building opentelemetry-cpp + +[CMake](https://cmake.org/) and [Bazel](https://bazel.build) are the official +build systems for opentelemetry-cpp. + +## Dependencies + +You can link OpenTelemetry C++ SDK with libraries provided in +[dependencies.md](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/docs/dependencies.md) +(complete list of libraries with versions used in our CI can be found +[here](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/third_party_release)). + +## Build instructions using CMake + +### Prerequisites for CMake build + +- A supported platform (e.g. Windows, macOS or Linux). Refer to [Platforms + Supported](./README.md#supported-development-platforms) for more information. +- A compatible C++ compiler supporting at least C++14. Major compilers are + supported. Refer to [Supported Compilers](./README.md#supported-c-versions) + for more information. +- [Git](https://git-scm.com/) for fetching opentelemetry-cpp source code from + repository. To install Git, consult the [Set up + Git](https://help.github.com/articles/set-up-git/) guide on GitHub. +- [CMake](https://cmake.org/) for building opentelemetry-cpp API, SDK with their + unittests. The minimum CMake version is 3.14. + CMake 3.15+ is recommended on Windows due to known CI test failures with 3.14. + To install CMake, + consult the [Installing CMake](https://cmake.org/install/) guide. +- [GoogleTest](https://github.com/google/googletest) framework to build and run + the unittests. Refer to + [third_party_release](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/third_party_release#L5) + for version of GoogleTest used in CI. To install GoogleTest, consult the + [GoogleTest Build + Instructions](https://github.com/google/googletest/blob/master/googletest/README.md#generic-build-instructions). +- [Google Benchmark](https://github.com/google/benchmark) framework to build and + run benchmark tests. Refer to + [third_party_release](https://github.com/open-telemetry/opentelemetry-cpp/blob/main/third_party_release#L4) + for version of Benchmark used in CI. To install Benchmark, consult the + [GoogleBenchmark Build + Instructions](https://github.com/google/benchmark#installation). +- Apart from above core requirements, the Exporters and Propagators have their + build dependencies. + +### Building dependencies for the OTLP exporters + +The opentelemetry-cpp OTLP exporters depend on Protobuf and gRPC + (in the case of the otlp grpc exporters). +Protobuf (since version 3.22.0) and gRPC depend on Abseil. +For cmake builds, it is best practice to build and install Abseil +, Protobuf, and gPRC as independent packages - +configuring cmake for Protobuf and gRPC to build against + the installed packages instead of using their submodule option. + +If building and installing Protobuf and gRPC manually with cmake the + recommended approach is: + +1. Choose the desired tag version of grpc. Find the compatible versions of abseil + and protobuf by inspecting the submodules of grpc at that tag. +2. Build and install the required version of abseil +3. Build and install the required version of protobuf + - Set the cmake option of Protobuf to build against the installed + package of Abseil (`protobuf_ABSL_PROVIDER=package`) +4. Build and install the required version of grpc + - Set the cmake option of grpc to build against the installed packages + of Abseil and Protobuf (cmake options - `gRPC_ABSL_PROVIDER=package` and `gRPC_PROTOBUF_PROVIDER=package`) + +### Building as standalone CMake Project + +1. Getting the opentelemetry-cpp source with its submodules: + + ```console + # Change to the directory where you want to create the code repository + $ cd ~ + $ mkdir source && cd source && git clone --recurse-submodules https://github.com/open-telemetry/opentelemetry-cpp + Cloning into 'opentelemetry-cpp'... + ... + Resolving deltas: 100% (3225/3225), done. + $ + ``` + +2. Navigate to the repository cloned above, and create the `CMake` build + configuration. + + ```console + $ cd opentelemetry-cpp + $ mkdir build && cd build && cmake .. + -- The C compiler identification is GNU 9.3.0 + -- The CXX compiler identification is GNU 9.3.0 + ... + -- Configuring done + -- Generating done + -- Build files have been written to: /home//source/opentelemetry-cpp/build + $ + ``` + + Some of the available cmake build variables we can use during cmake + configuration: + + - `-DCMAKE_POSITION_INDEPENDENT_CODE=ON` : Please note that with default + configuration, the code is compiled without `-fpic` option, so it is not + suitable for inclusion in shared libraries. To enable the code for + inclusion in shared libraries, this variable is used. + - `-DBUILD_SHARED_LIBS=ON` : To build shared libraries for the targets. + Please refer to note [below](#building-shared-libs-for-windows) for + Windows DLL support. + - `-DWITH_OTLP_GRPC=ON` : To enable building OTLP GRPC exporter. + - `-DWITH_OTLP_HTTP=ON` : To enable building OTLP HTTP exporter. + - `-DWITH_PROMETHEUS=ON` : To enable building prometheus exporter. + - `-DOPENTELEMETRY_INSTALL=ON`: To install `otel-cpp` library needed + for external code linking. + +3. Once the build configuration is created, build the CMake targets - this + includes building SDKs and unittests for API and SDK. Note that since API is + header only library, no separate build is triggered for it. + + ```console + $ cmake --build . --target all + Scanning dependencies of target timestamp_test + [ 0%] Building CXX object api/test/core/CMakeFiles/timestamp_test.dir/timestamp_test.cc.o + [ 1%] Linking CXX executable timestamp_test + ... + Scanning dependencies of target w3c_tracecontext_test + [ 99%] Building CXX object ext/test/w3c_tracecontext_test/CMakeFiles/w3c_tracecontext_test.dir/main.cc.o + [100%] Linking CXX executable w3c_tracecontext_test + [100%] Built target w3c_tracecontext_test + $ + ``` + +4. Once CMake tests are built, run them with `ctest` command + + ```console + $ ctest + Test project /tmp/opentelemetry-cpp/build + Start 1: trace.SystemTimestampTest.Construction + ... + Start 380: ext.http.urlparser.UrlParserTests.BasicTests + ... + 100% tests passed, 0 tests failed out of 380 + $ + ``` + +5. Optionally install the header files for API, and generated targets and header + files for SDK at custom/default install location. + + ```console + $ cmake --install . --prefix // + -- Installing: //lib/cmake/opentelemetry-cpp/opentelemetry-cpp-config.cmake + -- Installing: //lib/cmake/opentelemetry-cpp/opentelemetry-cpp-config-version.cmake + ... + $ + ``` + +### Incorporating into an external CMake Project + +There are two approaches to incoporate `opentelemetry-cpp` into + an external CMake project: + +1. Build and install `opentelemetry-cpp` then use `find_package` + to import its targets + + ```cmake + # Find all installed components and link all imported targets + find_package(opentelemetry-cpp CONFIG REQUIRED) + ... + target_include_directories(foo PRIVATE ${OPENTELEMETRY_CPP_INCLUDE_DIRS}) + target_link_libraries(foo PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES}) + ``` + + ```cmake + # Find a specific component and link its imported target(s) + find_package(opentelemetry-cpp CONFIG REQUIRED COMPONENTS api) + ... + target_link_libraries(foo PRIVATE opentelemetry-cpp::api) + ``` + +2. Use CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) + module to fetch and build `opentelemetry-cpp` then make its targets available + + ```cmake + # Fetch from an existing clone and build + include(FetchContent) + FetchContent_Declare(opentelemetry-cpp SOURCE_DIR "") + FetchContent_MakeAvailable(opentelemetry-cpp) + ... + target_link_libraries(foo PRIVATE opentelemetry-cpp::api) + ``` + + ```cmake + # Clone and build opentelemetry-cpp from a git tag + include(FetchContent) + FetchContent_Declare( + opentelemetry-cpp + GIT_REPOSITORY https://github.com/open-telemetry/opentelemetry-cpp.git + GIT_TAG v1.20.0) + FetchContent_MakeAvailable(opentelemetry-cpp) + ... + target_link_libraries(foo PRIVATE opentelemetry-cpp::api) + ``` + +In both cases the project's built or imported CMake targets will be + available in the `opentelemetry-cpp` namespace (ie: `opentelemetry-cpp::api`) + +#### Using opentelemetry-cpp package components + +> **Note:** `opentelemetry-cpp` CMake package components were introduced in `v1.21.0` + +The `opentelemetry-cpp` package supports using the `COMPONENTS` argument to +`find_package`. The following example illustrates using this feature to include +and link the `api` header only target to an instrumented `foo_lib` while only including +and linking the `sdk` and `otlp_grpc_exporter` targets to the `foo_app`. + +```cmake +# foo_lib/CMakeLists.txt +find_package(opentelemetry-cpp CONFIG REQUIRED COMPONENTS api) +add_library(foo_lib foo.cpp) +target_link_libraries(foo_lib PRIVATE opentelemetry-cpp::api) +``` + +```cmake +# foo_app/CMakeLists.txt +find_package(opentelemetry-cpp CONFIG REQUIRED COMPONENTS api sdk exporters_otlp_grpc) +add_executable(foo_app main.cpp) +target_link_libraries(foo_app PRIVATE foo_lib opentelemetry-cpp::api opentelemetry-cpp::trace opentelemetry-cpp::otlp_grpc_exporter ) +``` + +The following table provides the mapping between components and targets. Components +and targets available in the installation depends on the opentelemetry-cpp package +build configuration. + +> **Note:** components `exporters_elasticsearch` and `exporters_etw` + may be moved out of the core package and to `opentelemetry-cpp-contrib` + in a future release + +| Component | Targets | +|----------------------------|--------------------------------------------------------------------------------------------------| +| **api** | opentelemetry-cpp::api | +| **sdk** | opentelemetry-cpp::sdk | +| | opentelemetry-cpp::version | +| | opentelemetry-cpp::common | +| | opentelemetry-cpp::resources | +| | opentelemetry-cpp::trace | +| | opentelemetry-cpp::metrics | +| | opentelemetry-cpp::logs | +| **ext_common** | opentelemetry-cpp::ext | +| **ext_http_curl** | opentelemetry-cpp::http_client_curl | +| **ext_dll** | opentelemetry-cpp::opentelemetry_cpp | +| **exporters_in_memory** | opentelemetry-cpp::in_memory_span_exporter | +| | opentelemetry-cpp::in_memory_metric_exporter | +| **exporters_ostream** | opentelemetry-cpp::ostream_log_record_exporter | +| | opentelemetry-cpp::ostream_metrics_exporter | +| | opentelemetry-cpp::ostream_span_exporter | +| **exporters_otlp_common** | opentelemetry-cpp::proto | +| | opentelemetry-cpp::otlp_recordable | +| **exporters_otlp_file** | opentelemetry-cpp::otlp_file_client | +| | opentelemetry-cpp::otlp_file_exporter | +| | opentelemetry-cpp::otlp_file_log_record_exporter | +| | opentelemetry-cpp::otlp_file_metric_exporter | +| **exporters_otlp_grpc** | opentelemetry-cpp::proto_grpc | +| | opentelemetry-cpp::otlp_grpc_client | +| | opentelemetry-cpp::otlp_grpc_exporter | +| | opentelemetry-cpp::otlp_grpc_log_record_exporter | +| | opentelemetry-cpp::otlp_grpc_metrics_exporter | +| **exporters_otlp_http** | opentelemetry-cpp::otlp_http_client | +| | opentelemetry-cpp::otlp_http_exporter | +| | opentelemetry-cpp::otlp_http_log_record_exporter | +| | opentelemetry-cpp::otlp_http_metric_exporter | +| **exporters_prometheus** | opentelemetry-cpp::prometheus_exporter | +| **exporters_elasticsearch**| opentelemetry-cpp::elasticsearch_log_record_exporter | +| **exporters_etw** | opentelemetry-cpp::etw_exporter | +| **exporters_zipkin** | opentelemetry-cpp::zipkin_trace_exporter | +| **shims_opentracing** | opentelemetry-cpp::opentracing_shim | + +## Build instructions using Bazel + +NOTE: Experimental, and not supported for all the components. Make sure the +[GoogleTest](https://github.com/google/googletest) installation may fail if +there is a different version of googletest already installed in system-defined +path. + +### Prerequisites for Bazel build + +- A supported platform (e.g. Windows, macOS or Linux). Refer to [Platforms +Supported](./README.md#supported-development-platforms) for more information. +- A compatible C++ compiler supporting at least C++14. Major compilers are +supported. Refer to [Supported Compilers](./README.md#supported-c-versions) for +more information. +- [Git](https://git-scm.com/) for fetching opentelemetry-cpp source code from +repository. To install Git, consult the [Set up +Git](https://help.github.com/articles/set-up-git/) guide on GitHub. +- [Bazel](https://www.bazel.build/) for building opentelemetry-cpp API, SDK with +their unittests. We use 3.7.2 in our build system. + +To install Bazel, consult the [Installing +Bazel](https://docs.bazel.build/versions/3.7.0/install.html) guide. + +### Building as standalone Bazel Project + +1. Getting the opentelemetry-cpp source: + + ```console + # Change to the directory where you want to create the code repository + $ cd ~ + $ mkdir source && cd source + $ git clone https://github.com/open-telemetry/opentelemetry-cpp + Cloning into 'opentelemetry-cpp'... + ... + Resolving deltas: 100% (3225/3225), done. + $ + ``` + +2. Navigate to the repository cloned above, download the dependencies and build + the source code: + + ```console + $ cd opentelemetry-cpp + $ bazel build //... + bazel build -- //... -//exporters/otlp/... -//exporters/prometheus/... + Extracting Bazel installation... + Starting local Bazel server and connecting to it... + INFO: Analyzed 121 targets (98 packages loaded, 3815 targets configured). + INFO: Found 121 targets... + INFO: From Compiling sdk/src/trace/tracer_context.cc: + ... + + ``` + +3. Once Bazel tests are built, run them with `bazel test //...` command + + ```console + $ bazel test //... + .. + $ + ``` + +4. The build artifacts will be located under `bazel-bin` + +### Incorporating into an existing Bazel Project + +- WORKSPACE file: + +```console +http_archive( + name = "io_opentelemetry_cpp", + sha256 = "", + strip_prefix = "opentelemetry-cpp-1.0.1", + urls = [ + "https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/v1.0.1.tar.gz" + ], +) + +# Load OpenTelemetry dependencies after load. +load("@io_opentelemetry_cpp//bazel:repository.bzl", "opentelemetry_cpp_deps") + +opentelemetry_cpp_deps() + +# (required after v1.8.0) Load extra dependencies required for OpenTelemetry +load("@io_opentelemetry_cpp//bazel:extra_deps.bzl", "opentelemetry_extra_deps") + +opentelemetry_extra_deps() + +# Load gRPC dependencies after load. +load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps") + +grpc_deps() + +# Load extra gRPC dependencies due to https://github.com/grpc/grpc/issues/20511 +load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps") + +grpc_extra_deps() + +``` + +- Component level BUILD file: + +```console +cc_library( + name = "" + ... + deps = [ + "@io_opentelemetry_cpp//api", + "@io_opentelemetry_cpp//exporters/otlp:otlp_exporter", + "@io_opentelemetry_cpp//sdk/src/trace", + ... + ], + ... +) +``` + +## Building shared libs for Windows + +Windows DLL build is supported under **preview**. Please check the +[doc](./docs/build-as-dll.md) for more details. + +## Generating binary packages + +OpenTelemetry C++ supports generating platform specific binary packages from CMake +configuration. The packages generated through this mayn't be production ready, +and user may have to customize it further before using it as distribution. + +- Linux : deb, rpm, tgz +- MacOS : tgz +- Windows : NuGet, zip + +This requires platform specific package generators already installed. The package +generation can subsequently be enabled by using BUILD_PACKAGE option during cmake +configuration + + ```console + $ cd opentelemetry-cpp + $ mkdir build && cd build && cmake -DBUILD_PACKAGE=ON .. + + -- Package name: opentelemetry-cpp-1.8.1-ubuntu-20.04-x86_64.deb + -- Configuring done + -- Generating done + ... + $ + ``` + +Once build is complete as specified in [standalone build section](#building-as-standalone-cmake-project), +the package can be generated as below. + + ```console + $ cpack -C debug + CPack: Create package using DEB + ... + CPack: - package: /home//opentelemetry-cpp/build/opentelemetry-cpp-1.8.1-ubuntu-20.04-x86_64.deb generated. + $ + ``` + +## Using Package Managers + +If you are using [Conan](https://www.conan.io/) to manage your dependencies, add +[`opentelemetry-cpp/x.y.z`](https://conan.io/center/opentelemetry-cpp) to your +`conanfile`'s requires, where `x.y.z` is the release version you want to use. +Please file issues [here](https://github.com/conan-io/conan-center-index/issues) +if you experience problems with the packages. + +If you are using [vcpkg](https://github.com/Microsoft/vcpkg/) on your project +for external dependencies, then you can install the [opentelemetry-cpp +package](https://github.com/microsoft/vcpkg/tree/master/ports/opentelemetry-cpp) +with `vcpkg install opentelemetry-cpp` and follow the then displayed +descriptions. Please see the vcpkg project for any issues regarding the +packaging. + +If you are using [alpine linux](https://www.alpinelinux.org/) you can install +the [opentelemetry-cpp packages](https://pkgs.alpinelinux.org/packages?name=opentelemetry-cpp-*) +with `apk add -X http://dl-cdn.alpinelinux.org/alpine/edge/testing opentelemetry-cpp-dev`. + +Please note, these packages are not officially provided and maintained by +OpenTelemetry C++ project, and are just listed here to consolidate all such +efforts for ease of developers. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/LICENSE b/zerotier-one/ext/opentelemetry-cpp-1.21.0/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/MODULE.bazel b/zerotier-one/ext/opentelemetry-cpp-1.21.0/MODULE.bazel new file mode 100644 index 00000000..59d84409 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/MODULE.bazel @@ -0,0 +1,25 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +module( + name = "opentelemetry-cpp", + version = "1.21.0", + compatibility_level = 0, + repo_name = "io_opentelemetry_cpp", +) + +bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "com_google_absl") +bazel_dep(name = "bazel_skylib", version = "1.5.0") +bazel_dep(name = "curl", version = "8.8.0") +bazel_dep(name = "grpc", version = "1.63.1.bcr.1", repo_name = "com_github_grpc_grpc") +bazel_dep(name = "nlohmann_json", version = "3.12.0", repo_name = "github_nlohmann_json") +bazel_dep(name = "opentelemetry-proto", version = "1.6.0", repo_name = "com_github_opentelemetry_proto") +bazel_dep(name = "opentracing-cpp", version = "1.6.0", repo_name = "com_github_opentracing") +bazel_dep(name = "platforms", version = "0.0.8") +bazel_dep(name = "prometheus-cpp", version = "1.3.0", repo_name = "com_github_jupp0r_prometheus_cpp") +bazel_dep(name = "protobuf", version = "26.0", repo_name = "com_google_protobuf") +bazel_dep(name = "rules_proto", version = "5.3.0-21.7") +bazel_dep(name = "zlib", version = "1.3.1.bcr.1") + +bazel_dep(name = "google_benchmark", version = "1.8.3", dev_dependency = True, repo_name = "com_github_google_benchmark") +bazel_dep(name = "googletest", version = "1.14.0.bcr.1", dev_dependency = True, repo_name = "com_google_googletest") diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/README.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/README.md new file mode 100644 index 00000000..01645aa8 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/README.md @@ -0,0 +1,127 @@ +# OpenTelemetry C++ + +[![Slack](https://img.shields.io/badge/slack-@cncf/otel/cpp-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/archives/C01N3AT62SJ) +[![codecov.io](https://codecov.io/gh/open-telemetry/opentelemetry-cpp/branch/main/graphs/badge.svg?)](https://codecov.io/gh/open-telemetry/opentelemetry-cpp/) +[![Build +Status](https://github.com/open-telemetry/opentelemetry-cpp/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/open-telemetry/opentelemetry-cpp/actions) +[![Release](https://img.shields.io/github/v/release/open-telemetry/opentelemetry-cpp?include_prereleases&style=)](https://github.com/open-telemetry/opentelemetry-cpp/releases/) +[![FOSSA License Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-cpp.svg?type=shield&issueType=license)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-cpp?ref=badge_shield&issueType=license) +[![FOSSA Security Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-cpp.svg?type=shield&issueType=security)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fopen-telemetry%2Fopentelemetry-cpp?ref=badge_shield&issueType=security) + +The C++ [OpenTelemetry](https://opentelemetry.io/) client. + +## Project Status + +**Stable** across all 3 signals i.e. `Logs`, `Metrics`, and `Traces`. + +See [Spec Compliance +Matrix](https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix.md) +to understand which portions of the specification has been implemented in this +repo. + +## Supported C++ Versions + +Code shipped from this repository generally supports the following versions of +C++ standards: + +* ISO/IEC 14882:2014 (C++14) +* ISO/IEC 14882:2017 (C++17) +* ISO/IEC 14882:2020 (C++20) + +Any exceptions to this are noted in the individual `README.md` files. + +Please note that supporting the [C Programming +Language](https://en.wikipedia.org/wiki/C_(programming_language)) is not a goal +of the current project. + +## Supported Development Platforms + + Our CI pipeline builds and tests on following `x86-64` platforms: + +| Platform | Build type | +|---------------------------------------------------------------------|---------------| +| ubuntu-22.04 (GCC 10, GCC 12, Clang 14) | CMake, Bazel | +| ubuntu-20.04 (GCC 9.4.0 - default compiler) | CMake, Bazel | +| ubuntu-20.04 (GCC 9.4.0 with -std=c++14/17/20 flags) | CMake, Bazel | +| macOS 12.7 (Xcode 14.2) | Bazel | +| Windows Server 2019 (Visual Studio Enterprise 2019) | CMake, Bazel | +| Windows Server 2022 (Visual Studio Enterprise 2022) | CMake | + +In general, the code shipped from this repository should build on all platforms +having C++ compiler with [supported C++ standards](#supported-c-versions). + +## Dependencies + +Please refer to [Dependencies.md](docs/dependencies.md) for OSS Dependencies and +license requirements. + +## Installation + +Please refer to [INSTALL.md](./INSTALL.md). + +## Getting Started + +As an application owner or the library author, you can find the getting started +guide and reference documentation on +[opentelemetry-cpp.readthedocs.io](https://opentelemetry-cpp.readthedocs.io/en/latest/) + +The `examples/simple` directory contains a minimal program demonstrating how to +instrument a small library using a simple `processor` and console `exporter`, +along with build files for CMake and Bazel. + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) + +We meet weekly, and the time of the meeting alternates between Monday at 13:00 +PT and Wednesday at 9:00 PT. The meeting is subject to change depending on +contributors' availability. Check the [OpenTelemetry community +calendar](https://github.com/open-telemetry/community#calendar) +for specific dates and Zoom meeting links. + +Meeting notes are available as a public [Google +doc](https://docs.google.com/document/d/1i1E4-_y4uJ083lCutKGDhkpi3n4_e774SBLi9hPLocw/edit?usp=sharing). +For edit access, get in touch on +[Slack](https://cloud-native.slack.com/archives/C01N3AT62SJ). + +[Maintainers](https://github.com/open-telemetry/community/blob/main/community-membership.md#maintainer) +([@open-telemetry/cpp-maintainers](https://github.com/orgs/open-telemetry/teams/cpp-maintainers)): + +* [Ehsan Saei](https://github.com/esigo) +* [Lalit Kumar Bhasin](https://github.com/lalitb), Microsoft +* [Marc Alff](https://github.com/marcalff), Oracle +* [Tom Tan](https://github.com/ThomsonTan), Microsoft + +[Approvers](https://github.com/open-telemetry/community/blob/main/community-membership.md#approver) +([@open-telemetry/cpp-approvers](https://github.com/orgs/open-telemetry/teams/cpp-approvers)): + +* [Doug Barker](https://github.com/dbarker) +* [Josh Suereth](https://github.com/jsuereth), Google +* [Pranav Sharma](https://github.com/psx95), Google +* [WenTao Ou](https://github.com/owent), Tencent + +[Emeritus +Maintainer/Approver/Triager](https://github.com/open-telemetry/community/blob/main/community-membership.md#emeritus-maintainerapprovertriager): + +* [Alolita Sharma](https://github.com/alolita) +* [Emil Mikulic](https://github.com/g-easy) +* [Jodee Varney](https://github.com/jodeev) +* [Johannes Tax](https://github.com/pyohannes) +* [Max Golovanov](https://github.com/maxgolov) +* [Reiley Yang](https://github.com/reyang) +* [Ryan Burn](https://github.com/rnburn) + +### Thanks to all the people who have contributed + +[![contributors](https://contributors-img.web.app/image?repo=open-telemetry/opentelemetry-cpp)](https://github.com/open-telemetry/opentelemetry-cpp/graphs/contributors) + +## Release Schedule + +See the [release +notes](https://github.com/open-telemetry/opentelemetry-cpp/releases) for +existing releases. + +See the [project +milestones](https://github.com/open-telemetry/opentelemetry-cpp/milestones) for +details on upcoming releases. The dates and features described in issues and +milestones are estimates, and subject to change. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/RELEASING.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/RELEASING.md new file mode 100644 index 00000000..852332e8 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/RELEASING.md @@ -0,0 +1,96 @@ +# Release Process + +## Pre Release + +1: Upgrade to latest [dependencies](docs/maintaining-dependencies.md) +if required. + +2: Make sure all relevant changes for this release are included under +`Unreleased` section in `CHANGELOG.md` and are in language that non-contributors +to the project can understand. + +3: Run the pre-release script. It creates a branch `pre_release_` and +updates `CHANGELOG.md` with the ``: + +```sh +./buildscripts/pre_release.sh -t +``` + +4: Verify that CHANGELOG.md is updated properly: + +```sh +git diff main +``` + +5: Push the changes to upstream and create a Pull Request on GitHub. Be sure to +include the curated changes from the [Changelog](./CHANGELOG.md) in the +description. + +## Tag + +Once the above Pull Request has been approved and merged it is time to tag the +merged commit. + +***IMPORTANT***: It is critical you use the same tag that you used in the +Pre-Release step! Failure to do so will leave things in a broken state. + +1: Note down the commit hash of the master branch after above PR request is +merged: `` + +```sh +git show -s --format=%H +``` + +2: Create a github tag on this commit hash: + +```sh +git tag -a "" -s -m "Version " "" +``` + +3: Push tag to upstream remote + +```sh +git push upstream +``` + +## Versioning + +Once tag is created, it's time to use that tag for Runtime Versioning + +1: Create a new brach for updating version information in +`./sdk/src/version.cc`. + +```sh +git checkout -b update_version_${tag} master +``` + +2: Run the pre-commit script to update the version: + +```sh +./buildscripts/pre-commit +``` + +3: Check if any changes made since last release broke ABI compatibility. If yes, +update `OPENTELEMETRY_ABI_VERSION_NO` in +[version.h](api/include/opentelemetry/version.h). + +4: Push the changes to upstream and create a Pull Request on GitHub. + +5: Once changes are merged, move the tag created earlier to the new commit hash +from step 4. + +```sh +git tag -f +git push --tags --force +``` + +## Release + +Finally create a Release for the new `` on GitHub. The release body +should include all the release notes from the Changelog for this release. + +## Post Release + +Update the OpenTelemetry.io document +[here](https://github.com/open-telemetry/opentelemetry.io/tree/main/content/en/docs/instrumentation/cpp) +by sending a Pull Request. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/Versioning.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/Versioning.md new file mode 100644 index 00000000..b6cbe490 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/Versioning.md @@ -0,0 +1,107 @@ +# Versioning + +This document describes the versioning policy for this repository. + +## Goals + +### API and SDK Compatibility + +Once the API for a given signal (spans, logs, metrics, baggage) has been +officially released, that API module will function with any SDK that has the +same MAJOR version and equal or greater MINOR or PATCH version. For example, +application compiled with API v1.1 is compatible with SDK v1.1.2, v1.2.0, etc. + +For example, libraries that are instrumented with `opentelemetry 1.0.1` will +function in applications using `opentelemetry 1.11.33` or `opentelemetry 1.3.4`, +buy may not work in applications using `opentelemetry 2.0.0`. + +### ABI Stability + +Refer to the [ABI Policy](./docs/abi-policy.md) for more details. To summarise: + +* The API is header only, and uses ABI compliant interfaces. However, ABI + stability is not guaranteed for SDK. +* In case of ABI breaking changes, a new `inline namespace` version will be + introduced, and the existing linked applications can continue using the older + version unless they relink with newer version. + +## Release Policy + +* Release versions will follow [SemVer 2.0](https://semver.org/). +* Only a single source package containing the API, SDK, and exporters which are + required by the specification would be released. All these components are + always versioned and released together. For example, any changes in one of the + exporter would result in version update of the entire source package even + though there is no changes in API, SDK and other exporters. +* Experimental releases: New (unstable) telemetry signals and features will be + introduced behind feature flag protected by a preprocessor macro. + + ```cpp + #ifdef FEATURE_FLAG + + #endif + ``` + + As we deliver the package in source form, and the user is responsible to build + it for their platform, the user must be aware of these feature flags + (documented in the [CHANGELOG.md](CHANGELOG.md) file). The user must enable + them explicitly through their build system (CMake, Bazel or others) to use any + preview features. + + The guidelines in creating feature flag would be: + + * Naming: + * `ENABLE__PREVIEW` : For experimental release of signal api/sdks + eg, `METRICS_PREVIEW`, `LOGS_PREVIEW`, + * `ENABLE___PREVIEW` : For experimental release for + any feature within stable signal. For example, `TRACING_JAEGER_PREVIEW` to + release the experimental Jaeger exporter for tracing. + * Cleanup: It is good practice to keep feature-flags as shortlived as + possible. And, also important to keep the number of them low. They should be + used such that it is easy to remove/cleanup them once the experimental + feature is stable. + +* New signals will be stabilized via a **minor version bump**, and are not + allowed to break existing stable interfaces. Feature flags will be removed + once we have a stable implementation for the signal. + +* As an exception, small experimental features in otherwise stable + signals/components mayn't necessarily be released under feature flag. These + would be flagged as experimental by adding a `NOTE` in it's header file - + either at the beginning of file, or as the comment for the experimental API + methods. Also, if the complete header is experimental, it would be prefixed as + `experimental_`. As an example, the semantic conventions for trace signal is + experimental at the time of the writing and is within + `experimental_semantic_conventions.h` + +* Code under the "*::detail" namespace implements internal details, and is NOT + part of public interface. Also, any API not documented in the [public + documentation](https://opentelemetry-cpp.readthedocs.io/en/latest/) is NOT + part of the public interface. + +* GitHub releases will be made for all released versions. + +## Example Versioning Lifecycle + +Purely for illustration purposes, not intended to represent actual releases: + +* v0.0.1 release: + * Contains experimental API and SDK of trace (without feature flag) + * No API and SDK of logging and metrics available +* v1.0.0-rc1 release: + * Pre-release, no API/ABI guarantees, but more stable than alpha/beta. + * Contains pre-release API and SDK of trace, baggage and resource + * experimental metrics and logging API/SDK behind feature flag +* v1.0.0: ( with traces ) + * Contains stable API and SDK of trace, baggage and resource + * experimental metrics and logging API/SDK behind feature flag +* v1.5.0 release (with metrics) + * Contains stable API and SDK of metrics, trace, baggage, resource. + * experimental logging API/SDK behind feature flag +* v1.10.0 release (with logging) + * Contains stable API and SDK of logging, metrics, trace, baggage, resource. + +### Before moving to version 1.0.0 + +* Major version zero (0.y.z) is for initial development. Anything MAY change at + any time. The public API SHOULD NOT be considered stable. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE b/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE new file mode 100644 index 00000000..a52788ec --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE @@ -0,0 +1,23 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +workspace(name = "io_opentelemetry_cpp") + +# Load our direct dependencies. +load("//bazel:repository.bzl", "opentelemetry_cpp_deps") + +opentelemetry_cpp_deps() + +load("//bazel:extra_deps.bzl", "opentelemetry_extra_deps") + +opentelemetry_extra_deps() + +# Load gRPC dependencies after load. +load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps") + +grpc_deps() + +# Load extra gRPC dependencies due to https://github.com/grpc/grpc/issues/20511 +load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps") + +grpc_extra_deps() diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE.bzlmod b/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE.bzlmod new file mode 100644 index 00000000..0db1b046 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/WORKSPACE.bzlmod @@ -0,0 +1,4 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# Disables the default WORKSPACE when using bzlmod diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/BUILD b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/BUILD new file mode 100644 index 00000000..fb313935 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/BUILD @@ -0,0 +1,81 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "int_flag", "string_flag") + +package(default_visibility = ["//visibility:public"]) + +CPP_STDLIBS = [ + "none", + "best", + "2014", + "2017", + "2020", + "2023", +] + +string_flag( + name = "with_cxx_stdlib", + build_setting_default = "best", + values = CPP_STDLIBS, +) + +cc_library( + name = "api", + hdrs = glob(["include/**/*.h"]), + defines = select({ + ":set_cxx_stdlib_none": [], + ### automatic selection + ":set_cxx_stdlib_best": ["OPENTELEMETRY_STL_VERSION=(__cplusplus/100)"], + # See https://learn.microsoft.com/en-us/cpp/build/reference/zc-cplusplus + ":set_cxx_stdlib_best_and_msvc": ["OPENTELEMETRY_STL_VERSION=(_MSVC_LANG/100)"], + ### manual selection + ":set_cxx_stdlib_2014": ["OPENTELEMETRY_STL_VERSION=2014"], + ":set_cxx_stdlib_2017": ["OPENTELEMETRY_STL_VERSION=2017"], + ":set_cxx_stdlib_2020": ["OPENTELEMETRY_STL_VERSION=2020"], + ":set_cxx_stdlib_2023": ["OPENTELEMETRY_STL_VERSION=2023"], + "//conditions:default": [], + }) + select({ + ":abi_version_no_1": ["OPENTELEMETRY_ABI_VERSION_NO=1"], + ":abi_version_no_2": ["OPENTELEMETRY_ABI_VERSION_NO=2"], + }), + strip_include_prefix = "include", + tags = ["api"], + deps = [ + "@com_google_absl//absl/base", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/types:variant", + ], +) + +[config_setting( + name = "set_cxx_stdlib_%s" % v, + flag_values = {":with_cxx_stdlib": v}, +) for v in CPP_STDLIBS] + +config_setting( + name = "set_cxx_stdlib_best_and_msvc", + constraint_values = ["@bazel_tools//tools/cpp:msvc"], + flag_values = {":with_cxx_stdlib": "best"}, +) + +bool_flag( + name = "with_abseil", + build_setting_default = False, + deprecation = "The value of this flag is ignored. Bazel builds always depend on Abseil for its pre-adopted `std::` types. You should remove this flag from your build command.", +) + +int_flag( + name = "abi_version_no", + build_setting_default = 1, +) + +config_setting( + name = "abi_version_no_1", + flag_values = {":abi_version_no": "1"}, +) + +config_setting( + name = "abi_version_no_2", + flag_values = {":abi_version_no": "2"}, +) diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/CMakeLists.txt b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/CMakeLists.txt new file mode 100644 index 00000000..0707464b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/CMakeLists.txt @@ -0,0 +1,140 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +add_library(opentelemetry_api INTERFACE) +target_include_directories( + opentelemetry_api + INTERFACE "$" + "$") + +set_target_properties(opentelemetry_api PROPERTIES EXPORT_NAME api) + +otel_add_component( + COMPONENT + api + TARGETS + opentelemetry_api + FILES_DIRECTORY + "include/opentelemetry" + FILES_DESTINATION + "include" + FILES_MATCHING + PATTERN + "*.h") + +if(OPENTELEMETRY_INSTALL) + unset(TARGET_DEPS) +endif() + +if(BUILD_TESTING) + add_subdirectory(test) +endif() + +if(WITH_NO_DEPRECATED_CODE) + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_NO_DEPRECATED_CODE) +endif() + +if(WITH_STL STREQUAL "OFF") + message(STATUS "Building WITH_STL=OFF") +elseif(WITH_STL STREQUAL "CXX11") + message(STATUS "Building WITH_STL=CXX11") + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2011) +elseif(WITH_STL STREQUAL "CXX14") + message(STATUS "Building WITH_STL=CXX14") + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2014) +elseif(WITH_STL STREQUAL "CXX17") + message(STATUS "Building WITH_STL=CXX17") + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2017) +elseif(WITH_STL STREQUAL "CXX20") + message(STATUS "Building WITH_STL=CXX20") + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2020) +elseif(WITH_STL STREQUAL "CXX23") + message(STATUS "Building WITH_STL=CXX23") + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2023) +elseif(WITH_STL STREQUAL "ON") + message(STATUS "Building WITH_STL=ON") + # "ON" corresponds to "CXX23" at this time. + target_compile_definitions(opentelemetry_api + INTERFACE OPENTELEMETRY_STL_VERSION=2023) +else() + message( + FATAL_ERROR "WITH_STL must be ON, OFF, CXX11, CXX14, CXX17, CXX20 or CXX23") +endif() + +if(WITH_GSL) + target_compile_definitions(opentelemetry_api INTERFACE HAVE_GSL) + + # Guidelines Support Library path. Used if we are not on not get C++20. + # + find_package(Microsoft.GSL QUIET) + if(TARGET Microsoft.GSL::GSL) + target_link_libraries(opentelemetry_api INTERFACE Microsoft.GSL::GSL) + list(APPEND TARGET_DEPS "gsl") + else() + set(GSL_DIR third_party/ms-gsl) + target_include_directories( + opentelemetry_api INTERFACE "$") + endif() +endif() + +if(WITH_NO_GETENV) + target_compile_definitions(opentelemetry_api INTERFACE NO_GETENV) +endif() + +if(WIN32) + if(WITH_ETW) + target_compile_definitions(opentelemetry_api INTERFACE HAVE_MSGPACK) + endif() +endif() + +if(WITH_ASYNC_EXPORT_PREVIEW) + target_compile_definitions(opentelemetry_api INTERFACE ENABLE_ASYNC_EXPORT) +endif() + +target_compile_definitions( + opentelemetry_api + INTERFACE OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO}) + +if(WITH_OTLP_RETRY_PREVIEW) + target_compile_definitions(opentelemetry_api + INTERFACE ENABLE_OTLP_RETRY_PREVIEW) +endif() + +if(WITH_OTLP_GRPC_SSL_MTLS_PREVIEW) + target_compile_definitions(opentelemetry_api + INTERFACE ENABLE_OTLP_GRPC_SSL_MTLS_PREVIEW) +endif() + +if(WITH_METRICS_EXEMPLAR_PREVIEW) + target_compile_definitions(opentelemetry_api + INTERFACE ENABLE_METRICS_EXEMPLAR_PREVIEW) +endif() + +if(WITH_THREAD_INSTRUMENTATION_PREVIEW) + target_compile_definitions(opentelemetry_api + INTERFACE ENABLE_THREAD_INSTRUMENTATION_PREVIEW) +endif() + +if(WITH_OTLP_HTTP_COMPRESSION) + target_compile_definitions(opentelemetry_api + INTERFACE ENABLE_OTLP_COMPRESSION_PREVIEW) +endif() + +if(APPLE) + target_link_libraries(opentelemetry_api INTERFACE "-framework CoreFoundation") +endif() + +include(${PROJECT_SOURCE_DIR}/cmake/pkgconfig.cmake) + +if(OPENTELEMETRY_INSTALL) + opentelemetry_add_pkgconfig( + api "OpenTelemetry API" + "A header-only library to support instrumentation with OpenTelemetry." + "${TARGET_DEPS}") +endif() diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage.h new file mode 100644 index 00000000..6c799cda --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage.h @@ -0,0 +1,299 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/common/kv_properties.h" +#include "opentelemetry/common/macros.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE + +namespace baggage +{ + +class OPENTELEMETRY_EXPORT Baggage +{ +public: + static constexpr size_t kMaxKeyValuePairs = 180; + static constexpr size_t kMaxKeyValueSize = 4096; + static constexpr size_t kMaxSize = 8192; + static constexpr char kKeyValueSeparator = '='; + static constexpr char kMembersSeparator = ','; + static constexpr char kMetadataSeparator = ';'; + + Baggage() noexcept : kv_properties_(new common::KeyValueProperties()) {} + Baggage(size_t size) noexcept : kv_properties_(new common::KeyValueProperties(size)) {} + + template + Baggage(const T &keys_and_values) noexcept + : kv_properties_(new common::KeyValueProperties(keys_and_values)) + {} + + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr GetDefault() + { + static nostd::shared_ptr baggage{new Baggage()}; + return baggage; + } + + /* Get value for key in the baggage + @returns true if key is found, false otherwise + */ + bool GetValue(nostd::string_view key, std::string &value) const noexcept + { + return kv_properties_->GetValue(key, value); + } + + /* Returns shared_ptr of new baggage object which contains new key-value pair. If key or value is + invalid, copy of current baggage is returned + */ + nostd::shared_ptr Set(const nostd::string_view &key, + const nostd::string_view &value) noexcept + { + + nostd::shared_ptr baggage(new Baggage(kv_properties_->Size() + 1)); + const bool valid_kv = IsValidKey(key) && IsValidValue(value); + + if (valid_kv) + { + baggage->kv_properties_->AddEntry(key, value); + } + + // add rest of the fields. + kv_properties_->GetAllEntries( + [&baggage, &key, &valid_kv](nostd::string_view e_key, nostd::string_view e_value) { + // if key or value was not valid, add all the entries. Add only remaining entries + // otherwise. + if (!valid_kv || key != e_key) + { + baggage->kv_properties_->AddEntry(e_key, e_value); + } + + return true; + }); + + return baggage; + } + + // @return all key-values entries by repeatedly invoking the function reference passed as argument + // for each entry + bool GetAllEntries( + nostd::function_ref callback) const noexcept + { + return kv_properties_->GetAllEntries(callback); + } + + // delete key from the baggage if it exists. Returns shared_ptr of new baggage object. + // if key does not exist, copy of current baggage is returned. + // Validity of key is not checked as invalid keys should never be populated in baggage in the + // first place. + nostd::shared_ptr Delete(nostd::string_view key) noexcept + { + // keeping size of baggage same as key might not be found in it + nostd::shared_ptr baggage(new Baggage(kv_properties_->Size())); + kv_properties_->GetAllEntries( + [&baggage, &key](nostd::string_view e_key, nostd::string_view e_value) { + if (key != e_key) + baggage->kv_properties_->AddEntry(e_key, e_value); + return true; + }); + return baggage; + } + + // Returns shared_ptr of baggage after extracting key-value pairs from header + static nostd::shared_ptr FromHeader(nostd::string_view header) noexcept + { + if (header.size() > kMaxSize) + { + // header size exceeds maximum threshold, return empty baggage + return GetDefault(); + } + + common::KeyValueStringTokenizer kv_str_tokenizer(header); + size_t cnt = kv_str_tokenizer.NumTokens(); // upper bound on number of kv pairs + if (cnt > kMaxKeyValuePairs) + { + cnt = kMaxKeyValuePairs; + } + + nostd::shared_ptr baggage(new Baggage(cnt)); + bool kv_valid; + nostd::string_view key, value; + + while (kv_str_tokenizer.next(kv_valid, key, value) && baggage->kv_properties_->Size() < cnt) + { + if (!kv_valid || (key.size() + value.size() > kMaxKeyValueSize)) + { + // if kv pair is not valid, skip it + continue; + } + + // NOTE : metadata is kept as part of value only as it does not have any semantic meaning. + // but, we need to extract it (else Decode on value will return error) + nostd::string_view metadata; + auto metadata_separator = value.find(kMetadataSeparator); + if (metadata_separator != std::string::npos) + { + metadata = value.substr(metadata_separator); + value = value.substr(0, metadata_separator); + } + + bool err = 0; + auto key_str = UrlDecode(common::StringUtil::Trim(key), err); + auto value_str = UrlDecode(common::StringUtil::Trim(value), err); + + if (err == false && IsValidKey(key_str) && IsValidValue(value_str)) + { + if (!metadata.empty()) + { + value_str.append(metadata.data(), metadata.size()); + } + baggage->kv_properties_->AddEntry(key_str, value_str); + } + } + + return baggage; + } + + // Creates string from baggage object. + std::string ToHeader() const noexcept + { + std::string header_s; + bool first = true; + kv_properties_->GetAllEntries([&](nostd::string_view key, nostd::string_view value) { + if (!first) + { + header_s.push_back(kMembersSeparator); + } + else + { + first = false; + } + header_s.append(UrlEncode(key)); + header_s.push_back(kKeyValueSeparator); + + // extracting metadata from value. We do not encode metadata + auto metadata_separator = value.find(kMetadataSeparator); + if (metadata_separator != std::string::npos) + { + header_s.append(UrlEncode(value.substr(0, metadata_separator))); + auto metadata = value.substr(metadata_separator); + header_s.append(std::string(metadata.data(), metadata.size())); + } + else + { + header_s.append(UrlEncode(value)); + } + return true; + }); + return header_s; + } + +private: + static bool IsPrintableString(nostd::string_view str) + { + for (const auto ch : str) + { + if (ch < ' ' || ch > '~') + { + return false; + } + } + + return true; + } + + static bool IsValidKey(nostd::string_view key) { return key.size() && IsPrintableString(key); } + + static bool IsValidValue(nostd::string_view value) { return IsPrintableString(value); } + + // Uri encode key value pairs before injecting into header + // Implementation inspired from : https://golang.org/src/net/url/url.go?s=7851:7884#L264 + static std::string UrlEncode(nostd::string_view str) + { + auto to_hex = [](char c) -> char { + static const char *hex = "0123456789ABCDEF"; + return hex[c & 15]; + }; + + std::string ret; + + for (auto c : str) + { + if (std::isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') + { + ret.push_back(c); + } + else if (c == ' ') + { + ret.push_back('+'); + } + else + { + ret.push_back('%'); + ret.push_back(to_hex(c >> 4)); + ret.push_back(to_hex(c & 15)); + } + } + + return ret; + } + + // Uri decode key value pairs after extracting from header + static std::string UrlDecode(nostd::string_view str, bool &err) + { + auto IsHex = [](char c) { + return std::isdigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); + }; + + auto from_hex = [](char c) -> char { + // c - '0' produces integer type which could trigger error/warning when casting to char, + // but the cast is safe here. + return static_cast(std::isdigit(c) ? c - '0' : std::toupper(c) - 'A' + 10); + }; + + std::string ret; + + for (size_t i = 0; i < str.size(); i++) + { + if (str[i] == '%') + { + if (i + 2 >= str.size() || !IsHex(str[i + 1]) || !IsHex(str[i + 2])) + { + err = 1; + return ""; + } + ret.push_back(from_hex(str[i + 1]) << 4 | from_hex(str[i + 2])); + i += 2; + } + else if (str[i] == '+') + { + ret.push_back(' '); + } + else if (std::isalnum(str[i]) || str[i] == '-' || str[i] == '_' || str[i] == '.' || + str[i] == '~') + { + ret.push_back(str[i]); + } + else + { + err = 1; + return ""; + } + } + + return ret; + } + +private: + // Store entries in a C-style array to avoid using std::array or std::vector. + nostd::unique_ptr kv_properties_; +}; + +} // namespace baggage + +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage_context.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage_context.h new file mode 100644 index 00000000..a0016353 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/baggage_context.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/baggage/baggage.h" +#include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE + +namespace baggage +{ + +static const std::string kBaggageHeader = "baggage"; + +inline nostd::shared_ptr GetBaggage(const context::Context &context) noexcept +{ + context::ContextValue context_value = context.GetValue(kBaggageHeader); + if (nostd::holds_alternative>(context_value)) + { + return nostd::get>(context_value); + } + static nostd::shared_ptr empty_baggage{new Baggage()}; + return empty_baggage; +} + +inline context::Context SetBaggage(context::Context &context, + const nostd::shared_ptr &baggage) noexcept +{ + return context.SetValue(kBaggageHeader, baggage); +} + +} // namespace baggage +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/propagation/baggage_propagator.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/propagation/baggage_propagator.h new file mode 100644 index 00000000..d75409ed --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/baggage/propagation/baggage_propagator.h @@ -0,0 +1,60 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/baggage/baggage.h" +#include "opentelemetry/baggage/baggage_context.h" +#include "opentelemetry/context/context.h" +#include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace baggage +{ +namespace propagation +{ + +class BaggagePropagator : public context::propagation::TextMapPropagator +{ +public: + void Inject(context::propagation::TextMapCarrier &carrier, + const context::Context &context) noexcept override + { + auto baggage = baggage::GetBaggage(context); + auto header = baggage->ToHeader(); + if (header.size()) + { + carrier.Set(kBaggageHeader, header); + } + } + + context::Context Extract(const context::propagation::TextMapCarrier &carrier, + context::Context &context) noexcept override + { + nostd::string_view baggage_str = carrier.Get(baggage::kBaggageHeader); + auto baggage = baggage::Baggage::FromHeader(baggage_str); + + if (baggage->ToHeader().size()) + { + return baggage::SetBaggage(context, baggage); + } + else + { + return context; + } + } + + bool Fields(nostd::function_ref callback) const noexcept override + { + return callback(kBaggageHeader); + } +}; +} // namespace propagation +} // namespace baggage +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/attribute_value.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/attribute_value.h new file mode 100644 index 00000000..af4cc83d --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/attribute_value.h @@ -0,0 +1,82 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/variant.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +/// OpenTelemetry signals can be enriched by adding attributes. The +/// \c AttributeValue type is defined as a variant of all attribute value +/// types the OpenTelemetry C++ API supports. +/// +/// The following attribute value types are supported by the OpenTelemetry +/// specification: +/// - Primitive types: string, boolean, double precision floating point +/// (IEEE 754-1985) or signed 64 bit integer. +/// - Homogenous arrays of primitive type values. +/// +/// \warning +/// \parblock The OpenTelemetry C++ API currently supports several attribute +/// value types that are not covered by the OpenTelemetry specification: +/// - \c uint64_t +/// - \c nostd::span +/// - \c nostd::span +/// +/// Those types are reserved for future use and currently should not be +/// used. There are no guarantees around how those values are handled by +/// exporters. +/// \endparblock +using AttributeValue = + nostd::variant, + nostd::span, + nostd::span, + nostd::span, + nostd::span, + nostd::span, + // Not currently supported by the specification, but reserved for future use. + // Added to provide support for all primitive C++ types. + uint64_t, + // Not currently supported by the specification, but reserved for future use. + // Added to provide support for all primitive C++ types. + nostd::span, + // Not currently supported by the specification, but reserved for future use. + // See https://github.com/open-telemetry/opentelemetry-specification/issues/780 + nostd::span>; + +enum AttributeType +{ + kTypeBool, + kTypeInt, + kTypeInt64, + kTypeUInt, + kTypeDouble, + kTypeCString, + kTypeString, + kTypeSpanBool, + kTypeSpanInt, + kTypeSpanInt64, + kTypeSpanUInt, + kTypeSpanDouble, + kTypeSpanString, + kTypeUInt64, + kTypeSpanUInt64, + kTypeSpanByte +}; + +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable.h new file mode 100644 index 00000000..9d43e157 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable.h @@ -0,0 +1,64 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +/** + * Supports internal iteration over a collection of key-value pairs. + */ +class KeyValueIterable +{ +public: + virtual ~KeyValueIterable() = default; + + /** + * Iterate over key-value pairs + * @param callback a callback to invoke for each key-value. If the callback returns false, + * the iteration is aborted. + * @return true if every key-value pair was iterated over + */ + virtual bool ForEachKeyValue(nostd::function_ref + callback) const noexcept = 0; + + /** + * @return the number of key-value pairs + */ + virtual size_t size() const noexcept = 0; +}; + +/** + * Supports internal iteration over a collection of key-value pairs. + */ +class NoopKeyValueIterable : public KeyValueIterable +{ +public: + ~NoopKeyValueIterable() override = default; + + /** + * Iterate over key-value pairs + * @param callback a callback to invoke for each key-value. If the callback returns false, + * the iteration is aborted. + * @return true if every key-value pair was iterated over + */ + bool ForEachKeyValue( + nostd::function_ref) const noexcept override + { + return true; + } + + /** + * @return the number of key-value pairs + */ + size_t size() const noexcept override { return 0; } +}; + +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable_view.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable_view.h new file mode 100644 index 00000000..e22fb6f0 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/key_value_iterable_view.h @@ -0,0 +1,146 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/nostd/utility.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +// NOTE - code within `detail` namespace implements internal details, and not part +// of the public interface. +namespace detail +{ +inline void take_key_value(nostd::string_view, common::AttributeValue) {} + +template +auto is_key_value_iterable_impl(T iterable) + -> decltype(take_key_value(std::begin(iterable)->first, std::begin(iterable)->second), + nostd::size(iterable), + std::true_type{}); + +std::false_type is_key_value_iterable_impl(...); + +template +struct is_key_value_iterable +{ + static const bool value = decltype(detail::is_key_value_iterable_impl(std::declval()))::value; +}; +} // namespace detail + +/** + * @brief Container for key-value pairs that can transform every value in it to one of types + * listed in common::AttributeValue. It may contain value types that are not directly map'able + * to primitive value types. In that case the `ForEachKeyValue` method acts as a transform to + * convert the value type to one listed under AtributeValue (bool, int32_t, int64_t, uint32_t, + * uint64_t, double, nostd::string_view, or arrays of primite types). For example, if UUID, + * GUID, or UTF-16 string type is passed as one of values stored inside this container, the + * container itself may provide a custom implementation of `ForEachKeyValue` to transform the + * 'non-standard' type to one of the standard types. + */ +template +class KeyValueIterableView final : public KeyValueIterable +{ + +public: + explicit KeyValueIterableView(const T &container) noexcept : container_{&container} {} + + // KeyValueIterable + bool ForEachKeyValue(nostd::function_ref + callback) const noexcept override + { + auto iter = std::begin(*container_); + auto last = std::end(*container_); + for (; iter != last; ++iter) + { + if (!callback(iter->first, iter->second)) + { + return false; + } + } + return true; + } + + size_t size() const noexcept override { return nostd::size(*container_); } + +private: + const T *container_; +}; + +template ::value> * = nullptr> +KeyValueIterableView MakeKeyValueIterableView(const T &container) noexcept +{ + return KeyValueIterableView(container); +} + +/** + * Utility function to help to make a attribute view from initializer_list + * + * @param attributes + * @return nostd::span> + */ +inline static nostd::span> +MakeAttributes(std::initializer_list> + attributes) noexcept +{ + return nostd::span>{ + attributes.begin(), attributes.end()}; +} + +/** + * Utility function to help to make a attribute view from a span + * + * @param attributes + * @return nostd::span> + */ +inline static nostd::span> +MakeAttributes( + nostd::span> attributes) noexcept +{ + return attributes; +} + +/** + * Utility function to help to make a attribute view from a KeyValueIterable + * + * @param attributes + * @return common::KeyValueIterable + */ +inline static const common::KeyValueIterable &MakeAttributes( + const common::KeyValueIterable &attributes) noexcept +{ + return attributes; +} + +/** + * Utility function to help to make a attribute view from a key-value iterable object + * + * @param attributes + * @return nostd::span> + */ +template < + class ArgumentType, + nostd::enable_if_t::value> * = nullptr> +inline static common::KeyValueIterableView MakeAttributes( + const ArgumentType &arg) noexcept +{ + return common::KeyValueIterableView(arg); +} + +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/kv_properties.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/kv_properties.h new file mode 100644 index 00000000..b5accab4 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/kv_properties.h @@ -0,0 +1,272 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/common/string_util.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +#include +#include +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ + +// Constructor parameter for KeyValueStringTokenizer +struct KeyValueStringTokenizerOptions +{ + char member_separator = ','; + char key_value_separator = '='; + bool ignore_empty_members = true; +}; + +// Tokenizer for key-value headers +class KeyValueStringTokenizer +{ +public: + KeyValueStringTokenizer( + nostd::string_view str, + const KeyValueStringTokenizerOptions &opts = KeyValueStringTokenizerOptions()) noexcept + : str_(str), opts_(opts), index_(0) + {} + + static nostd::string_view GetDefaultKeyOrValue() + { + static std::string default_str = ""; + return default_str; + } + + // Returns next key value in the string header + // @param valid_kv : if the found kv pair is valid or not + // @param key : key in kv pair + // @param key : value in kv pair + // @returns true if next kv pair was found, false otherwise. + bool next(bool &valid_kv, nostd::string_view &key, nostd::string_view &value) noexcept + { + valid_kv = true; + while (index_ < str_.size()) + { + bool is_empty_pair = false; + size_t end = str_.find(opts_.member_separator, index_); + if (end == std::string::npos) + { + end = str_.size() - 1; + } + else if (end == index_) // empty pair. do not update end + { + is_empty_pair = true; + } + else + { + end--; + } + + auto list_member = StringUtil::Trim(str_, index_, end); + if (list_member.size() == 0 || is_empty_pair) + { + // empty list member + index_ = end + 2 - is_empty_pair; + if (opts_.ignore_empty_members) + { + continue; + } + + valid_kv = true; + key = GetDefaultKeyOrValue(); + value = GetDefaultKeyOrValue(); + return true; + } + + auto key_end_pos = list_member.find(opts_.key_value_separator); + if (key_end_pos == std::string::npos) + { + // invalid member + valid_kv = false; + } + else + { + key = list_member.substr(0, key_end_pos); + value = list_member.substr(key_end_pos + 1); + } + + index_ = end + 2; + + return true; + } + + // no more entries remaining + return false; + } + + // Returns total number of tokens in header string + size_t NumTokens() const noexcept + { + size_t cnt = 0, begin = 0; + while (begin < str_.size()) + { + ++cnt; + size_t end = str_.find(opts_.member_separator, begin); + if (end == std::string::npos) + { + break; + } + + begin = end + 1; + } + + return cnt; + } + + // Resets the iterator + void reset() noexcept { index_ = 0; } + +private: + nostd::string_view str_; + KeyValueStringTokenizerOptions opts_; + size_t index_; +}; + +// Class to store fixed size array of key-value pairs of string type +class KeyValueProperties +{ + // Class to store key-value pairs of string types +public: + class Entry + { + public: + Entry() : key_(nullptr), value_(nullptr) {} + + // Copy constructor + Entry(const Entry ©) + { + key_ = CopyStringToPointer(copy.key_.get()); + value_ = CopyStringToPointer(copy.value_.get()); + } + + // Copy assignment operator + Entry &operator=(Entry &other) + { + key_ = CopyStringToPointer(other.key_.get()); + value_ = CopyStringToPointer(other.value_.get()); + return *this; + } + + // Move contructor and assignment operator + Entry(Entry &&other) = default; + Entry &operator=(Entry &&other) = default; + + // Creates an Entry for a given key-value pair. + Entry(nostd::string_view key, nostd::string_view value) + { + key_ = CopyStringToPointer(key); + value_ = CopyStringToPointer(value); + } + + // Gets the key associated with this entry. + nostd::string_view GetKey() const noexcept { return key_.get(); } + + // Gets the value associated with this entry. + nostd::string_view GetValue() const noexcept { return value_.get(); } + + // Sets the value for this entry. This overrides the previous value. + void SetValue(nostd::string_view value) noexcept { value_ = CopyStringToPointer(value); } + + private: + // Store key and value as raw char pointers to avoid using std::string. + nostd::unique_ptr key_; + nostd::unique_ptr value_; + + // Copies string into a buffer and returns a unique_ptr to the buffer. + // This is a workaround for the fact that memcpy doesn't accept a const destination. + nostd::unique_ptr CopyStringToPointer(nostd::string_view str) + { + char *temp = new char[str.size() + 1]; + memcpy(temp, str.data(), str.size()); + temp[str.size()] = '\0'; + return nostd::unique_ptr(temp); + } + }; + + // Maintain the number of entries in entries_. + size_t num_entries_; + + // Max size of allocated array + size_t max_num_entries_; + + // Store entries in a C-style array to avoid using std::array or std::vector. + nostd::unique_ptr entries_; + +public: + // Create Key-value list of given size + // @param size : Size of list. + KeyValueProperties(size_t size) noexcept + : num_entries_(0), max_num_entries_(size), entries_(new Entry[size]) + {} + + // Create Empty Key-Value list + KeyValueProperties() noexcept : num_entries_(0), max_num_entries_(0), entries_(nullptr) {} + + template ::value>::type> + KeyValueProperties(const T &keys_and_values) noexcept + : num_entries_(0), + max_num_entries_(keys_and_values.size()), + entries_(new Entry[max_num_entries_]) + { + for (auto &e : keys_and_values) + { + Entry entry(e.first, e.second); + (entries_.get())[num_entries_++] = std::move(entry); + } + } + + // Adds new kv pair into kv properties + void AddEntry(nostd::string_view key, nostd::string_view value) noexcept + { + if (num_entries_ < max_num_entries_) + { + Entry entry(key, value); + (entries_.get())[num_entries_++] = std::move(entry); + } + } + + // Returns all kv pair entries + bool GetAllEntries( + nostd::function_ref callback) const noexcept + { + for (size_t i = 0; i < num_entries_; i++) + { + auto &entry = (entries_.get())[i]; + if (!callback(entry.GetKey(), entry.GetValue())) + { + return false; + } + } + return true; + } + + // Return value for key if exists, return false otherwise + bool GetValue(nostd::string_view key, std::string &value) const noexcept + { + for (size_t i = 0; i < num_entries_; i++) + { + auto &entry = (entries_.get())[i]; + if (entry.GetKey() == key) + { + const auto &entry_value = entry.GetValue(); + value = std::string(entry_value.data(), entry_value.size()); + return true; + } + } + return false; + } + + size_t Size() const noexcept { return num_entries_; } +}; +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/macros.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/macros.h new file mode 100644 index 00000000..71d12a57 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/macros.h @@ -0,0 +1,523 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +/* + OPENTELEMETRY_HAVE_BUILTIN&OPENTELEMETRY_HAVE_FEATURE + + Checks whether the compiler supports a Clang Feature Checking Macro, and if + so, checks whether it supports the provided builtin function "x" where x + is one of the functions noted in + https://clang.llvm.org/docs/LanguageExtensions.html + + Note: Use this macro to avoid an extra level of #ifdef __has_builtin check. + http://releases.llvm.org/3.3/tools/clang/docs/LanguageExtensions.html +*/ +#if !defined(OPENTELEMETRY_HAVE_BUILTIN) +# ifdef __has_builtin +# define OPENTELEMETRY_HAVE_BUILTIN(x) __has_builtin(x) +# else +# define OPENTELEMETRY_HAVE_BUILTIN(x) 0 +# endif +#endif + +#if !defined(OPENTELEMETRY_HAVE_FEATURE) +# ifdef __has_feature +# define OPENTELEMETRY_HAVE_FEATURE(f) __has_feature(f) +# else +# define OPENTELEMETRY_HAVE_FEATURE(f) 0 +# endif +#endif + +/* + has feature + + OPENTELEMETRY_HAVE_ATTRIBUTE + + A function-like feature checking macro that is a wrapper around + `__has_attribute`, which is defined by GCC 5+ and Clang and evaluates to a + nonzero constant integer if the attribute is supported or 0 if not. + + It evaluates to zero if `__has_attribute` is not defined by the compiler. + + GCC: https://gcc.gnu.org/gcc-5/changes.html + Clang: https://clang.llvm.org/docs/LanguageExtensions.html +*/ +#if !defined(OPENTELEMETRY_HAVE_ATTRIBUTE) +# ifdef __has_attribute +# define OPENTELEMETRY_HAVE_ATTRIBUTE(x) __has_attribute(x) +# else +# define OPENTELEMETRY_HAVE_ATTRIBUTE(x) 0 +# endif +#endif + +/* + OPENTELEMETRY_HAVE_CPP_ATTRIBUTE + + A function-like feature checking macro that accepts C++11 style attributes. + It's a wrapper around `__has_cpp_attribute`, defined by ISO C++ SD-6 + (https://en.cppreference.com/w/cpp/experimental/feature_test). If we don't + find `__has_cpp_attribute`, will evaluate to 0. +*/ +#if !defined(OPENTELEMETRY_HAVE_CPP_ATTRIBUTE) +# if defined(__cplusplus) && defined(__has_cpp_attribute) +// NOTE: requiring __cplusplus above should not be necessary, but +// works around https://bugs.llvm.org/show_bug.cgi?id=23435. +# define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +# else +# define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) 0 +# endif +#endif + +/* + Expected usage pattern: + + if OPENTELEMETRY_LIKELY_CONDITION (ptr != nullptr) + { + do_something_likely(); + } else { + do_something_unlikely(); + } + + This pattern works with gcc/clang and __builtin_expect(), + as well as with C++20. + It is unclear if __builtin_expect() will be deprecated + in favor of C++20 [[likely]] or not. + + OPENTELEMETRY_LIKELY_CONDITION is preferred over OPENTELEMETRY_LIKELY, + to be revisited when C++20 is required. +*/ + +#if !defined(OPENTELEMETRY_LIKELY_CONDITION) && defined(__cplusplus) +// Only use likely with C++20 +# if __cplusplus >= 202002L +// GCC 9 has likely attribute but do not support declare it at the beginning of statement +# if defined(__has_cpp_attribute) && (defined(__clang__) || !defined(__GNUC__) || __GNUC__ > 9) +# if __has_cpp_attribute(likely) +# define OPENTELEMETRY_LIKELY_CONDITION(C) (C) [[likely]] +# endif +# endif +# endif +#endif +#if !defined(OPENTELEMETRY_LIKELY_CONDITION) && (defined(__clang__) || defined(__GNUC__)) +// Only use if supported by the compiler +# define OPENTELEMETRY_LIKELY_CONDITION(C) (__builtin_expect(!!(C), true)) +#endif +#ifndef OPENTELEMETRY_LIKELY_CONDITION +// Do not use likely annotations +# define OPENTELEMETRY_LIKELY_CONDITION(C) (C) +#endif + +#if !defined(OPENTELEMETRY_UNLIKELY_CONDITION) && defined(__cplusplus) +// Only use unlikely with C++20 +# if __cplusplus >= 202002L +// GCC 9 has unlikely attribute but do not support declare it at the beginning of statement +# if defined(__has_cpp_attribute) && (defined(__clang__) || !defined(__GNUC__) || __GNUC__ > 9) +# if __has_cpp_attribute(unlikely) +# define OPENTELEMETRY_UNLIKELY_CONDITION(C) (C) [[unlikely]] +# endif +# endif +# endif +#endif +#if !defined(OPENTELEMETRY_UNLIKELY_CONDITION) && (defined(__clang__) || defined(__GNUC__)) +// Only use if supported by the compiler +# define OPENTELEMETRY_UNLIKELY_CONDITION(C) (__builtin_expect(!!(C), false)) +#endif +#ifndef OPENTELEMETRY_UNLIKELY_CONDITION +// Do not use unlikely annotations +# define OPENTELEMETRY_UNLIKELY_CONDITION(C) (C) +#endif + +/* + Expected usage pattern: + + if (ptr != nullptr) + OPENTELEMETRY_LIKELY + { + do_something_likely(); + } else { + do_something_unlikely(); + } + + This pattern works starting with C++20. + See https://en.cppreference.com/w/cpp/language/attributes/likely + + Please use OPENTELEMETRY_LIKELY_CONDITION instead for now. +*/ + +#if !defined(OPENTELEMETRY_LIKELY) && defined(__cplusplus) +// Only use likely with C++20 +# if __cplusplus >= 202002L +// GCC 9 has likely attribute but do not support declare it at the beginning of statement +# if defined(__has_cpp_attribute) && (defined(__clang__) || !defined(__GNUC__) || __GNUC__ > 9) +# if __has_cpp_attribute(likely) +# define OPENTELEMETRY_LIKELY [[likely]] +# endif +# endif +# endif +#endif + +#ifndef OPENTELEMETRY_LIKELY +# define OPENTELEMETRY_LIKELY +#endif + +#if !defined(OPENTELEMETRY_UNLIKELY) && defined(__cplusplus) +// Only use unlikely with C++20 +# if __cplusplus >= 202002L +// GCC 9 has unlikely attribute but do not support declare it at the beginning of statement +# if defined(__has_cpp_attribute) && (defined(__clang__) || !defined(__GNUC__) || __GNUC__ > 9) +# if __has_cpp_attribute(unlikely) +# define OPENTELEMETRY_UNLIKELY [[unlikely]] +# endif +# endif +# endif +#endif + +#ifndef OPENTELEMETRY_UNLIKELY +# define OPENTELEMETRY_UNLIKELY +#endif + +/// \brief Declare variable as maybe unused +/// usage: +/// OPENTELEMETRY_MAYBE_UNUSED int a; +/// class OPENTELEMETRY_MAYBE_UNUSED a; +/// OPENTELEMETRY_MAYBE_UNUSED int a(); +/// +#if defined(__cplusplus) && __cplusplus >= 201703L +# define OPENTELEMETRY_MAYBE_UNUSED [[maybe_unused]] +#elif defined(__clang__) +# define OPENTELEMETRY_MAYBE_UNUSED __attribute__((unused)) +#elif defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) +# define OPENTELEMETRY_MAYBE_UNUSED __attribute__((unused)) +#elif (defined(_MSC_VER) && _MSC_VER >= 1910) && (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) +# define OPENTELEMETRY_MAYBE_UNUSED [[maybe_unused]] +#else +# define OPENTELEMETRY_MAYBE_UNUSED +#endif + +#ifndef OPENTELEMETRY_RTTI_ENABLED +# if defined(__clang__) +# if __has_feature(cxx_rtti) +# define OPENTELEMETRY_RTTI_ENABLED +# endif +# elif defined(__GNUG__) +# if defined(__GXX_RTTI) +# define OPENTELEMETRY_RTTI_ENABLED +# endif +# elif defined(_MSC_VER) +# if defined(_CPPRTTI) +# define OPENTELEMETRY_RTTI_ENABLED +# endif +# endif +#endif + +#if defined(__cplusplus) && __cplusplus >= 201402L +# define OPENTELEMETRY_DEPRECATED [[deprecated]] +#elif defined(__clang__) +# define OPENTELEMETRY_DEPRECATED __attribute__((deprecated)) +#elif defined(__GNUC__) +# define OPENTELEMETRY_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) +# if _MSC_VER >= 1910 && defined(_MSVC_LANG) && _MSVC_LANG >= 201703L +# define OPENTELEMETRY_DEPRECATED [[deprecated]] +# else +# define OPENTELEMETRY_DEPRECATED __declspec(deprecated) +# endif +#else +# define OPENTELEMETRY_DEPRECATED +#endif + +#if defined(__cplusplus) && __cplusplus >= 201402L +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) [[deprecated(msg)]] +#elif defined(__clang__) +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) __attribute__((deprecated(msg))) +#elif defined(__GNUC__) +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) __attribute__((deprecated(msg))) +#elif defined(_MSC_VER) +# if _MSC_VER >= 1910 && defined(_MSVC_LANG) && _MSVC_LANG >= 201703L +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) [[deprecated(msg)]] +# else +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) __declspec(deprecated(msg)) +# endif +#else +# define OPENTELEMETRY_DEPRECATED_MESSAGE(msg) +#endif + +// Regex support +#if (__GNUC__ == 4 && (__GNUC_MINOR__ == 8 || __GNUC_MINOR__ == 9)) +# define OPENTELEMETRY_HAVE_WORKING_REGEX 0 +#else +# define OPENTELEMETRY_HAVE_WORKING_REGEX 1 +#endif + +/* clang-format off */ + +/** + @page HEADER_ONLY_SINGLETON Header only singleton. + + @section ELF_SINGLETON + + For clang and gcc, the desired coding pattern is as follows. + + @verbatim + class Foo + { + // (a) + __attribute__((visibility("default"))) + // (b) + T& get_singleton() + { + // (c) + static T singleton; + return singleton; + } + }; + @endverbatim + + (a) is needed when the code is build with + @code -fvisibility="hidden" @endcode + to ensure that all instances of (b) are visible to the linker. + + What is duplicated in the binary is @em code, in (b). + + The linker will make sure only one instance + of all the (b) methods is used. + + (c) is a singleton implemented inside a method. + + This is very desirable, because: + + - the C++ compiler guarantees that construction + of the variable (c) is thread safe. + + - constructors for (c) singletons are executed in code path order, + or not at all if the singleton is never used. + + @section OTHER_SINGLETON + + For other platforms, header only singletons are not supported at this +point. + + @section CODING_PATTERN + + The coding pattern to use in the source code is as follows + + @verbatim + class Foo + { + OPENTELEMETRY_API_SINGLETON + T& get_singleton() + { + static T singleton; + return singleton; + } + }; + @endverbatim +*/ + +/* clang-format on */ + +#if defined(__clang__) + +# define OPENTELEMETRY_API_SINGLETON __attribute__((visibility("default"))) +# define OPENTELEMETRY_LOCAL_SYMBOL __attribute__((visibility("hidden"))) + +#elif defined(__GNUC__) + +# define OPENTELEMETRY_API_SINGLETON __attribute__((visibility("default"))) +# define OPENTELEMETRY_LOCAL_SYMBOL __attribute__((visibility("hidden"))) + +#else + +/* Add support for other compilers here. */ + +# define OPENTELEMETRY_API_SINGLETON +# define OPENTELEMETRY_LOCAL_SYMBOL + +#endif + +// +// Atomic wrappers based on compiler intrinsics for memory read/write. +// The tailing number is read/write length in bits. +// +// N.B. Compiler intrinsic is used because the usage of C++ standard library is restricted in the +// OpenTelemetry C++ API. +// +#if defined(__GNUC__) + +# define OPENTELEMETRY_ATOMIC_READ_8(ptr) __atomic_load_n(ptr, __ATOMIC_SEQ_CST) +# define OPENTELEMETRY_ATOMIC_WRITE_8(ptr, value) __atomic_store_n(ptr, value, __ATOMIC_SEQ_CST) + +#elif defined(_MSC_VER) + +# include + +# define OPENTELEMETRY_ATOMIC_READ_8(ptr) \ + static_cast(_InterlockedCompareExchange8(reinterpret_cast(ptr), 0, 0)) +# define OPENTELEMETRY_ATOMIC_WRITE_8(ptr, value) \ + _InterlockedExchange8(reinterpret_cast(ptr), static_cast(value)) + +#else +# error port atomics read/write for the current platform +#endif + +/* clang-format on */ +// +// The if/elif order matters here. If both OPENTELEMETRY_BUILD_IMPORT_DLL and +// OPENTELEMETRY_BUILD_EXPORT_DLL are defined, the former takes precedence. +// +// TODO: consider define OPENTELEMETRY_EXPORT for cygwin/gcc, see below link. +// https://gcc.gnu.org/wiki/Visibility#How_to_use_the_new_C.2B-.2B-_visibility_support +// +#if defined(_MSC_VER) && defined(OPENTELEMETRY_BUILD_IMPORT_DLL) + +# define OPENTELEMETRY_EXPORT __declspec(dllimport) + +#elif defined(_MSC_VER) && defined(OPENTELEMETRY_BUILD_EXPORT_DLL) + +# define OPENTELEMETRY_EXPORT __declspec(dllexport) + +#else + +// +// build OpenTelemetry as static library or not on Windows. +// +# define OPENTELEMETRY_EXPORT + +#endif + +// OPENTELEMETRY_HAVE_EXCEPTIONS +// +// Checks whether the compiler both supports and enables exceptions. Many +// compilers support a "no exceptions" mode that disables exceptions. +// +// Generally, when OPENTELEMETRY_HAVE_EXCEPTIONS is not defined: +// +// * Code using `throw` and `try` may not compile. +// * The `noexcept` specifier will still compile and behave as normal. +// * The `noexcept` operator may still return `false`. +// +// For further details, consult the compiler's documentation. +#ifndef OPENTELEMETRY_HAVE_EXCEPTIONS +# if defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__) < 306 +// Clang < 3.6 +// http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro +# if defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions) +# define OPENTELEMETRY_HAVE_EXCEPTIONS 1 +# endif // defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions) +# elif OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions) +# define OPENTELEMETRY_HAVE_EXCEPTIONS 1 +// Handle remaining special cases and default to exceptions being supported. +# elif !(defined(__GNUC__) && !defined(__EXCEPTIONS) && !defined(__cpp_exceptions)) && \ + !(defined(_MSC_VER) && !defined(_CPPUNWIND)) +# define OPENTELEMETRY_HAVE_EXCEPTIONS 1 +# endif +#endif +#ifndef OPENTELEMETRY_HAVE_EXCEPTIONS +# define OPENTELEMETRY_HAVE_EXCEPTIONS 0 +#endif + +/* + OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND indicates that a resource owned by a function + parameter or implicit object parameter is retained by the return value of the + annotated function (or, for a parameter of a constructor, in the value of the + constructed object). This attribute causes warnings to be produced if a + temporary object does not live long enough. + + When applied to a reference parameter, the referenced object is assumed to be + retained by the return value of the function. When applied to a non-reference + parameter (for example, a pointer or a class type), all temporaries + referenced by the parameter are assumed to be retained by the return value of + the function. + + See also the upstream documentation: + https://clang.llvm.org/docs/AttributeReference.html#lifetimebound +*/ +#ifndef OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND +# if OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(clang::lifetimebound) +# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]] +# elif OPENTELEMETRY_HAVE_ATTRIBUTE(lifetimebound) +# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND __attribute__((lifetimebound)) +# else +# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND +# endif +#endif + +// OPENTELEMETRY_HAVE_MEMORY_SANITIZER +// +// MemorySanitizer (MSan) is a detector of uninitialized reads. It consists of +// a compiler instrumentation module and a run-time library. +#ifndef OPENTELEMETRY_HAVE_MEMORY_SANITIZER +# if !defined(__native_client__) && OPENTELEMETRY_HAVE_FEATURE(memory_sanitizer) +# define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 1 +# else +# define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 0 +# endif +#endif + +#if OPENTELEMETRY_HAVE_MEMORY_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_memory) +# define OPENTELEMETRY_SANITIZER_NO_MEMORY \ + __attribute__((no_sanitize_memory)) // __attribute__((no_sanitize("memory"))) +#else +# define OPENTELEMETRY_SANITIZER_NO_MEMORY +#endif + +// OPENTELEMETRY_HAVE_THREAD_SANITIZER +// +// ThreadSanitizer (TSan) is a fast data race detector. +#ifndef OPENTELEMETRY_HAVE_THREAD_SANITIZER +# if defined(__SANITIZE_THREAD__) +# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1 +# elif OPENTELEMETRY_HAVE_FEATURE(thread_sanitizer) +# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1 +# else +# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 0 +# endif +#endif + +#if OPENTELEMETRY_HAVE_THREAD_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_thread) +# define OPENTELEMETRY_SANITIZER_NO_THREAD \ + __attribute__((no_sanitize_thread)) // __attribute__((no_sanitize("thread"))) +#else +# define OPENTELEMETRY_SANITIZER_NO_THREAD +#endif + +// OPENTELEMETRY_HAVE_ADDRESS_SANITIZER +// +// AddressSanitizer (ASan) is a fast memory error detector. +#ifndef OPENTELEMETRY_HAVE_ADDRESS_SANITIZER +# if defined(__SANITIZE_ADDRESS__) +# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1 +# elif OPENTELEMETRY_HAVE_FEATURE(address_sanitizer) +# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1 +# else +# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 0 +# endif +#endif + +// OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER +// +// Hardware-Assisted AddressSanitizer (or HWASAN) is even faster than asan +// memory error detector which can use CPU features like ARM TBI, Intel LAM or +// AMD UAI. +#ifndef OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER +# if defined(__SANITIZE_HWADDRESS__) +# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1 +# elif OPENTELEMETRY_HAVE_FEATURE(hwaddress_sanitizer) +# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1 +# else +# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 0 +# endif +#endif + +#if OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_address) +# define OPENTELEMETRY_SANITIZER_NO_ADDRESS \ + __attribute__((no_sanitize_address)) // __attribute__((no_sanitize("address"))) +#elif OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && defined(_MSC_VER) && _MSC_VER >= 1928 +# define OPENTELEMETRY_SANITIZER_NO_ADDRESS __declspec(no_sanitize_address) +#elif OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize) +# define OPENTELEMETRY_SANITIZER_NO_ADDRESS __attribute__((no_sanitize("hwaddress"))) +#else +# define OPENTELEMETRY_SANITIZER_NO_ADDRESS +#endif diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/spin_lock_mutex.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/spin_lock_mutex.h new file mode 100644 index 00000000..7031fa4d --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/spin_lock_mutex.h @@ -0,0 +1,133 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/version.h" + +#if defined(_MSC_VER) +# define _WINSOCKAPI_ // stops including winsock.h +# include +#elif defined(__i386__) || defined(__x86_64__) +# if defined(__clang__) +# include +# elif defined(__INTEL_COMPILER) +# include +# endif +#endif + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ + +constexpr int SPINLOCK_FAST_ITERATIONS = 100; +constexpr int SPINLOCK_SLEEP_MS = 1; + +/** + * A Mutex which uses atomic flags and spin-locks instead of halting threads. + * + * This mutex uses an incremental back-off strategy with the following phases: + * 1. A tight spin-lock loop (pending: using hardware PAUSE/YIELD instructions) + * 2. A loop where the current thread yields control after checking the lock. + * 3. Issuing a thread-sleep call before starting back in phase 1. + * + * This is meant to give a good balance of perofrmance and CPU consumption in + * practice. + * + * This mutex uses an incremental back-off strategy with the following phases: + * 1. A tight spin-lock loop (pending: using hardware PAUSE/YIELD instructions) + * 2. A loop where the current thread yields control after checking the lock. + * 3. Issuing a thread-sleep call before starting back in phase 1. + * + * This is meant to give a good balance of perofrmance and CPU consumption in + * practice. + * + * This class implements the `BasicLockable` specification: + * https://en.cppreference.com/w/cpp/named_req/BasicLockable + */ +class SpinLockMutex +{ +public: + SpinLockMutex() noexcept {} + ~SpinLockMutex() noexcept = default; + SpinLockMutex(const SpinLockMutex &) = delete; + SpinLockMutex &operator=(const SpinLockMutex &) = delete; + + static inline void fast_yield() noexcept + { +// Issue a Pause/Yield instruction while spinning. +#if defined(_MSC_VER) + YieldProcessor(); +#elif defined(__i386__) || defined(__x86_64__) +# if defined(__clang__) || defined(__INTEL_COMPILER) + _mm_pause(); +# else + __builtin_ia32_pause(); +# endif +#elif defined(__armel__) || defined(__ARMEL__) + asm volatile("nop" ::: "memory"); +#elif defined(__arm__) || defined(__aarch64__) // arm big endian / arm64 + __asm__ __volatile__("yield" ::: "memory"); +#else + // TODO: Issue PAGE/YIELD on other architectures. +#endif + } + + /** + * Attempts to lock the mutex. Return immediately with `true` (success) or `false` (failure). + */ + bool try_lock() noexcept + { + return !flag_.load(std::memory_order_relaxed) && + !flag_.exchange(true, std::memory_order_acquire); + } + + /** + * Blocks until a lock can be obtained for the current thread. + * + * This mutex will spin the current CPU waiting for the lock to be available. This can have + * decent performance in scenarios where there is low lock contention and lock-holders achieve + * their work quickly. It degrades in scenarios where locked tasks take a long time. + */ + void lock() noexcept + { + for (;;) + { + // Try once + if (!flag_.exchange(true, std::memory_order_acquire)) + { + return; + } + // Spin-Fast (goal ~10ns) + for (std::size_t i = 0; i < SPINLOCK_FAST_ITERATIONS; ++i) + { + if (try_lock()) + { + return; + } + fast_yield(); + } + // Yield then try again (goal ~100ns) + std::this_thread::yield(); + if (try_lock()) + { + return; + } + // Sleep and then start the whole process again. (goal ~1000ns) + std::this_thread::sleep_for(std::chrono::milliseconds(SPINLOCK_SLEEP_MS)); + } + return; + } + /** Releases the lock held by the execution agent. Throws no exceptions. */ + void unlock() noexcept { flag_.store(false, std::memory_order_release); } + +private: + std::atomic flag_{false}; +}; + +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/string_util.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/string_util.h new file mode 100644 index 00000000..273a6527 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/string_util.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ + +class StringUtil +{ +public: + static nostd::string_view Trim(nostd::string_view str, size_t left, size_t right) noexcept + { + while (left <= right && isspace(str[left])) + { + left++; + } + while (left <= right && isspace(str[right])) + { + right--; + } + return str.substr(left, 1 + right - left); + } + + static nostd::string_view Trim(nostd::string_view str) noexcept + { + if (str.empty()) + { + return str; + } + + return Trim(str, 0, str.size() - 1); + } +}; + +} // namespace common + +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/timestamp.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/timestamp.h new file mode 100644 index 00000000..f7c79b8b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/common/timestamp.h @@ -0,0 +1,206 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +/** + * @brief A timepoint relative to the system clock epoch. + * + * This is used for marking the beginning and end of an operation. + */ +class SystemTimestamp +{ +public: + /** + * @brief Initializes a system timestamp pointing to the start of the epoch. + */ + SystemTimestamp() noexcept : nanos_since_epoch_{0} {} + + /** + * @brief Initializes a system timestamp from a duration. + * + * @param time_since_epoch Time elapsed since the beginning of the epoch. + */ + template + explicit SystemTimestamp(const std::chrono::duration &time_since_epoch) noexcept + : nanos_since_epoch_{static_cast( + std::chrono::duration_cast(time_since_epoch).count())} + {} + + /** + * @brief Initializes a system timestamp based on a point in time. + * + * @param time_point A point in time. + */ + /*implicit*/ SystemTimestamp(const std::chrono::system_clock::time_point &time_point) noexcept + : SystemTimestamp{time_point.time_since_epoch()} + {} + + /** + * @brief Returns a time point for the time stamp. + * + * @return A time point corresponding to the time stamp. + */ + operator std::chrono::system_clock::time_point() const noexcept + { + return std::chrono::system_clock::time_point{ + std::chrono::duration_cast( + std::chrono::nanoseconds{nanos_since_epoch_})}; + } + + /** + * @brief Returns the nanoseconds since the beginning of the epoch. + * + * @return Elapsed nanoseconds since the beginning of the epoch for this timestamp. + */ + std::chrono::nanoseconds time_since_epoch() const noexcept + { + return std::chrono::nanoseconds{nanos_since_epoch_}; + } + + /** + * @brief Compare two steady time stamps. + * + * @return true if the two time stamps are equal. + */ + bool operator==(const SystemTimestamp &other) const noexcept + { + return nanos_since_epoch_ == other.nanos_since_epoch_; + } + + /** + * @brief Compare two steady time stamps for inequality. + * + * @return true if the two time stamps are not equal. + */ + bool operator!=(const SystemTimestamp &other) const noexcept + { + return nanos_since_epoch_ != other.nanos_since_epoch_; + } + +private: + int64_t nanos_since_epoch_; +}; + +/** + * @brief A timepoint relative to the monotonic clock epoch + * + * This is used for calculating the duration of an operation. + */ +class SteadyTimestamp +{ +public: + /** + * @brief Initializes a monotonic timestamp pointing to the start of the epoch. + */ + SteadyTimestamp() noexcept : nanos_since_epoch_{0} {} + + /** + * @brief Initializes a monotonic timestamp from a duration. + * + * @param time_since_epoch Time elapsed since the beginning of the epoch. + */ + template + explicit SteadyTimestamp(const std::chrono::duration &time_since_epoch) noexcept + : nanos_since_epoch_{static_cast( + std::chrono::duration_cast(time_since_epoch).count())} + {} + + /** + * @brief Initializes a monotonic timestamp based on a point in time. + * + * @param time_point A point in time. + */ + /*implicit*/ SteadyTimestamp(const std::chrono::steady_clock::time_point &time_point) noexcept + : SteadyTimestamp{time_point.time_since_epoch()} + {} + + /** + * @brief Returns a time point for the time stamp. + * + * @return A time point corresponding to the time stamp. + */ + operator std::chrono::steady_clock::time_point() const noexcept + { + return std::chrono::steady_clock::time_point{ + std::chrono::duration_cast( + std::chrono::nanoseconds{nanos_since_epoch_})}; + } + + /** + * @brief Returns the nanoseconds since the beginning of the epoch. + * + * @return Elapsed nanoseconds since the beginning of the epoch for this timestamp. + */ + std::chrono::nanoseconds time_since_epoch() const noexcept + { + return std::chrono::nanoseconds{nanos_since_epoch_}; + } + + /** + * @brief Compare two steady time stamps. + * + * @return true if the two time stamps are equal. + */ + bool operator==(const SteadyTimestamp &other) const noexcept + { + return nanos_since_epoch_ == other.nanos_since_epoch_; + } + + /** + * @brief Compare two steady time stamps for inequality. + * + * @return true if the two time stamps are not equal. + */ + bool operator!=(const SteadyTimestamp &other) const noexcept + { + return nanos_since_epoch_ != other.nanos_since_epoch_; + } + +private: + int64_t nanos_since_epoch_; +}; + +class DurationUtil +{ +public: + template + static std::chrono::duration AdjustWaitForTimeout( + std::chrono::duration timeout, + std::chrono::duration indefinite_value) noexcept + { + // Do not call now() when this duration is max value, now() may have a expensive cost. + if (timeout == (std::chrono::duration::max)()) + { + return indefinite_value; + } + + // std::future::wait_for, std::this_thread::sleep_for, and std::condition_variable::wait_for + // may use steady_clock or system_clock.We need make sure now() + timeout do not overflow. + auto max_timeout = std::chrono::duration_cast>( + (std::chrono::steady_clock::time_point::max)() - std::chrono::steady_clock::now()); + if (timeout >= max_timeout) + { + return indefinite_value; + } + max_timeout = std::chrono::duration_cast>( + (std::chrono::system_clock::time_point::max)() - std::chrono::system_clock::now()); + if (timeout >= max_timeout) + { + return indefinite_value; + } + + return timeout; + } +}; + +} // namespace common +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/config.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/config.h new file mode 100644 index 00000000..cb52f3b5 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/config.h @@ -0,0 +1,19 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include // IWYU pragma: keep + +#if defined(OPENTELEMETRY_ABI_VERSION_NO) && OPENTELEMETRY_ABI_VERSION_NO >= 2 +# error \ + "opentelemetry/config.h is removed in ABI version 2 and later. Please use opentelemetry/version.h instead." +#else +# if defined(__clang__) || defined(__GNUC__) +# pragma GCC warning \ + "opentelemetry/config.h is deprecated. Please use opentelemetry/version.h instead." +# elif defined(_MSC_VER) +# pragma message( \ + "[WARNING]: opentelemetry/config.h is deprecated. Please use opentelemetry/version.h instead.") +# endif +#endif diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context.h new file mode 100644 index 00000000..924036ef --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context.h @@ -0,0 +1,171 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/context/context_value.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/variant.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ + +// The context class provides a context identifier. Is built as a linked list +// of DataList nodes and each context holds a shared_ptr to a place within +// the list that determines which keys and values it has access to. All that +// come before and none that come after. +class Context +{ + +public: + Context() = default; + // Creates a context object from a map of keys and identifiers, this will + // hold a shared_ptr to the head of the DataList linked list + template + Context(const T &keys_and_values) noexcept + : head_{nostd::shared_ptr{new DataList(keys_and_values)}} + {} + + // Creates a context object from a key and value, this will + // hold a shared_ptr to the head of the DataList linked list + Context(nostd::string_view key, ContextValue value) noexcept + : head_{nostd::shared_ptr{new DataList(key, value)}} + {} + + // Accepts a new iterable and then returns a new context that + // contains the new key and value data. It attaches the + // exisiting list to the end of the new list. + template + Context SetValues(T &values) noexcept + { + Context context = Context(values); + nostd::shared_ptr last = context.head_; + while (last->next_ != nullptr) + { + last = last->next_; + } + last->next_ = head_; + return context; + } + + // Accepts a new iterable and then returns a new context that + // contains the new key and value data. It attaches the + // exisiting list to the end of the new list. + Context SetValue(nostd::string_view key, ContextValue value) noexcept + { + Context context = Context(key, value); + context.head_->next_ = head_; + return context; + } + + // Returns the value associated with the passed in key. + context::ContextValue GetValue(const nostd::string_view key) const noexcept + { + for (DataList *data = head_.get(); data != nullptr; data = data->next_.get()) + { + if (key.size() == data->key_length_) + { + if (std::memcmp(key.data(), data->key_, data->key_length_) == 0) + { + return data->value_; + } + } + } + return ContextValue{}; + } + + // Checks for key and returns true if found + bool HasKey(const nostd::string_view key) const noexcept + { + return !nostd::holds_alternative(GetValue(key)); + } + + bool operator==(const Context &other) const noexcept { return (head_ == other.head_); } + +private: + // A linked list to contain the keys and values of this context node + struct DataList + { + char *key_ = nullptr; + + nostd::shared_ptr next_{nullptr}; + + size_t key_length_ = 0UL; + + ContextValue value_; + + DataList() = default; + + // Builds a data list off of a key and value iterable and returns the head + template + DataList(const T &keys_and_vals) + { + bool first = true; + auto *node = this; + for (auto &iter : keys_and_vals) + { + if (first) + { + *node = DataList(iter.first, iter.second); + first = false; + } + else + { + node->next_ = nostd::shared_ptr(new DataList(iter.first, iter.second)); + node = node->next_.get(); + } + } + } + + // Builds a data list with just a key and value, so it will just be the head + // and returns that head. + DataList(nostd::string_view key, const ContextValue &value) + { + key_ = new char[key.size()]; + key_length_ = key.size(); + std::memcpy(key_, key.data(), key.size() * sizeof(char)); + next_ = nostd::shared_ptr{nullptr}; + value_ = value; + } + + DataList(const DataList &other) + : key_(new char[other.key_length_]), + next_(other.next_), + key_length_(other.key_length_), + value_(other.value_) + { + std::memcpy(key_, other.key_, other.key_length_ * sizeof(char)); + } + + DataList &operator=(DataList &&other) noexcept + { + key_length_ = other.key_length_; + value_ = std::move(other.value_); + next_ = std::move(other.next_); + + key_ = other.key_; + other.key_ = nullptr; + + return *this; + } + + ~DataList() + { + if (key_ != nullptr) + { + delete[] key_; + } + } + }; + + // Head of the list which holds the keys and values of this context + nostd::shared_ptr head_; +}; +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context_value.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context_value.h new file mode 100644 index 00000000..27bd40fb --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/context_value.h @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/variant.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace baggage +{ +class Baggage; +} // namespace baggage + +namespace trace +{ +class Span; +class SpanContext; +} // namespace trace + +namespace context +{ +using ContextValue = nostd::variant, + nostd::shared_ptr, + nostd::shared_ptr>; +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/composite_propagator.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/composite_propagator.h new file mode 100644 index 00000000..f7afe23b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/composite_propagator.h @@ -0,0 +1,93 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +namespace propagation +{ + +class CompositePropagator : public TextMapPropagator +{ +public: + CompositePropagator(std::vector> propagators) + : propagators_(std::move(propagators)) + {} + + /** + * Run each of the configured propagators with the given context and carrier. + * Propagators are run in the order they are configured, so if multiple + * propagators write the same carrier key, the propagator later in the list + * will "win". + * + * @param carrier Carrier into which context will be injected + * @param context Context to inject + * + */ + + void Inject(TextMapCarrier &carrier, const context::Context &context) noexcept override + { + for (auto &p : propagators_) + { + p->Inject(carrier, context); + } + } + + /** + * Run each of the configured propagators with the given context and carrier. + * Propagators are run in the order they are configured, so if multiple + * propagators write the same context key, the propagator later in the list + * will "win". + * + * @param carrier Carrier from which to extract context + * @param context Context to add values to + */ + context::Context Extract(const TextMapCarrier &carrier, + context::Context &context) noexcept override + { + auto first = true; + context::Context tmp_context; + for (auto &p : propagators_) + { + if (first) + { + tmp_context = p->Extract(carrier, context); + first = false; + } + else + { + tmp_context = p->Extract(carrier, tmp_context); + } + } + return propagators_.size() ? tmp_context : context; + } + + /** + * Invoke callback with fields set to carrier by `inject` method for all the + * configured propagators + * Returns true if all invocation return true + */ + bool Fields(nostd::function_ref callback) const noexcept override + { + bool status = true; + for (auto &p : propagators_) + { + status = status && p->Fields(callback); + } + return status; + } + +private: + std::vector> propagators_; +}; +} // namespace propagation +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/global_propagator.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/global_propagator.h new file mode 100644 index 00000000..85293202 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/global_propagator.h @@ -0,0 +1,57 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/context/propagation/noop_propagator.h" + +#include "opentelemetry/common/macros.h" +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/nostd/shared_ptr.h" + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +namespace propagation +{ + +class TextMapPropagator; + +/* Stores the singleton TextMapPropagator */ + +class OPENTELEMETRY_EXPORT GlobalTextMapPropagator +{ +public: + static nostd::shared_ptr GetGlobalPropagator() noexcept + { + std::lock_guard guard(GetLock()); + return nostd::shared_ptr(GetPropagator()); + } + + static void SetGlobalPropagator(const nostd::shared_ptr &prop) noexcept + { + std::lock_guard guard(GetLock()); + GetPropagator() = prop; + } + +private: + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr &GetPropagator() noexcept + { + static nostd::shared_ptr propagator(new NoOpPropagator()); + return propagator; + } + + OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept + { + static common::SpinLockMutex lock; + return lock; + } +}; + +} // namespace propagation +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/noop_propagator.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/noop_propagator.h new file mode 100644 index 00000000..4e1b30c1 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/noop_propagator.h @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +namespace propagation +{ + +/** + * No-op implementation TextMapPropagator + */ +class NoOpPropagator : public TextMapPropagator +{ +public: + /** Noop extract function does nothing and returns the input context */ + context::Context Extract(const TextMapCarrier & /*carrier*/, + context::Context &context) noexcept override + { + return context; + } + + /** Noop inject function does nothing */ + void Inject(TextMapCarrier & /*carrier*/, + const context::Context & /* context */) noexcept override + {} + + bool Fields(nostd::function_ref /* callback */) const noexcept override + { + return true; + } +}; +} // namespace propagation +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/text_map_propagator.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/text_map_propagator.h new file mode 100644 index 00000000..21bc2936 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/propagation/text_map_propagator.h @@ -0,0 +1,59 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +namespace propagation +{ + +// TextMapCarrier is the storage medium used by TextMapPropagator. +class TextMapCarrier +{ +public: + // returns the value associated with the passed key. + virtual nostd::string_view Get(nostd::string_view key) const noexcept = 0; + + // stores the key-value pair. + virtual void Set(nostd::string_view key, nostd::string_view value) noexcept = 0; + + /* list of all the keys in the carrier. + By default, it returns true without invoking callback */ + virtual bool Keys(nostd::function_ref /* callback */) const noexcept + { + return true; + } + virtual ~TextMapCarrier() = default; +}; + +// The TextMapPropagator class provides an interface that enables extracting and injecting +// context into carriers that travel in-band across process boundaries. HTTP frameworks and clients +// can integrate with TextMapPropagator by providing the object containing the +// headers, and a getter and setter function for the extraction and +// injection of values, respectively. + +class TextMapPropagator +{ +public: + // Returns the context that is stored in the carrier with the TextMapCarrier as extractor. + virtual context::Context Extract(const TextMapCarrier &carrier, + context::Context &context) noexcept = 0; + + // Sets the context for carrier with self defined rules. + virtual void Inject(TextMapCarrier &carrier, const context::Context &context) noexcept = 0; + + // Gets the fields set in the carrier by the `inject` method + virtual bool Fields(nostd::function_ref callback) const noexcept = 0; + + virtual ~TextMapPropagator() = default; +}; +} // namespace propagation +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/runtime_context.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/runtime_context.h new file mode 100644 index 00000000..e3f88254 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/context/runtime_context.h @@ -0,0 +1,340 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/common/macros.h" +#include "opentelemetry/context/context.h" +#include "opentelemetry/context/context_value.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +// The Token object provides is returned when attaching objects to the +// RuntimeContext object and is associated with a context object, and +// can be provided to the RuntimeContext Detach method to remove the +// associated context from the RuntimeContext. +class Token +{ +public: + bool operator==(const Context &other) const noexcept { return context_ == other; } + + ~Token() noexcept; + +private: + friend class RuntimeContextStorage; + + // A constructor that sets the token's Context object to the + // one that was passed in. + Token(const Context &context) : context_(context) {} + + const Context context_; +}; + +/** + * RuntimeContextStorage is used by RuntimeContext to store Context frames. + * + * Custom context management strategies can be implemented by deriving from + * this class and passing an initialized RuntimeContextStorage object to + * RuntimeContext::SetRuntimeContextStorage. + */ +class OPENTELEMETRY_EXPORT RuntimeContextStorage +{ +public: + /** + * Return the current context. + * @return the current context + */ + virtual Context GetCurrent() noexcept = 0; + + /** + * Set the current context. + * @param the new current context + * @return a token for the new current context. This never returns a nullptr. + */ + virtual nostd::unique_ptr Attach(const Context &context) noexcept = 0; + + /** + * Detach the context related to the given token. + * @param token a token related to a context + * @return true if the context could be detached + */ + virtual bool Detach(Token &token) noexcept = 0; + + virtual ~RuntimeContextStorage() {} + +protected: + nostd::unique_ptr CreateToken(const Context &context) noexcept + { + return nostd::unique_ptr(new Token(context)); + } +}; + +/** + * Construct and return the default RuntimeContextStorage + * @return a ThreadLocalContextStorage + */ +static RuntimeContextStorage *GetDefaultStorage() noexcept; + +// Provides a wrapper for propagating the context object globally. +// +// By default, a thread-local runtime context storage is used. +class OPENTELEMETRY_EXPORT RuntimeContext +{ +public: + // Return the current context. + static Context GetCurrent() noexcept { return GetRuntimeContextStorage()->GetCurrent(); } + + // Sets the current 'Context' object. Returns a token + // that can be used to reset to the previous Context. + static nostd::unique_ptr Attach(const Context &context) noexcept + { + return GetRuntimeContextStorage()->Attach(context); + } + + // Resets the context to a previous value stored in the + // passed in token. Returns true if successful, false otherwise + static bool Detach(Token &token) noexcept { return GetRuntimeContextStorage()->Detach(token); } + + // Sets the Key and Value into the passed in context or if a context is not + // passed in, the RuntimeContext. + // Should be used to SetValues to the current RuntimeContext, is essentially + // equivalent to RuntimeContext::GetCurrent().SetValue(key,value). Keep in + // mind that the current RuntimeContext will not be changed, and the new + // context will be returned. + static Context SetValue(nostd::string_view key, + const ContextValue &value, + Context *context = nullptr) noexcept + { + Context temp_context; + if (context == nullptr) + { + temp_context = GetCurrent(); + } + else + { + temp_context = *context; + } + return temp_context.SetValue(key, value); + } + + // Returns the value associated with the passed in key and either the + // passed in context* or the runtime context if a context is not passed in. + // Should be used to get values from the current RuntimeContext, is + // essentially equivalent to RuntimeContext::GetCurrent().GetValue(key). + static ContextValue GetValue(nostd::string_view key, Context *context = nullptr) noexcept + { + Context temp_context; + if (context == nullptr) + { + temp_context = GetCurrent(); + } + else + { + temp_context = *context; + } + return temp_context.GetValue(key); + } + + /** + * Provide a custom runtime context storage. + * + * This provides a possibility to override the default thread-local runtime + * context storage. This has to be set before any spans are created by the + * application, otherwise the behavior is undefined. + * + * @param storage a custom runtime context storage + */ + static void SetRuntimeContextStorage( + const nostd::shared_ptr &storage) noexcept + { + GetStorage() = storage; + } + + /** + * Provide a pointer to const runtime context storage. + * + * The returned pointer can only be used for extending the lifetime of the runtime context + * storage. + * + */ + static nostd::shared_ptr GetConstRuntimeContextStorage() noexcept + { + return GetRuntimeContextStorage(); + } + +private: + static nostd::shared_ptr GetRuntimeContextStorage() noexcept + { + return GetStorage(); + } + + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr &GetStorage() noexcept + { + static nostd::shared_ptr context(GetDefaultStorage()); + return context; + } +}; + +inline Token::~Token() noexcept +{ + context::RuntimeContext::Detach(*this); +} + +// The ThreadLocalContextStorage class is a derived class from +// RuntimeContextStorage and provides a wrapper for propagating context through +// cpp thread locally. This file must be included to use the RuntimeContext +// class if another implementation has not been registered. +class ThreadLocalContextStorage : public RuntimeContextStorage +{ +public: + ThreadLocalContextStorage() noexcept = default; + + // Return the current context. + Context GetCurrent() noexcept override { return GetStack().Top(); } + + // Resets the context to the value previous to the passed in token. This will + // also detach all child contexts of the passed in token. + // Returns true if successful, false otherwise. + bool Detach(Token &token) noexcept override + { + // In most cases, the context to be detached is on the top of the stack. + if (token == GetStack().Top()) + { + GetStack().Pop(); + return true; + } + + if (!GetStack().Contains(token)) + { + return false; + } + + while (!(token == GetStack().Top())) + { + GetStack().Pop(); + } + + GetStack().Pop(); + + return true; + } + + // Sets the current 'Context' object. Returns a token + // that can be used to reset to the previous Context. + nostd::unique_ptr Attach(const Context &context) noexcept override + { + GetStack().Push(context); + return CreateToken(context); + } + +private: + // A nested class to store the attached contexts in a stack. + class Stack + { + friend class ThreadLocalContextStorage; + + Stack() noexcept : size_(0), capacity_(0), base_(nullptr) {} + + // Pops the top Context off the stack. + void Pop() noexcept + { + if (size_ == 0) + { + return; + } + // Store empty Context before decrementing `size`, to ensure + // the shared_ptr object (if stored in prev context object ) are released. + // The stack is not resized, and the unused memory would be reutilised + // for subsequent context storage. + base_[size_ - 1] = Context(); + size_ -= 1; + } + + bool Contains(const Token &token) const noexcept + { + for (size_t pos = size_; pos > 0; --pos) + { + if (token == base_[pos - 1]) + { + return true; + } + } + + return false; + } + + // Returns the Context at the top of the stack. + Context Top() const noexcept + { + if (size_ == 0) + { + return Context(); + } + return base_[size_ - 1]; + } + + // Pushes the passed in context pointer to the top of the stack + // and resizes if necessary. + void Push(const Context &context) noexcept + { + size_++; + if (size_ > capacity_) + { + Resize(size_ * 2); + } + base_[size_ - 1] = context; + } + + // Reallocates the storage array to the pass in new capacity size. + void Resize(size_t new_capacity) noexcept + { + size_t old_size = size_ - 1; + if (new_capacity == 0) + { + new_capacity = 2; + } + Context *temp = new Context[new_capacity]; + if (base_ != nullptr) + { + // vs2015 does not like this construct considering it unsafe: + // - std::copy(base_, base_ + old_size, temp); + // Ref. + // https://stackoverflow.com/questions/12270224/xutility2227-warning-c4996-std-copy-impl + for (size_t i = 0; i < (std::min)(old_size, new_capacity); i++) + { + temp[i] = base_[i]; + } + delete[] base_; + } + base_ = temp; + capacity_ = new_capacity; + } + + ~Stack() noexcept { delete[] base_; } + + size_t size_; + size_t capacity_; + Context *base_; + }; + + OPENTELEMETRY_API_SINGLETON Stack &GetStack() + { + static thread_local Stack stack_ = Stack(); + return stack_; + } +}; + +static RuntimeContextStorage *GetDefaultStorage() noexcept +{ + return new ThreadLocalContextStorage(); +} +} // namespace context +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/detail/preprocessor.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/detail/preprocessor.h new file mode 100644 index 00000000..acdf02eb --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/detail/preprocessor.h @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// NOTE - code within detail namespace implements internal details, and not part +// of the public interface. + +#pragma once + +#define OPENTELEMETRY_STRINGIFY(S) OPENTELEMETRY_STRINGIFY_(S) +#define OPENTELEMETRY_STRINGIFY_(S) #S + +#define OPENTELEMETRY_CONCAT(A, B) OPENTELEMETRY_CONCAT_(A, B) +#define OPENTELEMETRY_CONCAT_(A, B) A##B + +// Import the C++20 feature-test macros +#ifdef __has_include +# if __has_include() +# include +# endif +#elif defined(_MSC_VER) && ((defined(__cplusplus) && __cplusplus >= 202002L) || \ + (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)) +# if _MSC_VER >= 1922 +# include +# endif +#endif diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_id.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_id.h new file mode 100644 index 00000000..65306ef7 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_id.h @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ + +/** + * EventId class which acts the Id of the event with an optional name. + */ +class EventId +{ +public: + EventId(int64_t id, nostd::string_view name) noexcept + : id_{id}, name_{nostd::unique_ptr{new char[name.length() + 1]}} + { + std::copy(name.begin(), name.end(), name_.get()); + name_.get()[name.length()] = 0; + } + + EventId(int64_t id) noexcept : id_{id}, name_{nullptr} {} + +public: + int64_t id_; + nostd::unique_ptr name_; +}; + +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger.h new file mode 100644 index 00000000..bcc10356 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger.h @@ -0,0 +1,82 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/logs/log_record.h" +#include "opentelemetry/logs/logger.h" +#include "opentelemetry/logs/logger_type_traits.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ +#if OPENTELEMETRY_ABI_VERSION_NO < 2 +/** + * Handles event log record creation. + **/ +class OPENTELEMETRY_DEPRECATED EventLogger +{ +public: + virtual ~EventLogger() = default; + + /* Returns the name of the logger */ + virtual const nostd::string_view GetName() noexcept = 0; + + /* Returns the delegate logger of this event logger */ + virtual nostd::shared_ptr GetDelegateLogger() noexcept = 0; + + /** + * Emit a event Log Record object + * + * @param event_name Event name + * @param log_record Log record + */ + virtual void EmitEvent(nostd::string_view event_name, + nostd::unique_ptr &&log_record) noexcept = 0; + + /** + * Emit a event Log Record object with arguments + * + * @param event_name Event name + * @tparam args Arguments which can be used to set data of log record by type. + * Severity -> severity, severity_text + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,tace_id and trace_flags + * SpanId -> span_id + * TraceId -> tace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void EmitEvent(nostd::string_view event_name, ArgumentType &&...args) + { + nostd::shared_ptr delegate_logger = GetDelegateLogger(); + if (!delegate_logger) + { + return; + } + nostd::unique_ptr log_record = delegate_logger->CreateLogRecord(); + + IgnoreTraitResult(detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args))...); + + EmitEvent(event_name, std::move(log_record)); + } + +private: + template + void IgnoreTraitResult(ValueType &&...) + {} +}; +#endif +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger_provider.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger_provider.h new file mode 100644 index 00000000..9eea0ca2 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/event_logger_provider.h @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ + +class EventLogger; +class Logger; + +#if OPENTELEMETRY_ABI_VERSION_NO < 2 +/** + * Creates new EventLogger instances. + */ +class OPENTELEMETRY_DEPRECATED EventLoggerProvider +{ +public: + virtual ~EventLoggerProvider() = default; + + /** + * Creates a named EventLogger instance. + * + */ + + virtual nostd::shared_ptr CreateEventLogger( + nostd::shared_ptr delegate_logger, + nostd::string_view event_domain) noexcept = 0; +}; +#endif +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/log_record.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/log_record.h new file mode 100644 index 00000000..81dec568 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/log_record.h @@ -0,0 +1,92 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/timestamp.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class SpanId; +class TraceId; +class TraceFlags; +} // namespace trace + +namespace logs +{ + +enum class Severity : uint8_t; + +/** + * Maintains a representation of a log in a format that can be processed by a recorder. + * + * This class is thread-compatible. + */ +class LogRecord +{ +public: + virtual ~LogRecord() = default; + + /** + * Set the timestamp for this log. + * @param timestamp the timestamp to set + */ + virtual void SetTimestamp(common::SystemTimestamp timestamp) noexcept = 0; + + /** + * Set the observed timestamp for this log. + * @param timestamp the timestamp to set + */ + virtual void SetObservedTimestamp(common::SystemTimestamp timestamp) noexcept = 0; + + /** + * Set the severity for this log. + * @param severity the severity of the event + */ + virtual void SetSeverity(logs::Severity severity) noexcept = 0; + + /** + * Set body field for this log. + * @param message the body to set + */ + virtual void SetBody(const common::AttributeValue &message) noexcept = 0; + + /** + * Set an attribute of a log. + * @param key the name of the attribute + * @param value the attribute value + */ + virtual void SetAttribute(nostd::string_view key, + const common::AttributeValue &value) noexcept = 0; + + /** + * Set the Event Id. + * @param id The event id to set + * @param name Optional event name to set + */ + // TODO: mark this as pure virtual once all exporters have been updated + virtual void SetEventId(int64_t id, nostd::string_view name = {}) noexcept = 0; + + /** + * Set the trace id for this log. + * @param trace_id the trace id to set + */ + virtual void SetTraceId(const trace::TraceId &trace_id) noexcept = 0; + + /** + * Set the span id for this log. + * @param span_id the span id to set + */ + virtual void SetSpanId(const trace::SpanId &span_id) noexcept = 0; + + /** + * Inject trace_flags for this log. + * @param trace_flags the trace flags to set + */ + virtual void SetTraceFlags(const trace::TraceFlags &trace_flags) noexcept = 0; +}; +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger.h new file mode 100644 index 00000000..52f403b0 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger.h @@ -0,0 +1,492 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/logs/logger_type_traits.h" +#include "opentelemetry/logs/severity.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace logs +{ + +class EventId; +class LogRecord; + +/** + * Handles log record creation. + **/ +class Logger +{ +public: + virtual ~Logger() = default; + + /* Returns the name of the logger */ + virtual const nostd::string_view GetName() noexcept = 0; + + /** + * Create a Log Record object + * + * @return nostd::unique_ptr + */ + virtual nostd::unique_ptr CreateLogRecord() noexcept = 0; + + /** + * Emit a Log Record object + * + * @param log_record Log record + */ + virtual void EmitLogRecord(nostd::unique_ptr &&log_record) noexcept = 0; + + /** + * Emit a Log Record object with arguments + * + * @param log_record Log record + * @param args Arguments which can be used to set data of log record by type. + * Severity -> severity, severity_text + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void EmitLogRecord(nostd::unique_ptr &&log_record, ArgumentType &&...args) + { + if (!log_record) + { + return; + } + + // + // Keep the parameter pack unpacking order from left to right because left + // ones are usually more important like severity and event_id than the + // attributes. The left to right unpack order could pass the more important + // data to processors to avoid caching and memory allocating. + // +#if __cplusplus <= 201402L + // C++14 does not support fold expressions for parameter pack expansion. + int dummy[] = {(detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + 0)...}; + IgnoreTraitResult(dummy); +#else + IgnoreTraitResult((detail::LogRecordSetterTrait::type>::Set( + log_record.get(), std::forward(args)), + ...)); +#endif + + EmitLogRecord(std::move(log_record)); + } + + /** + * Emit a Log Record object with arguments + * + * @param args Arguments which can be used to set data of log record by type. + * Severity -> severity, severity_text + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void EmitLogRecord(ArgumentType &&...args) + { + nostd::unique_ptr log_record = CreateLogRecord(); + + EmitLogRecord(std::move(log_record), std::forward(args)...); + } + + /** + * Writes a log with a severity of trace. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Trace(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kTrace, std::forward(args)...); + } + + /** + * Writes a log with a severity of debug. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Debug(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kDebug, std::forward(args)...); + } + + /** + * Writes a log with a severity of info. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Info(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kInfo, std::forward(args)...); + } + + /** + * Writes a log with a severity of warn. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Warn(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kWarn, std::forward(args)...); + } + + /** + * Writes a log with a severity of error. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Error(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kError, std::forward(args)...); + } + + /** + * Writes a log with a severity of fatal. + * @param args Arguments which can be used to set data of log record by type. + * string_view -> body + * AttributeValue -> body + * SpanContext -> span_id,trace_id and trace_flags + * SpanId -> span_id + * TraceId -> trace_id + * TraceFlags -> trace_flags + * SystemTimestamp -> timestamp + * system_clock::time_point -> timestamp + * KeyValueIterable -> attributes + * Key value iterable container -> attributes + * span> -> attributes(return type of MakeAttributes) + */ + template + void Fatal(ArgumentType &&...args) noexcept + { + static_assert( + !detail::LogRecordHasType::type...>::value, + "Severity is already set."); + this->EmitLogRecord(Severity::kFatal, std::forward(args)...); + } + + // + // OpenTelemetry C++ user-facing Logs API + // + + inline bool Enabled(Severity severity, const EventId &event_id) const noexcept + { + if OPENTELEMETRY_LIKELY_CONDITION (!Enabled(severity)) + { + return false; + } + return EnabledImplementation(severity, event_id); + } + + inline bool Enabled(Severity severity, int64_t event_id) const noexcept + { + if OPENTELEMETRY_LIKELY_CONDITION (!Enabled(severity)) + { + return false; + } + return EnabledImplementation(severity, event_id); + } + + inline bool Enabled(Severity severity) const noexcept + { + return static_cast(severity) >= OPENTELEMETRY_ATOMIC_READ_8(&minimum_severity_); + } + + /** + * Log an event + * + * @severity severity of the log + * @event_id event identifier of the log + * @format an utf-8 string following https://messagetemplates.org/ + * @attributes key value pairs of the log + */ + virtual void Log(Severity severity, + const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->EmitLogRecord(severity, event_id, format, attributes); + } + + virtual void Log(Severity severity, + int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->EmitLogRecord(severity, EventId{event_id}, format, attributes); + } + + virtual void Log(Severity severity, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->EmitLogRecord(severity, format, attributes); + } + + virtual void Log(Severity severity, nostd::string_view message) noexcept + { + this->EmitLogRecord(severity, message); + } + + // Convenient wrappers based on virtual methods Log(). + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber + + inline void Trace(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kTrace, event_id, format, attributes); + } + + inline void Trace(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kTrace, EventId{event_id}, format, attributes); + } + + inline void Trace(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kTrace, format, attributes); + } + + inline void Trace(nostd::string_view message) noexcept { this->Log(Severity::kTrace, message); } + + inline void Debug(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kDebug, event_id, format, attributes); + } + + inline void Debug(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kDebug, EventId{event_id}, format, attributes); + } + + inline void Debug(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kDebug, format, attributes); + } + + inline void Debug(nostd::string_view message) noexcept { this->Log(Severity::kDebug, message); } + + inline void Info(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kInfo, event_id, format, attributes); + } + + inline void Info(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kInfo, EventId{event_id}, format, attributes); + } + + inline void Info(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kInfo, format, attributes); + } + + inline void Info(nostd::string_view message) noexcept { this->Log(Severity::kInfo, message); } + + inline void Warn(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kWarn, event_id, format, attributes); + } + + inline void Warn(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kWarn, EventId{event_id}, format, attributes); + } + + inline void Warn(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kWarn, format, attributes); + } + + inline void Warn(nostd::string_view message) noexcept { this->Log(Severity::kWarn, message); } + + inline void Error(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kError, event_id, format, attributes); + } + + inline void Error(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kError, EventId{event_id}, format, attributes); + } + + inline void Error(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kError, format, attributes); + } + + inline void Error(nostd::string_view message) noexcept { this->Log(Severity::kError, message); } + + inline void Fatal(const EventId &event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kFatal, event_id, format, attributes); + } + + inline void Fatal(int64_t event_id, + nostd::string_view format, + const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kFatal, EventId{event_id}, format, attributes); + } + + inline void Fatal(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept + { + this->Log(Severity::kFatal, format, attributes); + } + + inline void Fatal(nostd::string_view message) noexcept { this->Log(Severity::kFatal, message); } + + // + // End of OpenTelemetry C++ user-facing Log API. + // + +protected: + // TODO: discuss with community about naming for internal methods. + virtual bool EnabledImplementation(Severity /*severity*/, + const EventId & /*event_id*/) const noexcept + { + return false; + } + + virtual bool EnabledImplementation(Severity /*severity*/, int64_t /*event_id*/) const noexcept + { + return false; + } + + void SetMinimumSeverity(uint8_t severity_or_max) noexcept + { + OPENTELEMETRY_ATOMIC_WRITE_8(&minimum_severity_, severity_or_max); + } + +private: + template + void IgnoreTraitResult(ValueType &&...) + {} + + // + // minimum_severity_ can be updated concurrently by multiple threads/cores, so race condition on + // read/write should be handled. And std::atomic can not be used here because it is not ABI + // compatible for OpenTelemetry C++ API. + // + mutable uint8_t minimum_severity_{kMaxSeverity}; +}; +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_provider.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_provider.h new file mode 100644 index 00000000..ab1493c5 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_provider.h @@ -0,0 +1,71 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ + +class Logger; + +/** + * Creates new Logger instances. + */ +class OPENTELEMETRY_EXPORT LoggerProvider +{ +public: + virtual ~LoggerProvider() = default; + + /** + * Gets or creates a named Logger instance. + * + * Optionally a version can be passed to create a named and versioned Logger + * instance. + * + * Optionally a configuration file name can be passed to create a configuration for + * the Logger instance. + * + */ + + virtual nostd::shared_ptr GetLogger( + nostd::string_view logger_name, + nostd::string_view library_name = "", + nostd::string_view library_version = "", + nostd::string_view schema_url = "", + const common::KeyValueIterable &attributes = common::NoopKeyValueIterable()) = 0; + + nostd::shared_ptr GetLogger( + nostd::string_view logger_name, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url, + std::initializer_list> attributes) + { + return GetLogger(logger_name, library_name, library_version, schema_url, + nostd::span>{ + attributes.begin(), attributes.end()}); + } + + template ::value> * = nullptr> + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url, + const T &attributes) + { + return GetLogger(logger_name, library_name, library_version, schema_url, + common::KeyValueIterableView(attributes)); + } +}; +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_type_traits.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_type_traits.h new file mode 100644 index 00000000..d88a6ffb --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/logger_type_traits.h @@ -0,0 +1,204 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/common/timestamp.h" +#include "opentelemetry/logs/event_id.h" +#include "opentelemetry/logs/log_record.h" +#include "opentelemetry/logs/severity.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/trace/span_context.h" +#include "opentelemetry/trace/span_id.h" +#include "opentelemetry/trace/trace_flags.h" +#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ +namespace detail +{ +template +struct LogRecordSetterTrait; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetSeverity(std::forward(arg)); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetEventId(arg.id_, nostd::string_view{arg.name_.get()}); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetSpanId(arg.span_id()); + log_record->SetTraceId(arg.trace_id()); + log_record->SetTraceFlags(arg.trace_flags()); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetSpanId(std::forward(arg)); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetTraceId(std::forward(arg)); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetTraceFlags(std::forward(arg)); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetTimestamp(std::forward(arg)); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetTimestamp(common::SystemTimestamp(std::forward(arg))); + + return log_record; + } +}; + +template <> +struct LogRecordSetterTrait +{ + template + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + arg.ForEachKeyValue( + [&log_record](nostd::string_view key, common::AttributeValue value) noexcept { + log_record->SetAttribute(key, value); + return true; + }); + + return log_record; + } +}; + +template +struct LogRecordSetterTrait +{ + static_assert(!std::is_same, ValueType>::value && + !std::is_same, ValueType>::value, + "unique_ptr is not allowed, please use std::move()"); + + template ::value || + std::is_convertible::value, + void> * = nullptr> + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + log_record->SetBody(std::forward(arg)); + + return log_record; + } + + template ::value, bool> + * = nullptr> + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + return LogRecordSetterTrait::Set(log_record, + std::forward(arg)); + } + + template ::value, int> * = + nullptr> + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept + { + for (auto &argv : arg) + { + log_record->SetAttribute(argv.first, argv.second); + } + + return log_record; + } +}; + +template +struct LogRecordHasType; + +template +struct LogRecordHasType : public std::false_type +{}; + +template +struct LogRecordHasType + : public std::conditional::value, + std::true_type, + LogRecordHasType>::type +{}; + +} // namespace detail + +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/noop.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/noop.h new file mode 100644 index 00000000..24312f06 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/noop.h @@ -0,0 +1,131 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +// Please refer to provider.h for documentation on how to obtain a Logger object. +// +// This file is part of the internal implementation of OpenTelemetry. Nothing in this file should be +// used directly. Please refer to logger.h for documentation on these interfaces. + +#include "opentelemetry/logs/event_logger.h" +#include "opentelemetry/logs/event_logger_provider.h" +#include "opentelemetry/logs/logger.h" +#include "opentelemetry/logs/logger_provider.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace logs +{ +/** + * No-op implementation of Logger. This class should not be used directly. It should only be + * instantiated using a LoggerProvider's GetLogger() call. + */ +class NoopLogger final : public Logger +{ +public: + const nostd::string_view GetName() noexcept override { return "noop logger"; } + + nostd::unique_ptr CreateLogRecord() noexcept override + { + /* + * Do not return memory shared between threads, + * a `new` + `delete` for each noop record can not be avoided, + * due to the semantic of unique_ptr. + */ + return nostd::unique_ptr(new NoopLogRecord()); + } + + using Logger::EmitLogRecord; + + void EmitLogRecord(nostd::unique_ptr &&) noexcept override {} + +private: + class NoopLogRecord : public LogRecord + { + public: + NoopLogRecord() = default; + ~NoopLogRecord() override = default; + + void SetTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {} + void SetObservedTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {} + void SetSeverity(logs::Severity /* severity */) noexcept override {} + void SetBody(const common::AttributeValue & /* message */) noexcept override {} + void SetAttribute(nostd::string_view /* key */, + const common::AttributeValue & /* value */) noexcept override + {} + void SetEventId(int64_t /* id */, nostd::string_view /* name */) noexcept override {} + void SetTraceId(const trace::TraceId & /* trace_id */) noexcept override {} + void SetSpanId(const trace::SpanId & /* span_id */) noexcept override {} + void SetTraceFlags(const trace::TraceFlags & /* trace_flags */) noexcept override {} + }; +}; + +/** + * No-op implementation of a LoggerProvider. + */ +class NoopLoggerProvider final : public LoggerProvider +{ +public: + NoopLoggerProvider() : logger_{nostd::shared_ptr(new NoopLogger())} {} + + nostd::shared_ptr GetLogger(nostd::string_view /* logger_name */, + nostd::string_view /* library_name */, + nostd::string_view /* library_version */, + nostd::string_view /* schema_url */, + const common::KeyValueIterable & /* attributes */) override + { + return logger_; + } + +private: + nostd::shared_ptr logger_; +}; + +#if OPENTELEMETRY_ABI_VERSION_NO < 2 +class NoopEventLogger final : public EventLogger +{ +public: + NoopEventLogger() : logger_{nostd::shared_ptr(new NoopLogger())} {} + + const nostd::string_view GetName() noexcept override { return "noop event logger"; } + + nostd::shared_ptr GetDelegateLogger() noexcept override { return logger_; } + + void EmitEvent(nostd::string_view, nostd::unique_ptr &&) noexcept override {} + +private: + nostd::shared_ptr logger_; +}; + +/** + * No-op implementation of a EventLoggerProvider. + */ +class NoopEventLoggerProvider final : public EventLoggerProvider +{ +public: + NoopEventLoggerProvider() : event_logger_{nostd::shared_ptr(new NoopEventLogger())} + {} + + nostd::shared_ptr CreateEventLogger( + nostd::shared_ptr /*delegate_logger*/, + nostd::string_view /*event_domain*/) noexcept override + { + return event_logger_; + } + +private: + nostd::shared_ptr event_logger_; +}; +#endif + +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/provider.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/provider.h new file mode 100644 index 00000000..0c1b4dee --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/provider.h @@ -0,0 +1,100 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/common/macros.h" +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/logs/noop.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ + +#if OPENTELEMETRY_ABI_VERSION_NO < 2 +class EventLoggerProvider; +#endif +class LoggerProvider; + +/** + * Stores the singleton global LoggerProvider. + */ +class OPENTELEMETRY_EXPORT Provider +{ +public: + /** + * Returns the singleton LoggerProvider. + * + * By default, a no-op LoggerProvider is returned. This will never return a + * nullptr LoggerProvider. + */ + static nostd::shared_ptr GetLoggerProvider() noexcept + { + std::lock_guard guard(GetLock()); + return nostd::shared_ptr(GetProvider()); + } + + /** + * Changes the singleton LoggerProvider. + */ + static void SetLoggerProvider(const nostd::shared_ptr &tp) noexcept + { + std::lock_guard guard(GetLock()); + GetProvider() = tp; + } + +#if OPENTELEMETRY_ABI_VERSION_NO < 2 + /** + * Returns the singleton EventLoggerProvider. + * + * By default, a no-op EventLoggerProvider is returned. This will never return a + * nullptr EventLoggerProvider. + */ + OPENTELEMETRY_DEPRECATED static nostd::shared_ptr + GetEventLoggerProvider() noexcept + { + std::lock_guard guard(GetLock()); + return nostd::shared_ptr(GetEventProvider()); + } + + /** + * Changes the singleton EventLoggerProvider. + */ + OPENTELEMETRY_DEPRECATED static void SetEventLoggerProvider( + const nostd::shared_ptr &tp) noexcept + { + std::lock_guard guard(GetLock()); + GetEventProvider() = tp; + } +#endif + +private: + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr &GetProvider() noexcept + { + static nostd::shared_ptr provider(new NoopLoggerProvider); + return provider; + } + +#if OPENTELEMETRY_ABI_VERSION_NO < 2 + OPENTELEMETRY_DEPRECATED + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr & + GetEventProvider() noexcept + { + static nostd::shared_ptr provider(new NoopEventLoggerProvider); + return provider; + } +#endif + + OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept + { + static common::SpinLockMutex lock; + return lock; + } +}; + +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/severity.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/severity.h new file mode 100644 index 00000000..f4d96161 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/logs/severity.h @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ + +/** + * Severity Levels assigned to log events, based on Log Data Model, + * with the addition of kInvalid (mapped to a severity number of 0). + * + * See + * https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber + */ +enum class Severity : uint8_t +{ + kInvalid = 0, + kTrace = 1, + kTrace2 = 2, + kTrace3 = 3, + kTrace4 = 4, + kDebug = 5, + kDebug2 = 6, + kDebug3 = 7, + kDebug4 = 8, + kInfo = 9, + kInfo2 = 10, + kInfo3 = 11, + kInfo4 = 12, + kWarn = 13, + kWarn2 = 14, + kWarn3 = 15, + kWarn4 = 16, + kError = 17, + kError2 = 18, + kError3 = 19, + kError4 = 20, + kFatal = 21, + kFatal2 = 22, + kFatal3 = 23, + kFatal4 = 24 +}; + +const uint8_t kMaxSeverity = 255; + +/** + * Mapping of the severity enum above, to a severity text string (in all caps). + * This severity text can be printed out by exporters. Capital letters follow the + * spec naming convention. + * + * Included to follow the specification's recommendation to print both + * severity number and text in each log record. + */ +const nostd::string_view SeverityNumToText[25] = { + "INVALID", "TRACE", "TRACE2", "TRACE3", "TRACE4", "DEBUG", "DEBUG2", "DEBUG3", "DEBUG4", + "INFO", "INFO2", "INFO3", "INFO4", "WARN", "WARN2", "WARN3", "WARN4", "ERROR", + "ERROR2", "ERROR3", "ERROR4", "FATAL", "FATAL2", "FATAL3", "FATAL4"}; + +} // namespace logs +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/async_instruments.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/async_instruments.h new file mode 100644 index 00000000..f73eb2f5 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/async_instruments.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/metrics/observer_result.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +using ObservableCallbackPtr = void (*)(ObserverResult, void *); + +class ObservableInstrument +{ +public: + ObservableInstrument() = default; + virtual ~ObservableInstrument() = default; + + /** + * Sets up a function that will be called whenever a metric collection is initiated. + */ + virtual void AddCallback(ObservableCallbackPtr, void *state) noexcept = 0; + + /** + * Remove a function that was configured to be called whenever a metric collection is initiated. + */ + virtual void RemoveCallback(ObservableCallbackPtr, void *state) noexcept = 0; +}; + +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter.h new file mode 100644 index 00000000..59cfb878 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter.h @@ -0,0 +1,174 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +template +class Counter; + +template +class Histogram; + +template +class UpDownCounter; + +template +class Gauge; + +class ObservableInstrument; + +/** + * Handles instrument creation and provides a facility for batch recording. + * + * This class provides methods to create new metric instruments, record a + * batch of values to a specified set of instruments, and collect + * measurements from all instruments. + * + */ +class Meter +{ +public: + virtual ~Meter() = default; + + /** + * Creates a Counter with the passed characteristics and returns a unique_ptr to that Counter. + * + * @param name the name of the new Counter. + * @param description a brief description of what the Counter is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + * @return a shared pointer to the created Counter. + */ + + virtual nostd::unique_ptr> CreateUInt64Counter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::unique_ptr> CreateDoubleCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + /** + * Creates a Asynchronous (Observable) counter with the passed characteristics and returns a + * shared_ptr to that Observable Counter + * + * @param name the name of the new Observable Counter. + * @param description a brief description of what the Observable Counter is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + */ + virtual nostd::shared_ptr CreateInt64ObservableCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::shared_ptr CreateDoubleObservableCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + /** + * Creates a Histogram with the passed characteristics and returns a unique_ptr to that Histogram. + * + * @param name the name of the new Histogram. + * @param description a brief description of what the Histogram is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + * @return a shared pointer to the created Histogram. + */ + virtual nostd::unique_ptr> CreateUInt64Histogram( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::unique_ptr> CreateDoubleHistogram( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + /** + * Creates a Gauge with the passed characteristics and returns a unique_ptr to that Gauge. + * + * @param name the name of the new Gauge. + * @param description a brief description of what the Gauge is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + * @return a unique pointer to the created Gauge. + */ + + virtual nostd::unique_ptr> CreateInt64Gauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::unique_ptr> CreateDoubleGauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; +#endif + + /** + * Creates a Asynchronous (Observable) Gauge with the passed characteristics and returns a + * shared_ptr to that Observable Gauge + * + * @param name the name of the new Observable Gauge. + * @param description a brief description of what the Observable Gauge is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + */ + virtual nostd::shared_ptr CreateInt64ObservableGauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::shared_ptr CreateDoubleObservableGauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + /** + * Creates an UpDownCounter with the passed characteristics and returns a unique_ptr to that + * UpDownCounter. + * + * @param name the name of the new UpDownCounter. + * @param description a brief description of what the UpDownCounter is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + * @return a shared pointer to the created UpDownCounter. + */ + virtual nostd::unique_ptr> CreateInt64UpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::unique_ptr> CreateDoubleUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + /** + * Creates a Asynchronous (Observable) UpDownCounter with the passed characteristics and returns + * a shared_ptr to that Observable UpDownCounter + * + * @param name the name of the new Observable UpDownCounter. + * @param description a brief description of what the Observable UpDownCounter is used for. + * @param unit the unit of metric values following https://unitsofmeasure.org/ucum.html. + */ + virtual nostd::shared_ptr CreateInt64ObservableUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; + + virtual nostd::shared_ptr CreateDoubleObservableUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept = 0; +}; +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter_provider.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter_provider.h new file mode 100644 index 00000000..fca960bb --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/meter_provider.h @@ -0,0 +1,148 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +class Meter; + +/** + * Creates new Meter instances. + */ +class MeterProvider +{ +public: + virtual ~MeterProvider() = default; + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + + /** + * Gets or creates a named Meter instance (ABI). + * + * @since ABI_VERSION 2 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version + * @param[in] schema_url Instrumentation scope schema URL + * @param[in] attributes Instrumentation scope attributes (optional, may be nullptr) + */ + virtual nostd::shared_ptr GetMeter( + nostd::string_view name, + nostd::string_view version, + nostd::string_view schema_url, + const common::KeyValueIterable *attributes) noexcept = 0; + + /** + * Gets or creates a named Meter instance (API helper). + * + * @since ABI_VERSION 2 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version, optional + * @param[in] schema_url Instrumentation scope schema URL, optional + */ + nostd::shared_ptr GetMeter(nostd::string_view name, + nostd::string_view version = "", + nostd::string_view schema_url = "") + { + return GetMeter(name, version, schema_url, nullptr); + } + + /** + * Gets or creates a named Meter instance (API helper). + * + * @since ABI_VERSION 2 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version + * @param[in] schema_url Instrumentation scope schema URL + * @param[in] attributes Instrumentation scope attributes + */ + nostd::shared_ptr GetMeter( + nostd::string_view name, + nostd::string_view version, + nostd::string_view schema_url, + std::initializer_list> attributes) + { + /* Build a container from std::initializer_list. */ + nostd::span> attributes_span{ + attributes.begin(), attributes.end()}; + + /* Build a view on the container. */ + common::KeyValueIterableView< + nostd::span>> + iterable_attributes{attributes_span}; + + /* Add attributes using the view. */ + return GetMeter(name, version, schema_url, &iterable_attributes); + } + + /** + * Gets or creates a named Meter instance (API helper). + * + * @since ABI_VERSION 2 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version + * @param[in] schema_url Instrumentation scope schema URL + * @param[in] attributes Instrumentation scope attributes container + */ + template ::value> * = nullptr> + nostd::shared_ptr GetMeter(nostd::string_view name, + nostd::string_view version, + nostd::string_view schema_url, + const T &attributes) + { + /* Build a view on the container. */ + common::KeyValueIterableView iterable_attributes(attributes); + + /* Add attributes using the view. */ + return GetMeter(name, version, schema_url, &iterable_attributes); + } + +#else + /** + * Gets or creates a named Meter instance (ABI) + * + * @since ABI_VERSION 1 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version, optional + * @param[in] schema_url Instrumentation scope schema URL, optional + */ + virtual nostd::shared_ptr GetMeter(nostd::string_view name, + nostd::string_view version = "", + nostd::string_view schema_url = "") noexcept = 0; +#endif + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + /** + * Remove a named Meter instance (ABI). + * + * This API is experimental, see + * https://github.com/open-telemetry/opentelemetry-specification/issues/2232 + * + * @since ABI_VERSION 2 + * + * @param[in] name Meter instrumentation scope + * @param[in] version Instrumentation scope version, optional + * @param[in] schema_url Instrumentation scope schema URL, optional + */ + virtual void RemoveMeter(nostd::string_view name, + nostd::string_view version = "", + nostd::string_view schema_url = "") noexcept = 0; +#endif +}; +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/noop.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/noop.h new file mode 100644 index 00000000..1d508b93 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/noop.h @@ -0,0 +1,271 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/metrics/async_instruments.h" +#include "opentelemetry/metrics/meter.h" +#include "opentelemetry/metrics/meter_provider.h" +#include "opentelemetry/metrics/observer_result.h" +#include "opentelemetry/metrics/sync_instruments.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +template +class NoopCounter : public Counter +{ +public: + NoopCounter(nostd::string_view /* name */, + nostd::string_view /* description */, + nostd::string_view /* unit */) noexcept + {} + void Add(T /* value */) noexcept override {} + void Add(T /* value */, const context::Context & /* context */) noexcept override {} + void Add(T /* value */, const common::KeyValueIterable & /* attributes */) noexcept override {} + void Add(T /* value */, + const common::KeyValueIterable & /* attributes */, + const context::Context & /* context */) noexcept override + {} +}; + +template +class NoopHistogram : public Histogram +{ +public: + NoopHistogram(nostd::string_view /* name */, + nostd::string_view /* description */, + nostd::string_view /* unit */) noexcept + {} + void Record(T /* value */, const context::Context & /* context */) noexcept override {} + void Record(T /* value */, + const common::KeyValueIterable & /* attributes */, + const context::Context & /* context */) noexcept override + {} +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + void Record(T /*value*/, + const opentelemetry::common::KeyValueIterable & /*attributes*/) noexcept override + {} + + void Record(T /*value*/) noexcept override {} +#endif +}; + +template +class NoopUpDownCounter : public UpDownCounter +{ +public: + NoopUpDownCounter(nostd::string_view /* name */, + nostd::string_view /* description */, + nostd::string_view /* unit */) noexcept + {} + ~NoopUpDownCounter() override = default; + void Add(T /* value */) noexcept override {} + void Add(T /* value */, const context::Context & /* context */) noexcept override {} + void Add(T /* value */, const common::KeyValueIterable & /* attributes */) noexcept override {} + void Add(T /* value */, + const common::KeyValueIterable & /* attributes */, + const context::Context & /* context */) noexcept override + {} +}; + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 +template +class NoopGauge : public Gauge +{ +public: + NoopGauge(nostd::string_view /* name */, + nostd::string_view /* description */, + nostd::string_view /* unit */) noexcept + {} + ~NoopGauge() override = default; + void Record(T /* value */) noexcept override {} + void Record(T /* value */, const context::Context & /* context */) noexcept override {} + void Record(T /* value */, const common::KeyValueIterable & /* attributes */) noexcept override {} + void Record(T /* value */, + const common::KeyValueIterable & /* attributes */, + const context::Context & /* context */) noexcept override + {} +}; +#endif + +class NoopObservableInstrument : public ObservableInstrument +{ +public: + NoopObservableInstrument(nostd::string_view /* name */, + nostd::string_view /* description */, + nostd::string_view /* unit */) noexcept + {} + + void AddCallback(ObservableCallbackPtr, void * /* state */) noexcept override {} + void RemoveCallback(ObservableCallbackPtr, void * /* state */) noexcept override {} +}; + +/** + * No-op implementation of Meter. + */ +class NoopMeter final : public Meter +{ +public: + nostd::unique_ptr> CreateUInt64Counter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{new NoopCounter(name, description, unit)}; + } + + nostd::unique_ptr> CreateDoubleCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{new NoopCounter(name, description, unit)}; + } + + nostd::shared_ptr CreateInt64ObservableCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } + + nostd::shared_ptr CreateDoubleObservableCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } + + nostd::unique_ptr> CreateUInt64Histogram( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{ + new NoopHistogram(name, description, unit)}; + } + + nostd::unique_ptr> CreateDoubleHistogram( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{new NoopHistogram(name, description, unit)}; + } + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + nostd::unique_ptr> CreateInt64Gauge(nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{new NoopGauge(name, description, unit)}; + } + + nostd::unique_ptr> CreateDoubleGauge(nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{new NoopGauge(name, description, unit)}; + } +#endif + + nostd::shared_ptr CreateInt64ObservableGauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } + + nostd::shared_ptr CreateDoubleObservableGauge( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } + + nostd::unique_ptr> CreateInt64UpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{ + new NoopUpDownCounter(name, description, unit)}; + } + + nostd::unique_ptr> CreateDoubleUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::unique_ptr>{ + new NoopUpDownCounter(name, description, unit)}; + } + + nostd::shared_ptr CreateInt64ObservableUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } + + nostd::shared_ptr CreateDoubleObservableUpDownCounter( + nostd::string_view name, + nostd::string_view description = "", + nostd::string_view unit = "") noexcept override + { + return nostd::shared_ptr( + new NoopObservableInstrument(name, description, unit)); + } +}; + +/** + * No-op implementation of a MeterProvider. + */ +class NoopMeterProvider final : public MeterProvider +{ +public: + NoopMeterProvider() : meter_{nostd::shared_ptr(new NoopMeter)} {} + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + nostd::shared_ptr GetMeter( + nostd::string_view /* name */, + nostd::string_view /* version */, + nostd::string_view /* schema_url */, + const common::KeyValueIterable * /* attributes */) noexcept override + { + return meter_; + } +#else + nostd::shared_ptr GetMeter(nostd::string_view /* name */, + nostd::string_view /* version */, + nostd::string_view /* schema_url */) noexcept override + { + return meter_; + } +#endif + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + void RemoveMeter(nostd::string_view /* name */, + nostd::string_view /* version */, + nostd::string_view /* schema_url */) noexcept override + {} +#endif + +private: + nostd::shared_ptr meter_; +}; +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/observer_result.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/observer_result.h new file mode 100644 index 00000000..56c42bc2 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/observer_result.h @@ -0,0 +1,54 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/nostd/variant.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +/** + * ObserverResultT class is necessary for the callback recording asynchronous + * instrument use. + */ +template +class ObserverResultT +{ + +public: + virtual ~ObserverResultT() = default; + + virtual void Observe(T value) noexcept = 0; + + virtual void Observe(T value, const common::KeyValueIterable &attributes) noexcept = 0; + + template ::value> * = nullptr> + void Observe(T value, const U &attributes) noexcept + { + this->Observe(value, common::KeyValueIterableView{attributes}); + } + + void Observe(T value, + std::initializer_list> + attributes) noexcept + { + this->Observe(value, nostd::span>{ + attributes.begin(), attributes.end()}); + } +}; + +using ObserverResult = nostd::variant>, + nostd::shared_ptr>>; + +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/provider.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/provider.h new file mode 100644 index 00000000..20a606a7 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/provider.h @@ -0,0 +1,60 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/metrics/meter_provider.h" +#include "opentelemetry/metrics/noop.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +/** + * Stores the singleton global MeterProvider. + */ +class Provider +{ +public: + /** + * Returns the singleton MeterProvider. + * + * By default, a no-op MeterProvider is returned. This will never return a + * nullptr MeterProvider. + */ + static nostd::shared_ptr GetMeterProvider() noexcept + { + std::lock_guard guard(GetLock()); + return nostd::shared_ptr(GetProvider()); + } + + /** + * Changes the singleton MeterProvider. + */ + static void SetMeterProvider(const nostd::shared_ptr &tp) noexcept + { + std::lock_guard guard(GetLock()); + GetProvider() = tp; + } + +private: + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr &GetProvider() noexcept + { + static nostd::shared_ptr provider(new NoopMeterProvider); + return provider; + } + + OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept + { + static common::SpinLockMutex lock; + return lock; + } +}; + +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/sync_instruments.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/sync_instruments.h new file mode 100644 index 00000000..9eaec335 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/metrics/sync_instruments.h @@ -0,0 +1,328 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +class SynchronousInstrument +{ +public: + SynchronousInstrument() = default; + virtual ~SynchronousInstrument() = default; +}; + +/* A Counter instrument that adds values. */ +template +class Counter : public SynchronousInstrument +{ + +public: + /** + * Record a value + * + * @param value The increment amount. MUST be non-negative. + */ + virtual void Add(T value) noexcept = 0; + + /** + * Record a value + * + * @param value The increment amount. MUST be non-negative. + * @param context The explicit context to associate with this measurement. + */ + virtual void Add(T value, const context::Context &context) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The increment amount. MUST be non-negative. + * @param attributes A set of attributes to associate with the value. + */ + + virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The increment amount. MUST be non-negative. + * @param attributes A set of attributes to associate with the value. + * @param context The explicit context to associate with this measurement. + */ + virtual void Add(T value, + const common::KeyValueIterable &attributes, + const context::Context &context) noexcept = 0; + + template ::value> * = nullptr> + void Add(T value, const U &attributes) noexcept + { + this->Add(value, common::KeyValueIterableView{attributes}); + } + + template ::value> * = nullptr> + void Add(T value, const U &attributes, const context::Context &context) noexcept + { + this->Add(value, common::KeyValueIterableView{attributes}, context); + } + + void Add(T value, + std::initializer_list> + attributes) noexcept + { + this->Add(value, nostd::span>{ + attributes.begin(), attributes.end()}); + } + + void Add(T value, + std::initializer_list> attributes, + const context::Context &context) noexcept + { + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } +}; + +/** A histogram instrument that records values. */ + +template +class Histogram : public SynchronousInstrument +{ +public: +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + /** + * @since ABI_VERSION 2 + * Records a value. + * + * @param value The measurement value. MUST be non-negative. + */ + virtual void Record(T value) noexcept = 0; + + /** + * @since ABI_VERSION 2 + * Records a value with a set of attributes. + * + * @param value The measurement value. MUST be non-negative. + * @param attribute A set of attributes to associate with the value. + */ + virtual void Record(T value, const common::KeyValueIterable &attribute) noexcept = 0; + + template ::value> * = nullptr> + void Record(T value, const U &attributes) noexcept + { + this->Record(value, common::KeyValueIterableView{attributes}); + } + + void Record(T value, + std::initializer_list> + attributes) noexcept + { + this->Record(value, nostd::span>{ + attributes.begin(), attributes.end()}); + } +#endif + + /** + * Records a value. + * + * @param value The measurement value. MUST be non-negative. + * @param context The explicit context to associate with this measurement. + */ + virtual void Record(T value, const context::Context &context) noexcept = 0; + + /** + * Records a value with a set of attributes. + * + * @param value The measurement value. MUST be non-negative. + * @param attributes A set of attributes to associate with the value.. + * @param context The explicit context to associate with this measurement. + */ + virtual void Record(T value, + const common::KeyValueIterable &attributes, + const context::Context &context) noexcept = 0; + + template ::value> * = nullptr> + void Record(T value, const U &attributes, const context::Context &context) noexcept + { + this->Record(value, common::KeyValueIterableView{attributes}, context); + } + + void Record( + T value, + std::initializer_list> attributes, + const context::Context &context) noexcept + { + this->Record(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } +}; + +/** An up-down-counter instrument that adds or reduce values. */ + +template +class UpDownCounter : public SynchronousInstrument +{ +public: + /** + * Record a value. + * + * @param value The increment amount. May be positive, negative or zero. + */ + virtual void Add(T value) noexcept = 0; + + /** + * Record a value. + * + * @param value The increment amount. May be positive, negative or zero. + * @param context The explicit context to associate with this measurement. + */ + virtual void Add(T value, const context::Context &context) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The increment amount. May be positive, negative or zero. + * @param attributes A set of attributes to associate with the count. + */ + virtual void Add(T value, const common::KeyValueIterable &attributes) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The increment amount. May be positive, negative or zero. + * @param attributes A set of attributes to associate with the count. + * @param context The explicit context to associate with this measurement. + */ + virtual void Add(T value, + const common::KeyValueIterable &attributes, + const context::Context &context) noexcept = 0; + + template ::value> * = nullptr> + void Add(T value, const U &attributes) noexcept + { + this->Add(value, common::KeyValueIterableView{attributes}); + } + + template ::value> * = nullptr> + void Add(T value, const U &attributes, const context::Context &context) noexcept + { + this->Add(value, common::KeyValueIterableView{attributes}, context); + } + + void Add(T value, + std::initializer_list> + attributes) noexcept + { + this->Add(value, nostd::span>{ + attributes.begin(), attributes.end()}); + } + + void Add(T value, + std::initializer_list> attributes, + const context::Context &context) noexcept + { + this->Add(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } +}; + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 +/* A Gauge instrument that records values. */ +template +class Gauge : public SynchronousInstrument +{ + +public: + /** + * Record a value + * + * @param value The measurement value. May be positive, negative or zero. + */ + virtual void Record(T value) noexcept = 0; + + /** + * Record a value + * + * @param value The measurement value. May be positive, negative or zero. + * @param context The explicit context to associate with this measurement. + */ + virtual void Record(T value, const context::Context &context) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The measurement value. May be positive, negative or zero. + * @param attributes A set of attributes to associate with the value. + */ + + virtual void Record(T value, const common::KeyValueIterable &attributes) noexcept = 0; + + /** + * Record a value with a set of attributes. + * + * @param value The measurement value. May be positive, negative or zero. + * @param attributes A set of attributes to associate with the value. + * @param context The explicit context to associate with this measurement. + */ + virtual void Record(T value, + const common::KeyValueIterable &attributes, + const context::Context &context) noexcept = 0; + + template ::value> * = nullptr> + void Record(T value, const U &attributes) noexcept + { + this->Record(value, common::KeyValueIterableView{attributes}); + } + + template ::value> * = nullptr> + void Record(T value, const U &attributes, const context::Context &context) noexcept + { + this->Record(value, common::KeyValueIterableView{attributes}, context); + } + + void Record(T value, + std::initializer_list> + attributes) noexcept + { + this->Record(value, nostd::span>{ + attributes.begin(), attributes.end()}); + } + + void Record( + T value, + std::initializer_list> attributes, + const context::Context &context) noexcept + { + this->Record(value, + nostd::span>{ + attributes.begin(), attributes.end()}, + context); + } +}; +#endif + +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/all.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/all.h new file mode 100644 index 00000000..deaf3ac6 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/all.h @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/utility.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +template +using all = std::is_same, integer_sequence>; + +} // namespace detail +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/decay.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/decay.h new file mode 100644 index 00000000..a6cb1112 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/decay.h @@ -0,0 +1,16 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +template +using decay_t = typename std::decay::type; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/dependent_type.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/dependent_type.h new file mode 100644 index 00000000..5bba09ff --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/dependent_type.h @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +template +struct dependent_type : T +{}; +} // namespace detail +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/functional.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/functional.h new file mode 100644 index 00000000..0da58dd1 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/functional.h @@ -0,0 +1,66 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/version.h" + +#define OPENTELEMETRY_RETURN(...) \ + noexcept(noexcept(__VA_ARGS__))->decltype(__VA_ARGS__) \ + { \ + return __VA_ARGS__; \ + } + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +struct equal_to +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) == std::forward(rhs)) +}; + +struct not_equal_to +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) != std::forward(rhs)) +}; + +struct less +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) < std::forward(rhs)) +}; + +struct greater +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) > std::forward(rhs)) +}; + +struct less_equal +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) <= std::forward(rhs)) +}; + +struct greater_equal +{ + template + inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const + OPENTELEMETRY_RETURN(std::forward(lhs) >= std::forward(rhs)) +}; +} // namespace detail +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE + +#undef OPENTELEMETRY_RETURN diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/invoke.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/invoke.h new file mode 100644 index 00000000..55a943ed --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/invoke.h @@ -0,0 +1,163 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/nostd/detail/decay.h" +#include "opentelemetry/nostd/detail/void.h" +#include "opentelemetry/version.h" + +#define OPENTELEMETRY_RETURN(...) \ + noexcept(noexcept(__VA_ARGS__))->decltype(__VA_ARGS__) \ + { \ + return __VA_ARGS__; \ + } + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ + +template +struct is_reference_wrapper : std::false_type +{}; + +template +struct is_reference_wrapper> : std::true_type +{}; + +template +struct Invoke; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&...args) + OPENTELEMETRY_RETURN((std::forward(arg).*pmf)(std::forward(args)...)) +}; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&...args) + OPENTELEMETRY_RETURN((std::forward(arg).get().*pmf)(std::forward(args)...)) +}; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&...args) + OPENTELEMETRY_RETURN(((*std::forward(arg)).*pmf)(std::forward(args)...)) +}; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmo, Arg &&arg) + OPENTELEMETRY_RETURN(std::forward(arg).*pmo) +}; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmo, Arg &&arg) + OPENTELEMETRY_RETURN(std::forward(arg).get().*pmo) +}; + +template <> +struct Invoke +{ + template + inline static constexpr auto invoke(R T::*pmo, Arg &&arg) + OPENTELEMETRY_RETURN((*std::forward(arg)).*pmo) +}; + +template +inline constexpr auto invoke_impl(R T::*f, Arg &&arg, Args &&...args) OPENTELEMETRY_RETURN( + Invoke::value, + (std::is_base_of>::value ? 0 + : is_reference_wrapper>::value ? 1 + : 2)>::invoke(f, + std::forward(arg), + std::forward(args)...)) + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable : 4100) +#endif + template + inline constexpr auto invoke_impl(F &&f, Args &&...args) + OPENTELEMETRY_RETURN(std::forward(f)(std::forward(args)...)) +#ifdef _MSC_VER +# pragma warning(pop) +#endif +} // namespace detail + +/* clang-format off */ +template +inline constexpr auto invoke(F &&f, Args &&... args) + OPENTELEMETRY_RETURN(detail::invoke_impl(std::forward(f), std::forward(args)...)) + +namespace detail +/* clang-format on */ +{ + + template + struct invoke_result + {}; + + template + struct invoke_result(), std::declval()...))>, + F, Args...> + { + using type = decltype(nostd::invoke(std::declval(), std::declval()...)); + }; + +} // namespace detail + +template +using invoke_result = detail::invoke_result; + +template +using invoke_result_t = typename invoke_result::type; + +namespace detail +{ + +template +struct is_invocable : std::false_type +{}; + +template +struct is_invocable>, F, Args...> : std::true_type +{}; + +template +struct is_invocable_r : std::false_type +{}; + +template +struct is_invocable_r>, R, F, Args...> + : std::is_convertible, R> +{}; + +} // namespace detail + +template +using is_invocable = detail::is_invocable; + +template +using is_invocable_r = detail::is_invocable_r; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE + +#undef OPENTELEMETRY_RETURN diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/trait.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/trait.h new file mode 100644 index 00000000..8f76fdec --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/trait.h @@ -0,0 +1,75 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +enum class Trait +{ + TriviallyAvailable, + Available, + Unavailable +}; + +template + class IsTriviallyAvailable, + template + class IsAvailable> +inline constexpr Trait trait() +{ + return IsTriviallyAvailable::value ? Trait::TriviallyAvailable + : IsAvailable::value ? Trait::Available + : Trait::Unavailable; +} + +inline constexpr Trait common_trait_impl(Trait result) +{ + return result; +} + +template +inline constexpr Trait common_trait_impl(Trait result, Trait t, Traits... ts) +{ + return static_cast(t) > static_cast(result) ? common_trait_impl(t, ts...) + : common_trait_impl(result, ts...); +} + +template +inline constexpr Trait common_trait(Traits... ts) +{ + return common_trait_impl(Trait::TriviallyAvailable, ts...); +} + +template +struct traits +{ + static constexpr Trait copy_constructible_trait = + common_trait(trait()...); + + static constexpr Trait move_constructible_trait = + common_trait(trait()...); + + static constexpr Trait copy_assignable_trait = + common_trait(copy_constructible_trait, + trait()...); + + static constexpr Trait move_assignable_trait = + common_trait(move_constructible_trait, + trait()...); + + static constexpr Trait destructible_trait = + common_trait(trait()...); +}; +} // namespace detail +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/type_pack_element.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/type_pack_element.h new file mode 100644 index 00000000..280d24e9 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/type_pack_element.h @@ -0,0 +1,53 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/nostd/utility.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +template +using size_constant = std::integral_constant; + +template +struct indexed_type : size_constant +{ + using type = T; +}; + +template +struct type_pack_element_impl +{ +private: + template + struct set; + + template + struct set> : indexed_type... + {}; + + template + inline static std::enable_if impl(indexed_type); + + inline static std::enable_if impl(...); + +public: + using type = decltype(impl(set>{})); +}; + +template +using type_pack_element = typename type_pack_element_impl::type; + +template +using type_pack_element_t = typename type_pack_element::type; +} // namespace detail +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/valueless.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/valueless.h new file mode 100644 index 00000000..3b2ca7f7 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/valueless.h @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +struct valueless_t +{}; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_alternative.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_alternative.h new file mode 100644 index 00000000..cc0da9c8 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_alternative.h @@ -0,0 +1,40 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/detail/type_pack_element.h" +#include "opentelemetry/nostd/detail/variant_fwd.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +template +struct variant_alternative; + +template +using variant_alternative_t = typename variant_alternative::type; + +template +struct variant_alternative : std::add_const> +{}; + +template +struct variant_alternative : std::add_volatile> +{}; + +template +struct variant_alternative : std::add_cv> +{}; + +template +struct variant_alternative> +{ + static_assert(I < sizeof...(Ts), "index out of bounds in `std::variant_alternative<>`"); + using type = detail::type_pack_element_t; +}; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_fwd.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_fwd.h new file mode 100644 index 00000000..6bae9659 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_fwd.h @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +template +class variant; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_size.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_size.h new file mode 100644 index 00000000..d8986a22 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/variant_size.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/nostd/detail/variant_fwd.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +template +struct variant_size; + +template +struct variant_size : variant_size +{}; + +template +struct variant_size : variant_size +{}; + +template +struct variant_size : variant_size +{}; + +template +struct variant_size> : std::integral_constant +{}; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/void.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/void.h new file mode 100644 index 00000000..1b4c3b4f --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/detail/void.h @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +namespace detail +{ +template +struct voider +{ + using type = void; +}; +} // namespace detail + +/** + * Back port of std::void_t + * + * Note: voider workaround is required for gcc-4.8 to make SFINAE work + */ +template +using void_t = typename detail::voider::type; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/function_ref.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/function_ref.h new file mode 100644 index 00000000..6f0c2dd3 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/function_ref.h @@ -0,0 +1,94 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include // IWYU pragma: keep +#include +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace nostd +{ +template +class function_ref; // IWYU pragma: keep + +/** + * Non-owning function reference that can be used as a more performant + * replacement for std::function when ownership sematics aren't needed. + * + * See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0792r0.html + * + * Based off of https://stackoverflow.com/a/39087660/4447365 + */ +template +class function_ref +{ + void *callable_ = nullptr; + R (*invoker_)(void *, Args...) = nullptr; + + template + using FunctionPointer = decltype(std::addressof(std::declval())); + + template + void BindTo(F &f) noexcept + { + callable_ = static_cast(std::addressof(f)); + invoker_ = [](void *callable, Args... args) -> R { + return (*static_cast>(callable))(std::forward(args)...); + }; + } + + template + void BindTo(R_in (*f)(Args_in...)) noexcept + { + using F = decltype(f); + if (f == nullptr) + { + return BindTo(nullptr); + } + callable_ = reinterpret_cast(f); + invoker_ = [](void *callable, Args... args) -> R { + return (F(callable))(std::forward(args)...); + }; + } + + void BindTo(std::nullptr_t) noexcept + { + callable_ = nullptr; + invoker_ = nullptr; + } + +public: + template < + class F, + typename std::enable_if::type>::value, + int>::type = 0, + typename std::enable_if< +#if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG > 201402)) + // std::result_of deprecated in C++17, removed in C++20 + std::is_convertible::type, R>::value, +#else + // std::result_of since C++11 + std::is_convertible::type, R>::value, +#endif + int>::type = 0> + function_ref(F &&f) + { + BindTo(f); // not forward + } + + function_ref(std::nullptr_t) {} + + function_ref(const function_ref &) noexcept = default; + function_ref(function_ref &&) noexcept = default; + + R operator()(Args... args) const { return invoker_(callable_, std::forward(args)...); } + + explicit operator bool() const { return invoker_; } +}; +} // namespace nostd +OPENTELEMETRY_END_NAMESPACE diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/.clang-format b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/.clang-format new file mode 100644 index 00000000..001170f7 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/.clang-format @@ -0,0 +1,3 @@ +# Disable formatting for Google Abseil library snapshot +DisableFormat: true +SortIncludes: false diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/README.md b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/README.md new file mode 100644 index 00000000..5dd66197 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/README.md @@ -0,0 +1,4 @@ +# Notes on Abseil Variant implementation + +This is a snapshot of Abseil Variant +`absl::OTABSL_OPTION_NAMESPACE_NAME::variant` from Abseil `v2020-03-03#8`. diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/attributes.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/attributes.h new file mode 100644 index 00000000..72901a84 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/attributes.h @@ -0,0 +1,621 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This header file defines macros for declaring attributes for functions, +// types, and variables. +// +// These macros are used within Abseil and allow the compiler to optimize, where +// applicable, certain function calls. +// +// This file is used for both C and C++! +// +// Most macros here are exposing GCC or Clang features, and are stubbed out for +// other compilers. +// +// GCC attributes documentation: +// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html +// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Variable-Attributes.html +// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Type-Attributes.html +// +// Most attributes in this file are already supported by GCC 4.7. However, some +// of them are not supported in older version of Clang. Thus, we check +// `__has_attribute()` first. If the check fails, we check if we are on GCC and +// assume the attribute exists on GCC (which is verified on GCC 4.7). +// +// ----------------------------------------------------------------------------- +// Sanitizer Attributes +// ----------------------------------------------------------------------------- +// +// Sanitizer-related attributes are not "defined" in this file (and indeed +// are not defined as such in any file). To utilize the following +// sanitizer-related attributes within your builds, define the following macros +// within your build using a `-D` flag, along with the given value for +// `-fsanitize`: +// +// * `ADDRESS_SANITIZER` + `-fsanitize=address` (Clang, GCC 4.8) +// * `MEMORY_SANITIZER` + `-fsanitize=memory` (Clang-only) +// * `THREAD_SANITIZER + `-fsanitize=thread` (Clang, GCC 4.8+) +// * `UNDEFINED_BEHAVIOR_SANITIZER` + `-fsanitize=undefined` (Clang, GCC 4.9+) +// * `CONTROL_FLOW_INTEGRITY` + -fsanitize=cfi (Clang-only) +// +// Example: +// +// // Enable branches in the Abseil code that are tagged for ASan: +// $ bazel build --copt=-DADDRESS_SANITIZER --copt=-fsanitize=address +// --linkopt=-fsanitize=address *target* +// +// Since these macro names are only supported by GCC and Clang, we only check +// for `__GNUC__` (GCC or Clang) and the above macros. +#ifndef OTABSL_BASE_ATTRIBUTES_H_ +#define OTABSL_BASE_ATTRIBUTES_H_ + +// OTABSL_HAVE_ATTRIBUTE +// +// A function-like feature checking macro that is a wrapper around +// `__has_attribute`, which is defined by GCC 5+ and Clang and evaluates to a +// nonzero constant integer if the attribute is supported or 0 if not. +// +// It evaluates to zero if `__has_attribute` is not defined by the compiler. +// +// GCC: https://gcc.gnu.org/gcc-5/changes.html +// Clang: https://clang.llvm.org/docs/LanguageExtensions.html +#ifdef __has_attribute +#define OTABSL_HAVE_ATTRIBUTE(x) __has_attribute(x) +#else +#define OTABSL_HAVE_ATTRIBUTE(x) 0 +#endif + +// OTABSL_HAVE_CPP_ATTRIBUTE +// +// A function-like feature checking macro that accepts C++11 style attributes. +// It's a wrapper around `__has_cpp_attribute`, defined by ISO C++ SD-6 +// (https://en.cppreference.com/w/cpp/experimental/feature_test). If we don't +// find `__has_cpp_attribute`, will evaluate to 0. +#if defined(__cplusplus) && defined(__has_cpp_attribute) +// NOTE: requiring __cplusplus above should not be necessary, but +// works around https://bugs.llvm.org/show_bug.cgi?id=23435. +#define OTABSL_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +#define OTABSL_HAVE_CPP_ATTRIBUTE(x) 0 +#endif + +// ----------------------------------------------------------------------------- +// Function Attributes +// ----------------------------------------------------------------------------- +// +// GCC: https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html +// Clang: https://clang.llvm.org/docs/AttributeReference.html + +// OTABSL_PRINTF_ATTRIBUTE +// OTABSL_SCANF_ATTRIBUTE +// +// Tells the compiler to perform `printf` format string checking if the +// compiler supports it; see the 'format' attribute in +// . +// +// Note: As the GCC manual states, "[s]ince non-static C++ methods +// have an implicit 'this' argument, the arguments of such methods +// should be counted from two, not one." +#if OTABSL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) \ + __attribute__((__format__(__printf__, string_index, first_to_check))) +#define OTABSL_SCANF_ATTRIBUTE(string_index, first_to_check) \ + __attribute__((__format__(__scanf__, string_index, first_to_check))) +#else +#define OTABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) +#define OTABSL_SCANF_ATTRIBUTE(string_index, first_to_check) +#endif + +// OTABSL_ATTRIBUTE_ALWAYS_INLINE +// OTABSL_ATTRIBUTE_NOINLINE +// +// Forces functions to either inline or not inline. Introduced in gcc 3.1. +#if OTABSL_HAVE_ATTRIBUTE(always_inline) || \ + (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline)) +#define OTABSL_HAVE_ATTRIBUTE_ALWAYS_INLINE 1 +#else +#define OTABSL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#if OTABSL_HAVE_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_NOINLINE __attribute__((noinline)) +#define OTABSL_HAVE_ATTRIBUTE_NOINLINE 1 +#else +#define OTABSL_ATTRIBUTE_NOINLINE +#endif + +// OTABSL_ATTRIBUTE_NO_TAIL_CALL +// +// Prevents the compiler from optimizing away stack frames for functions which +// end in a call to another function. +#if OTABSL_HAVE_ATTRIBUTE(disable_tail_calls) +#define OTABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1 +#define OTABSL_ATTRIBUTE_NO_TAIL_CALL __attribute__((disable_tail_calls)) +#elif defined(__GNUC__) && !defined(__clang__) +#define OTABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1 +#define OTABSL_ATTRIBUTE_NO_TAIL_CALL \ + __attribute__((optimize("no-optimize-sibling-calls"))) +#else +#define OTABSL_ATTRIBUTE_NO_TAIL_CALL +#define OTABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 0 +#endif + +// OTABSL_ATTRIBUTE_WEAK +// +// Tags a function as weak for the purposes of compilation and linking. +// Weak attributes currently do not work properly in LLVM's Windows backend, +// so disable them there. See https://bugs.llvm.org/show_bug.cgi?id=37598 +// for further information. +// The MinGW compiler doesn't complain about the weak attribute until the link +// step, presumably because Windows doesn't use ELF binaries. +#if (OTABSL_HAVE_ATTRIBUTE(weak) || \ + (defined(__GNUC__) && !defined(__clang__))) && \ + !(defined(__llvm__) && defined(_WIN32)) && !defined(__MINGW32__) +#undef OTABSL_ATTRIBUTE_WEAK +#define OTABSL_ATTRIBUTE_WEAK __attribute__((weak)) +#define OTABSL_HAVE_ATTRIBUTE_WEAK 1 +#else +#define OTABSL_ATTRIBUTE_WEAK +#define OTABSL_HAVE_ATTRIBUTE_WEAK 0 +#endif + +// OTABSL_ATTRIBUTE_NONNULL +// +// Tells the compiler either (a) that a particular function parameter +// should be a non-null pointer, or (b) that all pointer arguments should +// be non-null. +// +// Note: As the GCC manual states, "[s]ince non-static C++ methods +// have an implicit 'this' argument, the arguments of such methods +// should be counted from two, not one." +// +// Args are indexed starting at 1. +// +// For non-static class member functions, the implicit `this` argument +// is arg 1, and the first explicit argument is arg 2. For static class member +// functions, there is no implicit `this`, and the first explicit argument is +// arg 1. +// +// Example: +// +// /* arg_a cannot be null, but arg_b can */ +// void Function(void* arg_a, void* arg_b) OTABSL_ATTRIBUTE_NONNULL(1); +// +// class C { +// /* arg_a cannot be null, but arg_b can */ +// void Method(void* arg_a, void* arg_b) OTABSL_ATTRIBUTE_NONNULL(2); +// +// /* arg_a cannot be null, but arg_b can */ +// static void StaticMethod(void* arg_a, void* arg_b) +// OTABSL_ATTRIBUTE_NONNULL(1); +// }; +// +// If no arguments are provided, then all pointer arguments should be non-null. +// +// /* No pointer arguments may be null. */ +// void Function(void* arg_a, void* arg_b, int arg_c) OTABSL_ATTRIBUTE_NONNULL(); +// +// NOTE: The GCC nonnull attribute actually accepts a list of arguments, but +// OTABSL_ATTRIBUTE_NONNULL does not. +#if OTABSL_HAVE_ATTRIBUTE(nonnull) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_NONNULL(arg_index) __attribute__((nonnull(arg_index))) +#else +#define OTABSL_ATTRIBUTE_NONNULL(...) +#endif + +// OTABSL_ATTRIBUTE_NORETURN +// +// Tells the compiler that a given function never returns. +#if OTABSL_HAVE_ATTRIBUTE(noreturn) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define OTABSL_ATTRIBUTE_NORETURN __declspec(noreturn) +#else +#define OTABSL_ATTRIBUTE_NORETURN +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS +// +// Tells the AddressSanitizer (or other memory testing tools) to ignore a given +// function. Useful for cases when a function reads random locations on stack, +// calls _exit from a cloned subprocess, deliberately accesses buffer +// out of bounds or does other scary things with memory. +// NOTE: GCC supports AddressSanitizer(asan) since 4.8. +// https://gcc.gnu.org/gcc-4.8/changes.html +#if defined(__GNUC__) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_MEMORY +// +// Tells the MemorySanitizer to relax the handling of a given function. All +// "Use of uninitialized value" warnings from such functions will be suppressed, +// and all values loaded from memory will be considered fully initialized. +// This attribute is similar to the ADDRESS_SANITIZER attribute above, but deals +// with initialized-ness rather than addressability issues. +// NOTE: MemorySanitizer(msan) is supported by Clang but not GCC. +#if defined(__clang__) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_MEMORY +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_THREAD +// +// Tells the ThreadSanitizer to not instrument a given function. +// NOTE: GCC supports ThreadSanitizer(tsan) since 4.8. +// https://gcc.gnu.org/gcc-4.8/changes.html +#if defined(__GNUC__) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_THREAD +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED +// +// Tells the UndefinedSanitizer to ignore a given function. Useful for cases +// where certain behavior (eg. division by zero) is being used intentionally. +// NOTE: GCC supports UndefinedBehaviorSanitizer(ubsan) since 4.9. +// https://gcc.gnu.org/gcc-4.9/changes.html +#if defined(__GNUC__) && \ + (defined(UNDEFINED_BEHAVIOR_SANITIZER) || defined(ADDRESS_SANITIZER)) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \ + __attribute__((no_sanitize("undefined"))) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_CFI +// +// Tells the ControlFlowIntegrity sanitizer to not instrument a given function. +// See https://clang.llvm.org/docs/ControlFlowIntegrity.html for details. +#if defined(__GNUC__) && defined(CONTROL_FLOW_INTEGRITY) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_CFI __attribute__((no_sanitize("cfi"))) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_CFI +#endif + +// OTABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK +// +// Tells the SafeStack to not instrument a given function. +// See https://clang.llvm.org/docs/SafeStack.html for details. +#if defined(__GNUC__) && defined(SAFESTACK_SANITIZER) +#define OTABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK \ + __attribute__((no_sanitize("safe-stack"))) +#else +#define OTABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK +#endif + +// OTABSL_ATTRIBUTE_RETURNS_NONNULL +// +// Tells the compiler that a particular function never returns a null pointer. +#if OTABSL_HAVE_ATTRIBUTE(returns_nonnull) || \ + (defined(__GNUC__) && \ + (__GNUC__ > 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) && \ + !defined(__clang__)) +#define OTABSL_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull)) +#else +#define OTABSL_ATTRIBUTE_RETURNS_NONNULL +#endif + +// OTABSL_HAVE_ATTRIBUTE_SECTION +// +// Indicates whether labeled sections are supported. Weak symbol support is +// a prerequisite. Labeled sections are not supported on Darwin/iOS. +#ifdef OTABSL_HAVE_ATTRIBUTE_SECTION +#error OTABSL_HAVE_ATTRIBUTE_SECTION cannot be directly set +#elif (OTABSL_HAVE_ATTRIBUTE(section) || \ + (defined(__GNUC__) && !defined(__clang__))) && \ + !defined(__APPLE__) && OTABSL_HAVE_ATTRIBUTE_WEAK +#define OTABSL_HAVE_ATTRIBUTE_SECTION 1 + +// OTABSL_ATTRIBUTE_SECTION +// +// Tells the compiler/linker to put a given function into a section and define +// `__start_ ## name` and `__stop_ ## name` symbols to bracket the section. +// This functionality is supported by GNU linker. Any function annotated with +// `OTABSL_ATTRIBUTE_SECTION` must not be inlined, or it will be placed into +// whatever section its caller is placed into. +// +#ifndef OTABSL_ATTRIBUTE_SECTION +#define OTABSL_ATTRIBUTE_SECTION(name) \ + __attribute__((section(#name))) __attribute__((noinline)) +#endif + + +// OTABSL_ATTRIBUTE_SECTION_VARIABLE +// +// Tells the compiler/linker to put a given variable into a section and define +// `__start_ ## name` and `__stop_ ## name` symbols to bracket the section. +// This functionality is supported by GNU linker. +#ifndef OTABSL_ATTRIBUTE_SECTION_VARIABLE +#define OTABSL_ATTRIBUTE_SECTION_VARIABLE(name) __attribute__((section(#name))) +#endif + +// OTABSL_DECLARE_ATTRIBUTE_SECTION_VARS +// +// A weak section declaration to be used as a global declaration +// for OTABSL_ATTRIBUTE_SECTION_START|STOP(name) to compile and link +// even without functions with OTABSL_ATTRIBUTE_SECTION(name). +// OTABSL_DEFINE_ATTRIBUTE_SECTION should be in the exactly one file; it's +// a no-op on ELF but not on Mach-O. +// +#ifndef OTABSL_DECLARE_ATTRIBUTE_SECTION_VARS +#define OTABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) \ + extern char __start_##name[] OTABSL_ATTRIBUTE_WEAK; \ + extern char __stop_##name[] OTABSL_ATTRIBUTE_WEAK +#endif +#ifndef OTABSL_DEFINE_ATTRIBUTE_SECTION_VARS +#define OTABSL_INIT_ATTRIBUTE_SECTION_VARS(name) +#define OTABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name) +#endif + +// OTABSL_ATTRIBUTE_SECTION_START +// +// Returns `void*` pointers to start/end of a section of code with +// functions having OTABSL_ATTRIBUTE_SECTION(name). +// Returns 0 if no such functions exist. +// One must OTABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) for this to compile and +// link. +// +#define OTABSL_ATTRIBUTE_SECTION_START(name) \ + (reinterpret_cast(__start_##name)) +#define OTABSL_ATTRIBUTE_SECTION_STOP(name) \ + (reinterpret_cast(__stop_##name)) + +#else // !OTABSL_HAVE_ATTRIBUTE_SECTION + +#define OTABSL_HAVE_ATTRIBUTE_SECTION 0 + +// provide dummy definitions +#define OTABSL_ATTRIBUTE_SECTION(name) +#define OTABSL_ATTRIBUTE_SECTION_VARIABLE(name) +#define OTABSL_INIT_ATTRIBUTE_SECTION_VARS(name) +#define OTABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name) +#define OTABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) +#define OTABSL_ATTRIBUTE_SECTION_START(name) (reinterpret_cast(0)) +#define OTABSL_ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast(0)) + +#endif // OTABSL_ATTRIBUTE_SECTION + +// OTABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC +// +// Support for aligning the stack on 32-bit x86. +#if OTABSL_HAVE_ATTRIBUTE(force_align_arg_pointer) || \ + (defined(__GNUC__) && !defined(__clang__)) +#if defined(__i386__) +#define OTABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC \ + __attribute__((force_align_arg_pointer)) +#define OTABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) +#elif defined(__x86_64__) +#define OTABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (1) +#define OTABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC +#else // !__i386__ && !__x86_64 +#define OTABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) +#define OTABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC +#endif // __i386__ +#else +#define OTABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC +#define OTABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) +#endif + +// OTABSL_MUST_USE_RESULT +// +// Tells the compiler to warn about unused results. +// +// When annotating a function, it must appear as the first part of the +// declaration or definition. The compiler will warn if the return value from +// such a function is unused: +// +// OTABSL_MUST_USE_RESULT Sprocket* AllocateSprocket(); +// AllocateSprocket(); // Triggers a warning. +// +// When annotating a class, it is equivalent to annotating every function which +// returns an instance. +// +// class OTABSL_MUST_USE_RESULT Sprocket {}; +// Sprocket(); // Triggers a warning. +// +// Sprocket MakeSprocket(); +// MakeSprocket(); // Triggers a warning. +// +// Note that references and pointers are not instances: +// +// Sprocket* SprocketPointer(); +// SprocketPointer(); // Does *not* trigger a warning. +// +// OTABSL_MUST_USE_RESULT allows using cast-to-void to suppress the unused result +// warning. For that, warn_unused_result is used only for clang but not for gcc. +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425 +// +// Note: past advice was to place the macro after the argument list. +#if OTABSL_HAVE_ATTRIBUTE(nodiscard) +#define OTABSL_MUST_USE_RESULT [[nodiscard]] +#elif defined(__clang__) && OTABSL_HAVE_ATTRIBUTE(warn_unused_result) +#define OTABSL_MUST_USE_RESULT __attribute__((warn_unused_result)) +#else +#define OTABSL_MUST_USE_RESULT +#endif + +// OTABSL_ATTRIBUTE_HOT, OTABSL_ATTRIBUTE_COLD +// +// Tells GCC that a function is hot or cold. GCC can use this information to +// improve static analysis, i.e. a conditional branch to a cold function +// is likely to be not-taken. +// This annotation is used for function declarations. +// +// Example: +// +// int foo() OTABSL_ATTRIBUTE_HOT; +#if OTABSL_HAVE_ATTRIBUTE(hot) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_HOT __attribute__((hot)) +#else +#define OTABSL_ATTRIBUTE_HOT +#endif + +#if OTABSL_HAVE_ATTRIBUTE(cold) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_COLD __attribute__((cold)) +#else +#define OTABSL_ATTRIBUTE_COLD +#endif + +// OTABSL_XRAY_ALWAYS_INSTRUMENT, OTABSL_XRAY_NEVER_INSTRUMENT, OTABSL_XRAY_LOG_ARGS +// +// We define the OTABSL_XRAY_ALWAYS_INSTRUMENT and OTABSL_XRAY_NEVER_INSTRUMENT +// macro used as an attribute to mark functions that must always or never be +// instrumented by XRay. Currently, this is only supported in Clang/LLVM. +// +// For reference on the LLVM XRay instrumentation, see +// http://llvm.org/docs/XRay.html. +// +// A function with the XRAY_ALWAYS_INSTRUMENT macro attribute in its declaration +// will always get the XRay instrumentation sleds. These sleds may introduce +// some binary size and runtime overhead and must be used sparingly. +// +// These attributes only take effect when the following conditions are met: +// +// * The file/target is built in at least C++11 mode, with a Clang compiler +// that supports XRay attributes. +// * The file/target is built with the -fxray-instrument flag set for the +// Clang/LLVM compiler. +// * The function is defined in the translation unit (the compiler honors the +// attribute in either the definition or the declaration, and must match). +// +// There are cases when, even when building with XRay instrumentation, users +// might want to control specifically which functions are instrumented for a +// particular build using special-case lists provided to the compiler. These +// special case lists are provided to Clang via the +// -fxray-always-instrument=... and -fxray-never-instrument=... flags. The +// attributes in source take precedence over these special-case lists. +// +// To disable the XRay attributes at build-time, users may define +// OTABSL_NO_XRAY_ATTRIBUTES. Do NOT define OTABSL_NO_XRAY_ATTRIBUTES on specific +// packages/targets, as this may lead to conflicting definitions of functions at +// link-time. +// +#if OTABSL_HAVE_CPP_ATTRIBUTE(clang::xray_always_instrument) && \ + !defined(OTABSL_NO_XRAY_ATTRIBUTES) +#define OTABSL_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]] +#define OTABSL_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]] +#if OTABSL_HAVE_CPP_ATTRIBUTE(clang::xray_log_args) +#define OTABSL_XRAY_LOG_ARGS(N) \ + [[clang::xray_always_instrument, clang::xray_log_args(N)]] +#else +#define OTABSL_XRAY_LOG_ARGS(N) [[clang::xray_always_instrument]] +#endif +#else +#define OTABSL_XRAY_ALWAYS_INSTRUMENT +#define OTABSL_XRAY_NEVER_INSTRUMENT +#define OTABSL_XRAY_LOG_ARGS(N) +#endif + +// OTABSL_ATTRIBUTE_REINITIALIZES +// +// Indicates that a member function reinitializes the entire object to a known +// state, independent of the previous state of the object. +// +// The clang-tidy check bugprone-use-after-move allows member functions marked +// with this attribute to be called on objects that have been moved from; +// without the attribute, this would result in a use-after-move warning. +#if OTABSL_HAVE_CPP_ATTRIBUTE(clang::reinitializes) +#define OTABSL_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]] +#else +#define OTABSL_ATTRIBUTE_REINITIALIZES +#endif + +// ----------------------------------------------------------------------------- +// Variable Attributes +// ----------------------------------------------------------------------------- + +// OTABSL_ATTRIBUTE_UNUSED +// +// Prevents the compiler from complaining about variables that appear unused. +#if OTABSL_HAVE_ATTRIBUTE(unused) || (defined(__GNUC__) && !defined(__clang__)) +#undef OTABSL_ATTRIBUTE_UNUSED +#define OTABSL_ATTRIBUTE_UNUSED __attribute__((__unused__)) +#else +#define OTABSL_ATTRIBUTE_UNUSED +#endif + +// OTABSL_ATTRIBUTE_INITIAL_EXEC +// +// Tells the compiler to use "initial-exec" mode for a thread-local variable. +// See http://people.redhat.com/drepper/tls.pdf for the gory details. +#if OTABSL_HAVE_ATTRIBUTE(tls_model) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_INITIAL_EXEC __attribute__((tls_model("initial-exec"))) +#else +#define OTABSL_ATTRIBUTE_INITIAL_EXEC +#endif + +// OTABSL_ATTRIBUTE_PACKED +// +// Instructs the compiler not to use natural alignment for a tagged data +// structure, but instead to reduce its alignment to 1. This attribute can +// either be applied to members of a structure or to a structure in its +// entirety. Applying this attribute (judiciously) to a structure in its +// entirety to optimize the memory footprint of very commonly-used structs is +// fine. Do not apply this attribute to a structure in its entirety if the +// purpose is to control the offsets of the members in the structure. Instead, +// apply this attribute only to structure members that need it. +// +// When applying OTABSL_ATTRIBUTE_PACKED only to specific structure members the +// natural alignment of structure members not annotated is preserved. Aligned +// member accesses are faster than non-aligned member accesses even if the +// targeted microprocessor supports non-aligned accesses. +#if OTABSL_HAVE_ATTRIBUTE(packed) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_PACKED __attribute__((__packed__)) +#else +#define OTABSL_ATTRIBUTE_PACKED +#endif + +// OTABSL_ATTRIBUTE_FUNC_ALIGN +// +// Tells the compiler to align the function start at least to certain +// alignment boundary +#if OTABSL_HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_ATTRIBUTE_FUNC_ALIGN(bytes) __attribute__((aligned(bytes))) +#else +#define OTABSL_ATTRIBUTE_FUNC_ALIGN(bytes) +#endif + +// OTABSL_CONST_INIT +// +// A variable declaration annotated with the `OTABSL_CONST_INIT` attribute will +// not compile (on supported platforms) unless the variable has a constant +// initializer. This is useful for variables with static and thread storage +// duration, because it guarantees that they will not suffer from the so-called +// "static init order fiasco". Prefer to put this attribute on the most visible +// declaration of the variable, if there's more than one, because code that +// accesses the variable can then use the attribute for optimization. +// +// Example: +// +// class MyClass { +// public: +// OTABSL_CONST_INIT static MyType my_var; +// }; +// +// MyType MyClass::my_var = MakeMyType(...); +// +// Note that this attribute is redundant if the variable is declared constexpr. +#if OTABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization) +#define OTABSL_CONST_INIT [[clang::require_constant_initialization]] +#else +#define OTABSL_CONST_INIT +#endif // OTABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization) + +#endif // OTABSL_BASE_ATTRIBUTES_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/config.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/config.h new file mode 100644 index 00000000..e0836b9b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/config.h @@ -0,0 +1,671 @@ +// +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: config.h +// ----------------------------------------------------------------------------- +// +// This header file defines a set of macros for checking the presence of +// important compiler and platform features. Such macros can be used to +// produce portable code by parameterizing compilation based on the presence or +// lack of a given feature. +// +// We define a "feature" as some interface we wish to program to: for example, +// a library function or system call. A value of `1` indicates support for +// that feature; any other value indicates the feature support is undefined. +// +// Example: +// +// Suppose a programmer wants to write a program that uses the 'mmap()' system +// call. The Abseil macro for that feature (`OTABSL_HAVE_MMAP`) allows you to +// selectively include the `mmap.h` header and bracket code using that feature +// in the macro: +// +// #include "absl/base/config.h" +// +// #ifdef OTABSL_HAVE_MMAP +// #include "sys/mman.h" +// #endif //OTABSL_HAVE_MMAP +// +// ... +// #ifdef OTABSL_HAVE_MMAP +// void *ptr = mmap(...); +// ... +// #endif // OTABSL_HAVE_MMAP + +#ifndef OTABSL_BASE_CONFIG_H_ +#define OTABSL_BASE_CONFIG_H_ + +// Included for the __GLIBC__ macro (or similar macros on other systems). +#include + +#ifdef __cplusplus +// Included for __GLIBCXX__, _LIBCPP_VERSION +#include +#endif // __cplusplus + +#if defined(__APPLE__) +// Included for TARGET_OS_IPHONE, __IPHONE_OS_VERSION_MIN_REQUIRED, +// __IPHONE_8_0. +#include +#include +#endif + +#include "options.h" +#include "policy_checks.h" + +// Helper macro to convert a CPP variable to a string literal. +#define OTABSL_INTERNAL_DO_TOKEN_STR(x) #x +#define OTABSL_INTERNAL_TOKEN_STR(x) OTABSL_INTERNAL_DO_TOKEN_STR(x) + +// ----------------------------------------------------------------------------- +// Abseil namespace annotations +// ----------------------------------------------------------------------------- + +// OTABSL_NAMESPACE_BEGIN/OTABSL_NAMESPACE_END +// +// An annotation placed at the beginning/end of each `namespace absl` scope. +// This is used to inject an inline namespace. +// +// The proper way to write Abseil code in the `absl` namespace is: +// +// namespace absl { +// OTABSL_NAMESPACE_BEGIN +// +// void Foo(); // absl::OTABSL_OPTION_NAMESPACE_NAME::Foo(). +// +// OTABSL_NAMESPACE_END +// } // namespace absl +// +// Users of Abseil should not use these macros, because users of Abseil should +// not write `namespace absl {` in their own code for any reason. (Abseil does +// not support forward declarations of its own types, nor does it support +// user-provided specialization of Abseil templates. Code that violates these +// rules may be broken without warning.) +#if !defined(OTABSL_OPTION_NAMESPACE_NAME) +#error options.h is misconfigured. +#endif + +// Check that OTABSL_OPTION_NAMESPACE_NAME is neither "head" nor "" +#if defined(__cplusplus) + +#define OTABSL_INTERNAL_INLINE_NAMESPACE_STR \ + OTABSL_INTERNAL_TOKEN_STR(OTABSL_OPTION_NAMESPACE_NAME) + +static_assert(OTABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != '\0', + "options.h misconfigured: OTABSL_OPTION_NAMESPACE_NAME must " + "not be empty."); +static_assert(OTABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' || + OTABSL_INTERNAL_INLINE_NAMESPACE_STR[1] != 'e' || + OTABSL_INTERNAL_INLINE_NAMESPACE_STR[2] != 'a' || + OTABSL_INTERNAL_INLINE_NAMESPACE_STR[3] != 'd' || + OTABSL_INTERNAL_INLINE_NAMESPACE_STR[4] != '\0', + "options.h misconfigured: OTABSL_OPTION_NAMESPACE_NAME must " + "be changed to a new, unique identifier name."); + +#endif + + +#define OTABSL_NAMESPACE_BEGIN namespace OTABSL_OPTION_NAMESPACE_NAME { +#define OTABSL_NAMESPACE_END } + +// ----------------------------------------------------------------------------- +// Compiler Feature Checks +// ----------------------------------------------------------------------------- + +// OTABSL_HAVE_BUILTIN() +// +// Checks whether the compiler supports a Clang Feature Checking Macro, and if +// so, checks whether it supports the provided builtin function "x" where x +// is one of the functions noted in +// https://clang.llvm.org/docs/LanguageExtensions.html +// +// Note: Use this macro to avoid an extra level of #ifdef __has_builtin check. +// http://releases.llvm.org/3.3/tools/clang/docs/LanguageExtensions.html +#ifdef __has_builtin +#define OTABSL_HAVE_BUILTIN(x) __has_builtin(x) +#else +#define OTABSL_HAVE_BUILTIN(x) 0 +#endif + +#if defined(__is_identifier) +#define OTABSL_INTERNAL_HAS_KEYWORD(x) !(__is_identifier(x)) +#else +#define OTABSL_INTERNAL_HAS_KEYWORD(x) 0 +#endif + +// OTABSL_HAVE_TLS is defined to 1 when __thread should be supported. +// We assume __thread is supported on Linux when compiled with Clang or compiled +// against libstdc++ with _GLIBCXX_HAVE_TLS defined. +#ifdef OTABSL_HAVE_TLS +#error OTABSL_HAVE_TLS cannot be directly set +#elif defined(__linux__) && (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS)) +#define OTABSL_HAVE_TLS 1 +#endif + +// OTABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE +// +// Checks whether `std::is_trivially_destructible` is supported. +// +// Notes: All supported compilers using libc++ support this feature, as does +// gcc >= 4.8.1 using libstdc++, and Visual Studio. +#ifdef OTABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE +#error OTABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE cannot be directly set +#elif defined(_LIBCPP_VERSION) || \ + (defined(__clang__) && __clang_major__ >= 15) || \ + (!defined(__clang__) && defined(__GNUC__) && defined(__GLIBCXX__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) || \ + defined(_MSC_VER) +#define OTABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE 1 +#endif + +// OTABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE +// +// Checks whether `std::is_trivially_default_constructible` and +// `std::is_trivially_copy_constructible` are supported. + +// OTABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE +// +// Checks whether `std::is_trivially_copy_assignable` is supported. + +// Notes: Clang with libc++ supports these features, as does gcc >= 5.1 with +// either libc++ or libstdc++, and Visual Studio (but not NVCC). +#if defined(OTABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE) +#error OTABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE cannot be directly set +#elif defined(OTABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE) +#error OTABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE cannot directly set +#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) || \ + (defined(__clang__) && __clang_major__ >= 15) || \ + (!defined(__clang__) && defined(__GNUC__) && \ + (__GNUC__ > 7 || (__GNUC__ == 7 && __GNUC_MINOR__ >= 4)) && \ + (defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) || \ + (defined(_MSC_VER) && !defined(__NVCC__)) +#define OTABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE 1 +#define OTABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1 +#endif + +// OTABSL_HAVE_STD_IS_TRIVIALLY_COPYABLE +// +// Checks whether `std::is_trivially_copyable` is supported. +// +// Notes: Clang 15+ with libc++ supports these features, GCC hasn't been tested. +#if defined(OTABSL_HAVE_STD_IS_TRIVIALLY_COPYABLE) +#error OTABSL_HAVE_STD_IS_TRIVIALLY_COPYABLE cannot be directly set +#elif defined(__clang__) && (__clang_major__ >= 15) +#define OTABSL_HAVE_STD_IS_TRIVIALLY_COPYABLE 1 +#endif + +// OTABSL_HAVE_SOURCE_LOCATION_CURRENT +// +// Indicates whether `absl::OTABSL_OPTION_NAMESPACE_NAME::SourceLocation::current()` will return useful +// information in some contexts. +#ifndef OTABSL_HAVE_SOURCE_LOCATION_CURRENT +#if OTABSL_INTERNAL_HAS_KEYWORD(__builtin_LINE) && \ + OTABSL_INTERNAL_HAS_KEYWORD(__builtin_FILE) +#define OTABSL_HAVE_SOURCE_LOCATION_CURRENT 1 +#endif +#endif + +// OTABSL_HAVE_THREAD_LOCAL +// +// Checks whether C++11's `thread_local` storage duration specifier is +// supported. +#ifdef OTABSL_HAVE_THREAD_LOCAL +#error OTABSL_HAVE_THREAD_LOCAL cannot be directly set +#elif defined(__APPLE__) +// Notes: +// * Xcode's clang did not support `thread_local` until version 8, and +// even then not for all iOS < 9.0. +// * Xcode 9.3 started disallowing `thread_local` for 32-bit iOS simulator +// targeting iOS 9.x. +// * Xcode 10 moves the deployment target check for iOS < 9.0 to link time +// making __has_feature unreliable there. +// +// Otherwise, `__has_feature` is only supported by Clang so it has be inside +// `defined(__APPLE__)` check. +#if __has_feature(cxx_thread_local) && \ + !(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) +#define OTABSL_HAVE_THREAD_LOCAL 1 +#endif +#else // !defined(__APPLE__) +#define OTABSL_HAVE_THREAD_LOCAL 1 +#endif + +// There are platforms for which TLS should not be used even though the compiler +// makes it seem like it's supported (Android NDK < r12b for example). +// This is primarily because of linker problems and toolchain misconfiguration: +// Abseil does not intend to support this indefinitely. Currently, the newest +// toolchain that we intend to support that requires this behavior is the +// r11 NDK - allowing for a 5 year support window on that means this option +// is likely to be removed around June of 2021. +// TLS isn't supported until NDK r12b per +// https://developer.android.com/ndk/downloads/revision_history.html +// Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in +// . For NDK < r16, users should define these macros, +// e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11. +#if defined(__ANDROID__) && defined(__clang__) +#if __has_include() +#include +#endif // __has_include() +#if defined(__ANDROID__) && defined(__clang__) && defined(__NDK_MAJOR__) && \ + defined(__NDK_MINOR__) && \ + ((__NDK_MAJOR__ < 12) || ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1))) +#undef OTABSL_HAVE_TLS +#undef OTABSL_HAVE_THREAD_LOCAL +#endif +#endif // defined(__ANDROID__) && defined(__clang__) + +// Emscripten doesn't yet support `thread_local` or `__thread`. +// https://github.com/emscripten-core/emscripten/issues/3502 +#if defined(__EMSCRIPTEN__) +#undef OTABSL_HAVE_TLS +#undef OTABSL_HAVE_THREAD_LOCAL +#endif // defined(__EMSCRIPTEN__) + +// OTABSL_HAVE_INTRINSIC_INT128 +// +// Checks whether the __int128 compiler extension for a 128-bit integral type is +// supported. +// +// Note: __SIZEOF_INT128__ is defined by Clang and GCC when __int128 is +// supported, but we avoid using it in certain cases: +// * On Clang: +// * Building using Clang for Windows, where the Clang runtime library has +// 128-bit support only on LP64 architectures, but Windows is LLP64. +// * On Nvidia's nvcc: +// * nvcc also defines __GNUC__ and __SIZEOF_INT128__, but not all versions +// actually support __int128. +#ifdef OTABSL_HAVE_INTRINSIC_INT128 +#error OTABSL_HAVE_INTRINSIC_INT128 cannot be directly set +#elif defined(__SIZEOF_INT128__) +#if (defined(__clang__) && !defined(_WIN32)) || \ + (defined(__CUDACC__) && __CUDACC_VER_MAJOR__ >= 9) || \ + (defined(__GNUC__) && !defined(__clang__) && !defined(__CUDACC__)) +#define OTABSL_HAVE_INTRINSIC_INT128 1 +#elif defined(__CUDACC__) +// __CUDACC_VER__ is a full version number before CUDA 9, and is defined to a +// string explaining that it has been removed starting with CUDA 9. We use +// nested #ifs because there is no short-circuiting in the preprocessor. +// NOTE: `__CUDACC__` could be undefined while `__CUDACC_VER__` is defined. +#if __CUDACC_VER__ >= 70000 +#define OTABSL_HAVE_INTRINSIC_INT128 1 +#endif // __CUDACC_VER__ >= 70000 +#endif // defined(__CUDACC__) +#endif // OTABSL_HAVE_INTRINSIC_INT128 + +// OTABSL_HAVE_EXCEPTIONS +// +// Checks whether the compiler both supports and enables exceptions. Many +// compilers support a "no exceptions" mode that disables exceptions. +// +// Generally, when OTABSL_HAVE_EXCEPTIONS is not defined: +// +// * Code using `throw` and `try` may not compile. +// * The `noexcept` specifier will still compile and behave as normal. +// * The `noexcept` operator may still return `false`. +// +// For further details, consult the compiler's documentation. +#ifdef OTABSL_HAVE_EXCEPTIONS +#error OTABSL_HAVE_EXCEPTIONS cannot be directly set. + +#elif defined(__clang__) + +#if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6) +// Clang >= 3.6 +#if __has_feature(cxx_exceptions) +#define OTABSL_HAVE_EXCEPTIONS 1 +#endif // __has_feature(cxx_exceptions) +#else +// Clang < 3.6 +// http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro +#if defined(__EXCEPTIONS) && __has_feature(cxx_exceptions) +#define OTABSL_HAVE_EXCEPTIONS 1 +#endif // defined(__EXCEPTIONS) && __has_feature(cxx_exceptions) +#endif // __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6) + +// Handle remaining special cases and default to exceptions being supported. +#elif !(defined(__GNUC__) && (__GNUC__ < 5) && !defined(__EXCEPTIONS)) && \ + !(defined(__GNUC__) && (__GNUC__ >= 5) && !defined(__cpp_exceptions)) && \ + !(defined(_MSC_VER) && !defined(_CPPUNWIND)) +#define OTABSL_HAVE_EXCEPTIONS 1 +#endif + +// ----------------------------------------------------------------------------- +// Platform Feature Checks +// ----------------------------------------------------------------------------- + +// Currently supported operating systems and associated preprocessor +// symbols: +// +// Linux and Linux-derived __linux__ +// Android __ANDROID__ (implies __linux__) +// Linux (non-Android) __linux__ && !__ANDROID__ +// Darwin (macOS and iOS) __APPLE__ +// Akaros (http://akaros.org) __ros__ +// Windows _WIN32 +// NaCL __native_client__ +// AsmJS __asmjs__ +// WebAssembly __wasm__ +// Fuchsia __Fuchsia__ +// +// Note that since Android defines both __ANDROID__ and __linux__, one +// may probe for either Linux or Android by simply testing for __linux__. + +// OTABSL_HAVE_MMAP +// +// Checks whether the platform has an mmap(2) implementation as defined in +// POSIX.1-2001. +#ifdef OTABSL_HAVE_MMAP +#error OTABSL_HAVE_MMAP cannot be directly set +#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ + defined(__ros__) || defined(__native_client__) || defined(__asmjs__) || \ + defined(__wasm__) || defined(__Fuchsia__) || defined(__sun) || \ + defined(__ASYLO__) +#define OTABSL_HAVE_MMAP 1 +#endif + +// OTABSL_HAVE_PTHREAD_GETSCHEDPARAM +// +// Checks whether the platform implements the pthread_(get|set)schedparam(3) +// functions as defined in POSIX.1-2001. +#ifdef OTABSL_HAVE_PTHREAD_GETSCHEDPARAM +#error OTABSL_HAVE_PTHREAD_GETSCHEDPARAM cannot be directly set +#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ + defined(__ros__) +#define OTABSL_HAVE_PTHREAD_GETSCHEDPARAM 1 +#endif + +// OTABSL_HAVE_SCHED_YIELD +// +// Checks whether the platform implements sched_yield(2) as defined in +// POSIX.1-2001. +#ifdef OTABSL_HAVE_SCHED_YIELD +#error OTABSL_HAVE_SCHED_YIELD cannot be directly set +#elif defined(__linux__) || defined(__ros__) || defined(__native_client__) +#define OTABSL_HAVE_SCHED_YIELD 1 +#endif + +// OTABSL_HAVE_SEMAPHORE_H +// +// Checks whether the platform supports the header and sem_init(3) +// family of functions as standardized in POSIX.1-2001. +// +// Note: While Apple provides for both iOS and macOS, it is +// explicitly deprecated and will cause build failures if enabled for those +// platforms. We side-step the issue by not defining it here for Apple +// platforms. +#ifdef OTABSL_HAVE_SEMAPHORE_H +#error OTABSL_HAVE_SEMAPHORE_H cannot be directly set +#elif defined(__linux__) || defined(__ros__) +#define OTABSL_HAVE_SEMAPHORE_H 1 +#endif + +// OTABSL_HAVE_ALARM +// +// Checks whether the platform supports the header and alarm(2) +// function as standardized in POSIX.1-2001. +#ifdef OTABSL_HAVE_ALARM +#error OTABSL_HAVE_ALARM cannot be directly set +#elif defined(__GOOGLE_GRTE_VERSION__) +// feature tests for Google's GRTE +#define OTABSL_HAVE_ALARM 1 +#elif defined(__GLIBC__) +// feature test for glibc +#define OTABSL_HAVE_ALARM 1 +#elif defined(_MSC_VER) +// feature tests for Microsoft's library +#elif defined(__MINGW32__) +// mingw32 doesn't provide alarm(2): +// https://osdn.net/projects/mingw/scm/git/mingw-org-wsl/blobs/5.2-trunk/mingwrt/include/unistd.h +// mingw-w64 provides a no-op implementation: +// https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-crt/misc/alarm.c +#elif defined(__EMSCRIPTEN__) +// emscripten doesn't support signals +#elif defined(__Fuchsia__) +// Signals don't exist on fuchsia. +#elif defined(__native_client__) +#else +// other standard libraries +#define OTABSL_HAVE_ALARM 1 +#endif + +// OTABSL_IS_LITTLE_ENDIAN +// OTABSL_IS_BIG_ENDIAN +// +// Checks the endianness of the platform. +// +// Notes: uses the built in endian macros provided by GCC (since 4.6) and +// Clang (since 3.2); see +// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html. +// Otherwise, if _WIN32, assume little endian. Otherwise, bail with an error. +#if defined(OTABSL_IS_BIG_ENDIAN) +#error "OTABSL_IS_BIG_ENDIAN cannot be directly set." +#endif +#if defined(OTABSL_IS_LITTLE_ENDIAN) +#error "OTABSL_IS_LITTLE_ENDIAN cannot be directly set." +#endif + +#if (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define OTABSL_IS_LITTLE_ENDIAN 1 +#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \ + __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define OTABSL_IS_BIG_ENDIAN 1 +#elif defined(_WIN32) +#define OTABSL_IS_LITTLE_ENDIAN 1 +#else +#error "absl endian detection needs to be set up for your compiler" +#endif + +// macOS 10.13 and iOS 10.11 don't let you use , , or +// even though the headers exist and are publicly noted to work. See +// https://github.com/abseil/abseil-cpp/issues/207 and +// https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes +// libc++ spells out the availability requirements in the file +// llvm-project/libcxx/include/__config via the #define +// _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS. +#if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \ + ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \ + (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \ + (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 120000) || \ + (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 50000)) +#define OTABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 1 +#else +#define OTABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 0 +#endif + +// OTABSL_HAVE_STD_ANY +// +// Checks whether C++17 std::any is available by checking whether exists. +#ifdef OTABSL_HAVE_STD_ANY +#error "OTABSL_HAVE_STD_ANY cannot be directly set." +#endif + +#ifdef __has_include +#if __has_include() && __cplusplus >= 201703L && \ + !OTABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE +#define OTABSL_HAVE_STD_ANY 1 +#endif +#endif + +// OTABSL_HAVE_STD_OPTIONAL +// +// Checks whether C++17 std::optional is available. +#ifdef OTABSL_HAVE_STD_OPTIONAL +#error "OTABSL_HAVE_STD_OPTIONAL cannot be directly set." +#endif + +#ifdef __has_include +#if __has_include() && __cplusplus >= 201703L && \ + !OTABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE +#define OTABSL_HAVE_STD_OPTIONAL 1 +#endif +#endif + +// OTABSL_HAVE_STD_VARIANT +// +// Checks whether C++17 std::variant is available. +#ifdef OTABSL_HAVE_STD_VARIANT +#error "OTABSL_HAVE_STD_VARIANT cannot be directly set." +#endif + +#ifdef __has_include +#if __has_include() && __cplusplus >= 201703L && \ + !OTABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE +#define OTABSL_HAVE_STD_VARIANT 1 +#endif +#endif + +// OTABSL_HAVE_STD_STRING_VIEW +// +// Checks whether C++17 std::string_view is available. +#ifdef OTABSL_HAVE_STD_STRING_VIEW +#error "OTABSL_HAVE_STD_STRING_VIEW cannot be directly set." +#endif + +#ifdef __has_include +#if __has_include() && __cplusplus >= 201703L +#define OTABSL_HAVE_STD_STRING_VIEW 1 +#endif +#endif + +// For MSVC, `__has_include` is supported in VS 2017 15.3, which is later than +// the support for , , , . So we use +// _MSC_VER to check whether we have VS 2017 RTM (when , , +// , is implemented) or higher. Also, `__cplusplus` is +// not correctly set by MSVC, so we use `_MSVC_LANG` to check the language +// version. +// TODO(zhangxy): fix tests before enabling aliasing for `std::any`. +#if defined(_MSC_VER) && _MSC_VER >= 1910 && \ + ((defined(_MSVC_LANG) && _MSVC_LANG > 201402) || __cplusplus > 201402) +// #define OTABSL_HAVE_STD_ANY 1 +#define OTABSL_HAVE_STD_OPTIONAL 1 +#define OTABSL_HAVE_STD_VARIANT 1 +#define OTABSL_HAVE_STD_STRING_VIEW 1 +#endif + +// OTABSL_USES_STD_ANY +// +// Indicates whether absl::OTABSL_OPTION_NAMESPACE_NAME::any is an alias for std::any. +#if !defined(OTABSL_OPTION_USE_STD_ANY) +#error options.h is misconfigured. +#elif OTABSL_OPTION_USE_STD_ANY == 0 || \ + (OTABSL_OPTION_USE_STD_ANY == 2 && !defined(OTABSL_HAVE_STD_ANY)) +#undef OTABSL_USES_STD_ANY +#elif OTABSL_OPTION_USE_STD_ANY == 1 || \ + (OTABSL_OPTION_USE_STD_ANY == 2 && defined(OTABSL_HAVE_STD_ANY)) +#define OTABSL_USES_STD_ANY 1 +#else +#error options.h is misconfigured. +#endif + +// OTABSL_USES_STD_OPTIONAL +// +// Indicates whether absl::OTABSL_OPTION_NAMESPACE_NAME::optional is an alias for std::optional. +#if !defined(OTABSL_OPTION_USE_STD_OPTIONAL) +#error options.h is misconfigured. +#elif OTABSL_OPTION_USE_STD_OPTIONAL == 0 || \ + (OTABSL_OPTION_USE_STD_OPTIONAL == 2 && !defined(OTABSL_HAVE_STD_OPTIONAL)) +#undef OTABSL_USES_STD_OPTIONAL +#elif OTABSL_OPTION_USE_STD_OPTIONAL == 1 || \ + (OTABSL_OPTION_USE_STD_OPTIONAL == 2 && defined(OTABSL_HAVE_STD_OPTIONAL)) +#define OTABSL_USES_STD_OPTIONAL 1 +#else +#error options.h is misconfigured. +#endif + +// OTABSL_USES_STD_VARIANT +// +// Indicates whether absl::OTABSL_OPTION_NAMESPACE_NAME::variant is an alias for std::variant. +#if !defined(OTABSL_OPTION_USE_STD_VARIANT) +#error options.h is misconfigured. +#elif OTABSL_OPTION_USE_STD_VARIANT == 0 || \ + (OTABSL_OPTION_USE_STD_VARIANT == 2 && !defined(OTABSL_HAVE_STD_VARIANT)) +#undef OTABSL_USES_STD_VARIANT +#elif OTABSL_OPTION_USE_STD_VARIANT == 1 || \ + (OTABSL_OPTION_USE_STD_VARIANT == 2 && defined(OTABSL_HAVE_STD_VARIANT)) +#define OTABSL_USES_STD_VARIANT 1 +#else +#error options.h is misconfigured. +#endif + +// OTABSL_USES_STD_STRING_VIEW +// +// Indicates whether absl::OTABSL_OPTION_NAMESPACE_NAME::string_view is an alias for std::string_view. +#if !defined(OTABSL_OPTION_USE_STD_STRING_VIEW) +#error options.h is misconfigured. +#elif OTABSL_OPTION_USE_STD_STRING_VIEW == 0 || \ + (OTABSL_OPTION_USE_STD_STRING_VIEW == 2 && \ + !defined(OTABSL_HAVE_STD_STRING_VIEW)) +#undef OTABSL_USES_STD_STRING_VIEW +#elif OTABSL_OPTION_USE_STD_STRING_VIEW == 1 || \ + (OTABSL_OPTION_USE_STD_STRING_VIEW == 2 && \ + defined(OTABSL_HAVE_STD_STRING_VIEW)) +#define OTABSL_USES_STD_STRING_VIEW 1 +#else +#error options.h is misconfigured. +#endif + +// In debug mode, MSVC 2017's std::variant throws a EXCEPTION_ACCESS_VIOLATION +// SEH exception from emplace for variant when constructing the +// struct can throw. This defeats some of variant_test and +// variant_exception_safety_test. +#if defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_DEBUG) +#define OTABSL_INTERNAL_MSVC_2017_DBG_MODE +#endif + +// OTABSL_INTERNAL_MANGLED_NS +// OTABSL_INTERNAL_MANGLED_BACKREFERENCE +// +// Internal macros for building up mangled names in our internal fork of CCTZ. +// This implementation detail is only needed and provided for the MSVC build. +// +// These macros both expand to string literals. OTABSL_INTERNAL_MANGLED_NS is +// the mangled spelling of the `absl` namespace, and +// OTABSL_INTERNAL_MANGLED_BACKREFERENCE is a back-reference integer representing +// the proper count to skip past the CCTZ fork namespace names. (This number +// is one larger when there is an inline namespace name to skip.) +#if defined(_MSC_VER) +#define OTABSL_INTERNAL_MANGLED_NS \ + OTABSL_INTERNAL_TOKEN_STR(OTABSL_OPTION_NAMESPACE_NAME) "@absl" +#define OTABSL_INTERNAL_MANGLED_BACKREFERENCE "6" +#endif + +#undef OTABSL_INTERNAL_HAS_KEYWORD + +// OTABSL_DLL +// +// When building Abseil as a DLL, this macro expands to `__declspec(dllexport)` +// so we can annotate symbols appropriately as being exported. When used in +// headers consuming a DLL, this macro expands to `__declspec(dllimport)` so +// that consumers know the symbol is defined inside the DLL. In all other cases, +// the macro expands to nothing. +#if defined(_MSC_VER) +#if defined(OTABSL_BUILD_DLL) +#define OTABSL_DLL __declspec(dllexport) +#elif 1 +#define OTABSL_DLL __declspec(dllimport) +#else +#define OTABSL_DLL +#endif +#else +#define OTABSL_DLL +#endif // defined(_MSC_VER) + +#endif // OTABSL_BASE_CONFIG_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/identity.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/identity.h new file mode 100644 index 00000000..4afba317 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/identity.h @@ -0,0 +1,37 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef OTABSL_BASE_INTERNAL_IDENTITY_H_ +#define OTABSL_BASE_INTERNAL_IDENTITY_H_ + +#include "../config.h" + +namespace absl { +OTABSL_NAMESPACE_BEGIN +namespace internal { + +template +struct identity { + typedef T type; +}; + +template +using identity_t = typename identity::type; + +} // namespace internal +OTABSL_NAMESPACE_END +} // namespace absl + +#endif // OTABSL_BASE_INTERNAL_IDENTITY_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/inline_variable.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/inline_variable.h new file mode 100644 index 00000000..dd66e9f2 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/inline_variable.h @@ -0,0 +1,107 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef OTABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ +#define OTABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ + +#include + +#include "identity.h" + +// File: +// This file define a macro that allows the creation of or emulation of C++17 +// inline variables based on whether or not the feature is supported. + +//////////////////////////////////////////////////////////////////////////////// +// Macro: OTABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) +// +// Description: +// Expands to the equivalent of an inline constexpr instance of the specified +// `type` and `name`, initialized to the value `init`. If the compiler being +// used is detected as supporting actual inline variables as a language +// feature, then the macro expands to an actual inline variable definition. +// +// Requires: +// `type` is a type that is usable in an extern variable declaration. +// +// Requires: `name` is a valid identifier +// +// Requires: +// `init` is an expression that can be used in the following definition: +// constexpr type name = init; +// +// Usage: +// +// // Equivalent to: `inline constexpr size_t variant_npos = -1;` +// OTABSL_INTERNAL_INLINE_CONSTEXPR(size_t, variant_npos, -1); +// +// Differences in implementation: +// For a direct, language-level inline variable, decltype(name) will be the +// type that was specified along with const qualification, whereas for +// emulated inline variables, decltype(name) may be different (in practice +// it will likely be a reference type). +//////////////////////////////////////////////////////////////////////////////// + +#ifdef __cpp_inline_variables + +// Clang's -Wmissing-variable-declarations option erroneously warned that +// inline constexpr objects need to be pre-declared. This has now been fixed, +// but we will need to support this workaround for people building with older +// versions of clang. +// +// Bug: https://bugs.llvm.org/show_bug.cgi?id=35862 +// +// Note: +// identity_t is used here so that the const and name are in the +// appropriate place for pointer types, reference types, function pointer +// types, etc.. +#if defined(__clang__) +#define OTABSL_INTERNAL_EXTERN_DECL(type, name) \ + extern const ::absl::OTABSL_OPTION_NAMESPACE_NAME::internal::identity_t name; +#else // Otherwise, just define the macro to do nothing. +#define OTABSL_INTERNAL_EXTERN_DECL(type, name) +#endif // defined(__clang__) + +// See above comment at top of file for details. +#define OTABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) \ + OTABSL_INTERNAL_EXTERN_DECL(type, name) \ + inline constexpr ::absl::OTABSL_OPTION_NAMESPACE_NAME::internal::identity_t name = init + +#else + +// See above comment at top of file for details. +// +// Note: +// identity_t is used here so that the const and name are in the +// appropriate place for pointer types, reference types, function pointer +// types, etc.. +#define OTABSL_INTERNAL_INLINE_CONSTEXPR(var_type, name, init) \ + template \ + struct AbslInternalInlineVariableHolder##name { \ + static constexpr ::absl::OTABSL_OPTION_NAMESPACE_NAME::internal::identity_t kInstance = init; \ + }; \ + \ + template \ + constexpr ::absl::OTABSL_OPTION_NAMESPACE_NAME::internal::identity_t \ + AbslInternalInlineVariableHolder##name::kInstance; \ + \ + static constexpr const ::absl::OTABSL_OPTION_NAMESPACE_NAME::internal::identity_t& \ + name = /* NOLINT */ \ + AbslInternalInlineVariableHolder##name<>::kInstance; \ + static_assert(sizeof(void (*)(decltype(name))) != 0, \ + "Silence unused variable warnings.") + +#endif // __cpp_inline_variables + +#endif // OTABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/invoke.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/invoke.h new file mode 100644 index 00000000..c37f43cf --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/internal/invoke.h @@ -0,0 +1,188 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// absl::OTABSL_OPTION_NAMESPACE_NAME::base_internal::Invoke(f, args...) is an implementation of +// INVOKE(f, args...) from section [func.require] of the C++ standard. +// +// [func.require] +// Define INVOKE (f, t1, t2, ..., tN) as follows: +// 1. (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T +// and t1 is an object of type T or a reference to an object of type T or a +// reference to an object of a type derived from T; +// 2. ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a +// class T and t1 is not one of the types described in the previous item; +// 3. t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is +// an object of type T or a reference to an object of type T or a reference +// to an object of a type derived from T; +// 4. (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 +// is not one of the types described in the previous item; +// 5. f(t1, t2, ..., tN) in all other cases. +// +// The implementation is SFINAE-friendly: substitution failure within Invoke() +// isn't an error. + +#ifndef OTABSL_BASE_INTERNAL_INVOKE_H_ +#define OTABSL_BASE_INTERNAL_INVOKE_H_ + +#include +#include +#include + +#include "../../meta/type_traits.h" + +// The following code is internal implementation detail. See the comment at the +// top of this file for the API documentation. + +namespace absl { +OTABSL_NAMESPACE_BEGIN +namespace base_internal { + +// The five classes below each implement one of the clauses from the definition +// of INVOKE. The inner class template Accept checks whether the +// clause is applicable; static function template Invoke(f, args...) does the +// invocation. +// +// By separating the clause selection logic from invocation we make sure that +// Invoke() does exactly what the standard says. + +template +struct StrippedAccept { + template + struct Accept : Derived::template AcceptImpl::type>::type...> {}; +}; + +// (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T +// and t1 is an object of type T or a reference to an object of type T or a +// reference to an object of a type derived from T. +struct MemFunAndRef : StrippedAccept { + template + struct AcceptImpl : std::false_type {}; + + template + struct AcceptImpl + : std::integral_constant::value && + absl::OTABSL_OPTION_NAMESPACE_NAME::is_function::value> { + }; + + template + static decltype((std::declval().* + std::declval())(std::declval()...)) + Invoke(MemFun&& mem_fun, Obj&& obj, Args&&... args) { + return (std::forward(obj).* + std::forward(mem_fun))(std::forward(args)...); + } +}; + +// ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a +// class T and t1 is not one of the types described in the previous item. +struct MemFunAndPtr : StrippedAccept { + template + struct AcceptImpl : std::false_type {}; + + template + struct AcceptImpl + : std::integral_constant::value && + absl::OTABSL_OPTION_NAMESPACE_NAME::is_function::value> { + }; + + template + static decltype(((*std::declval()).* + std::declval())(std::declval()...)) + Invoke(MemFun&& mem_fun, Ptr&& ptr, Args&&... args) { + return ((*std::forward(ptr)).* + std::forward(mem_fun))(std::forward(args)...); + } +}; + +// t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is +// an object of type T or a reference to an object of type T or a reference +// to an object of a type derived from T. +struct DataMemAndRef : StrippedAccept { + template + struct AcceptImpl : std::false_type {}; + + template + struct AcceptImpl + : std::integral_constant::value && + !absl::OTABSL_OPTION_NAMESPACE_NAME::is_function::value> {}; + + template + static decltype(std::declval().*std::declval()) Invoke( + DataMem&& data_mem, Ref&& ref) { + return std::forward(ref).*std::forward(data_mem); + } +}; + +// (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 +// is not one of the types described in the previous item. +struct DataMemAndPtr : StrippedAccept { + template + struct AcceptImpl : std::false_type {}; + + template + struct AcceptImpl + : std::integral_constant::value && + !absl::OTABSL_OPTION_NAMESPACE_NAME::is_function::value> {}; + + template + static decltype((*std::declval()).*std::declval()) Invoke( + DataMem&& data_mem, Ptr&& ptr) { + return (*std::forward(ptr)).*std::forward(data_mem); + } +}; + +// f(t1, t2, ..., tN) in all other cases. +struct Callable { + // Callable doesn't have Accept because it's the last clause that gets picked + // when none of the previous clauses are applicable. + template + static decltype(std::declval()(std::declval()...)) Invoke( + F&& f, Args&&... args) { + return std::forward(f)(std::forward(args)...); + } +}; + +// Resolves to the first matching clause. +template +struct Invoker { + typedef typename std::conditional< + MemFunAndRef::Accept::value, MemFunAndRef, + typename std::conditional< + MemFunAndPtr::Accept::value, MemFunAndPtr, + typename std::conditional< + DataMemAndRef::Accept::value, DataMemAndRef, + typename std::conditional::value, + DataMemAndPtr, Callable>::type>::type>:: + type>::type type; +}; + +// The result type of Invoke. +template +using InvokeT = decltype(Invoker::type::Invoke( + std::declval(), std::declval()...)); + +// Invoke(f, args...) is an implementation of INVOKE(f, args...) from section +// [func.require] of the C++ standard. +template +InvokeT Invoke(F&& f, Args&&... args) { + return Invoker::type::Invoke(std::forward(f), + std::forward(args)...); +} + +} // namespace base_internal +OTABSL_NAMESPACE_END +} // namespace absl + +#endif // OTABSL_BASE_INTERNAL_INVOKE_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/macros.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/macros.h new file mode 100644 index 00000000..707c375e --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/macros.h @@ -0,0 +1,220 @@ +// +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: macros.h +// ----------------------------------------------------------------------------- +// +// This header file defines the set of language macros used within Abseil code. +// For the set of macros used to determine supported compilers and platforms, +// see absl/base/config.h instead. +// +// This code is compiled directly on many platforms, including client +// platforms like Windows, Mac, and embedded systems. Before making +// any changes here, make sure that you're not breaking any platforms. + +#ifndef OTABSL_BASE_MACROS_H_ +#define OTABSL_BASE_MACROS_H_ + +#include +#include + +#include "attributes.h" +#include "optimization.h" +#include "port.h" + +// OTABSL_ARRAYSIZE() +// +// Returns the number of elements in an array as a compile-time constant, which +// can be used in defining new arrays. If you use this macro on a pointer by +// mistake, you will get a compile-time error. +#define OTABSL_ARRAYSIZE(array) \ + (sizeof(::absl::OTABSL_OPTION_NAMESPACE_NAME::macros_internal::ArraySizeHelper(array))) + +namespace absl { +OTABSL_NAMESPACE_BEGIN +namespace macros_internal { +// Note: this internal template function declaration is used by OTABSL_ARRAYSIZE. +// The function doesn't need a definition, as we only use its type. +template +auto ArraySizeHelper(const T (&array)[N]) -> char (&)[N]; +} // namespace macros_internal +OTABSL_NAMESPACE_END +} // namespace absl + +// kLinkerInitialized +// +// An enum used only as a constructor argument to indicate that a variable has +// static storage duration, and that the constructor should do nothing to its +// state. Use of this macro indicates to the reader that it is legal to +// declare a static instance of the class, provided the constructor is given +// the absl::OTABSL_OPTION_NAMESPACE_NAME::base_internal::kLinkerInitialized argument. +// +// Normally, it is unsafe to declare a static variable that has a constructor or +// a destructor because invocation order is undefined. However, if the type can +// be zero-initialized (which the loader does for static variables) into a valid +// state and the type's destructor does not affect storage, then a constructor +// for static initialization can be declared. +// +// Example: +// // Declaration +// explicit MyClass(absl::OTABSL_OPTION_NAMESPACE_NAME::base_internal:LinkerInitialized x) {} +// +// // Invocation +// static MyClass my_global(absl::OTABSL_OPTION_NAMESPACE_NAME::base_internal::kLinkerInitialized); +namespace absl { +OTABSL_NAMESPACE_BEGIN +namespace base_internal { +enum LinkerInitialized { + kLinkerInitialized = 0, +}; +} // namespace base_internal +OTABSL_NAMESPACE_END +} // namespace absl + +// OTABSL_FALLTHROUGH_INTENDED +// +// Annotates implicit fall-through between switch labels, allowing a case to +// indicate intentional fallthrough and turn off warnings about any lack of a +// `break` statement. The OTABSL_FALLTHROUGH_INTENDED macro should be followed by +// a semicolon and can be used in most places where `break` can, provided that +// no statements exist between it and the next switch label. +// +// Example: +// +// switch (x) { +// case 40: +// case 41: +// if (truth_is_out_there) { +// ++x; +// OTABSL_FALLTHROUGH_INTENDED; // Use instead of/along with annotations +// // in comments +// } else { +// return x; +// } +// case 42: +// ... +// +// Notes: when compiled with clang in C++11 mode, the OTABSL_FALLTHROUGH_INTENDED +// macro is expanded to the [[clang::fallthrough]] attribute, which is analysed +// when performing switch labels fall-through diagnostic +// (`-Wimplicit-fallthrough`). See clang documentation on language extensions +// for details: +// https://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough +// +// When used with unsupported compilers, the OTABSL_FALLTHROUGH_INTENDED macro +// has no effect on diagnostics. In any case this macro has no effect on runtime +// behavior and performance of code. +#ifdef OTABSL_FALLTHROUGH_INTENDED +#error "OTABSL_FALLTHROUGH_INTENDED should not be defined." +#endif + +// TODO(zhangxy): Use c++17 standard [[fallthrough]] macro, when supported. +#if defined(__clang__) && defined(__has_warning) +#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") +#define OTABSL_FALLTHROUGH_INTENDED [[clang::fallthrough]] +#endif +#elif defined(__GNUC__) && __GNUC__ >= 7 +#define OTABSL_FALLTHROUGH_INTENDED [[gnu::fallthrough]] +#endif + +#ifndef OTABSL_FALLTHROUGH_INTENDED +#define OTABSL_FALLTHROUGH_INTENDED \ + do { \ + } while (0) +#endif + +// OTABSL_DEPRECATED() +// +// Marks a deprecated class, struct, enum, function, method and variable +// declarations. The macro argument is used as a custom diagnostic message (e.g. +// suggestion of a better alternative). +// +// Examples: +// +// class OTABSL_DEPRECATED("Use Bar instead") Foo {...}; +// +// OTABSL_DEPRECATED("Use Baz() instead") void Bar() {...} +// +// template +// OTABSL_DEPRECATED("Use DoThat() instead") +// void DoThis(); +// +// Every usage of a deprecated entity will trigger a warning when compiled with +// clang's `-Wdeprecated-declarations` option. This option is turned off by +// default, but the warnings will be reported by clang-tidy. +#if defined(__clang__) && __cplusplus >= 201103L +#define OTABSL_DEPRECATED(message) __attribute__((deprecated(message))) +#endif + +#ifndef OTABSL_DEPRECATED +#define OTABSL_DEPRECATED(message) +#endif + +// OTABSL_BAD_CALL_IF() +// +// Used on a function overload to trap bad calls: any call that matches the +// overload will cause a compile-time error. This macro uses a clang-specific +// "enable_if" attribute, as described at +// https://clang.llvm.org/docs/AttributeReference.html#enable-if +// +// Overloads which use this macro should be bracketed by +// `#ifdef OTABSL_BAD_CALL_IF`. +// +// Example: +// +// int isdigit(int c); +// #ifdef OTABSL_BAD_CALL_IF +// int isdigit(int c) +// OTABSL_BAD_CALL_IF(c <= -1 || c > 255, +// "'c' must have the value of an unsigned char or EOF"); +// #endif // OTABSL_BAD_CALL_IF +#if OTABSL_HAVE_ATTRIBUTE(enable_if) +#define OTABSL_BAD_CALL_IF(expr, msg) \ + __attribute__((enable_if(expr, "Bad call trap"), unavailable(msg))) +#endif + +// OTABSL_ASSERT() +// +// In C++11, `assert` can't be used portably within constexpr functions. +// OTABSL_ASSERT functions as a runtime assert but works in C++11 constexpr +// functions. Example: +// +// constexpr double Divide(double a, double b) { +// return OTABSL_ASSERT(b != 0), a / b; +// } +// +// This macro is inspired by +// https://akrzemi1.wordpress.com/2017/05/18/asserts-in-constexpr-functions/ +#if defined(NDEBUG) +#define OTABSL_ASSERT(expr) \ + (false ? static_cast(expr) : static_cast(0)) +#else +#define OTABSL_ASSERT(expr) \ + (OTABSL_PREDICT_TRUE((expr)) ? static_cast(0) \ + : [] { assert(false && #expr); }()) // NOLINT +#endif + +#ifdef OTABSL_HAVE_EXCEPTIONS +#define OTABSL_INTERNAL_TRY try +#define OTABSL_INTERNAL_CATCH_ANY catch (...) +#define OTABSL_INTERNAL_RETHROW do { throw; } while (false) +#else // OTABSL_HAVE_EXCEPTIONS +#define OTABSL_INTERNAL_TRY if (true) +#define OTABSL_INTERNAL_CATCH_ANY else if (false) +#define OTABSL_INTERNAL_RETHROW do {} while (false) +#endif // OTABSL_HAVE_EXCEPTIONS + +#endif // OTABSL_BASE_MACROS_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/optimization.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/optimization.h new file mode 100644 index 00000000..69713654 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/optimization.h @@ -0,0 +1,181 @@ +// +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: optimization.h +// ----------------------------------------------------------------------------- +// +// This header file defines portable macros for performance optimization. + +#ifndef OTABSL_BASE_OPTIMIZATION_H_ +#define OTABSL_BASE_OPTIMIZATION_H_ + +#include "config.h" + +// OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION +// +// Instructs the compiler to avoid optimizing tail-call recursion. Use of this +// macro is useful when you wish to preserve the existing function order within +// a stack trace for logging, debugging, or profiling purposes. +// +// Example: +// +// int f() { +// int result = g(); +// OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); +// return result; +// } +#if defined(__pnacl__) +#define OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; } +#elif defined(__clang__) +// Clang will not tail call given inline volatile assembly. +#define OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("") +#elif defined(__GNUC__) +// GCC will not tail call given inline volatile assembly. +#define OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("") +#elif defined(_MSC_VER) +#include +// The __nop() intrinsic blocks the optimisation. +#define OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __nop() +#else +#define OTABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; } +#endif + +// OTABSL_CACHELINE_SIZE +// +// Explicitly defines the size of the L1 cache for purposes of alignment. +// Setting the cacheline size allows you to specify that certain objects be +// aligned on a cacheline boundary with `OTABSL_CACHELINE_ALIGNED` declarations. +// (See below.) +// +// NOTE: this macro should be replaced with the following C++17 features, when +// those are generally available: +// +// * `std::hardware_constructive_interference_size` +// * `std::hardware_destructive_interference_size` +// +// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html +// for more information. +#if defined(__GNUC__) +// Cache line alignment +#if defined(__i386__) || defined(__x86_64__) +#define OTABSL_CACHELINE_SIZE 64 +#elif defined(__powerpc64__) +#define OTABSL_CACHELINE_SIZE 128 +#elif defined(__aarch64__) +// We would need to read special register ctr_el0 to find out L1 dcache size. +// This value is a good estimate based on a real aarch64 machine. +#define OTABSL_CACHELINE_SIZE 64 +#elif defined(__arm__) +// Cache line sizes for ARM: These values are not strictly correct since +// cache line sizes depend on implementations, not architectures. There +// are even implementations with cache line sizes configurable at boot +// time. +#if defined(__ARM_ARCH_5T__) +#define OTABSL_CACHELINE_SIZE 32 +#elif defined(__ARM_ARCH_7A__) +#define OTABSL_CACHELINE_SIZE 64 +#endif +#endif + +#ifndef OTABSL_CACHELINE_SIZE +// A reasonable default guess. Note that overestimates tend to waste more +// space, while underestimates tend to waste more time. +#define OTABSL_CACHELINE_SIZE 64 +#endif + +// OTABSL_CACHELINE_ALIGNED +// +// Indicates that the declared object be cache aligned using +// `OTABSL_CACHELINE_SIZE` (see above). Cacheline aligning objects allows you to +// load a set of related objects in the L1 cache for performance improvements. +// Cacheline aligning objects properly allows constructive memory sharing and +// prevents destructive (or "false") memory sharing. +// +// NOTE: this macro should be replaced with usage of `alignas()` using +// `std::hardware_constructive_interference_size` and/or +// `std::hardware_destructive_interference_size` when available within C++17. +// +// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html +// for more information. +// +// On some compilers, `OTABSL_CACHELINE_ALIGNED` expands to an `__attribute__` +// or `__declspec` attribute. For compilers where this is not known to work, +// the macro expands to nothing. +// +// No further guarantees are made here. The result of applying the macro +// to variables and types is always implementation-defined. +// +// WARNING: It is easy to use this attribute incorrectly, even to the point +// of causing bugs that are difficult to diagnose, crash, etc. It does not +// of itself guarantee that objects are aligned to a cache line. +// +// NOTE: Some compilers are picky about the locations of annotations such as +// this attribute, so prefer to put it at the beginning of your declaration. +// For example, +// +// OTABSL_CACHELINE_ALIGNED static Foo* foo = ... +// +// class OTABSL_CACHELINE_ALIGNED Bar { ... +// +// Recommendations: +// +// 1) Consult compiler documentation; this comment is not kept in sync as +// toolchains evolve. +// 2) Verify your use has the intended effect. This often requires inspecting +// the generated machine code. +// 3) Prefer applying this attribute to individual variables. Avoid +// applying it to types. This tends to localize the effect. +#define OTABSL_CACHELINE_ALIGNED __attribute__((aligned(OTABSL_CACHELINE_SIZE))) +#elif defined(_MSC_VER) +#define OTABSL_CACHELINE_SIZE 64 +#define OTABSL_CACHELINE_ALIGNED __declspec(align(OTABSL_CACHELINE_SIZE)) +#else +#define OTABSL_CACHELINE_SIZE 64 +#define OTABSL_CACHELINE_ALIGNED +#endif + +// OTABSL_PREDICT_TRUE, OTABSL_PREDICT_FALSE +// +// Enables the compiler to prioritize compilation using static analysis for +// likely paths within a boolean branch. +// +// Example: +// +// if (OTABSL_PREDICT_TRUE(expression)) { +// return result; // Faster if more likely +// } else { +// return 0; +// } +// +// Compilers can use the information that a certain branch is not likely to be +// taken (for instance, a CHECK failure) to optimize for the common case in +// the absence of better information (ie. compiling gcc with `-fprofile-arcs`). +// +// Recommendation: Modern CPUs dynamically predict branch execution paths, +// typically with accuracy greater than 97%. As a result, annotating every +// branch in a codebase is likely counterproductive; however, annotating +// specific branches that are both hot and consistently mispredicted is likely +// to yield performance improvements. +#if OTABSL_HAVE_BUILTIN(__builtin_expect) || \ + (defined(__GNUC__) && !defined(__clang__)) +#define OTABSL_PREDICT_FALSE(x) (__builtin_expect(x, 0)) +#define OTABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true)) +#else +#define OTABSL_PREDICT_FALSE(x) (x) +#define OTABSL_PREDICT_TRUE(x) (x) +#endif + +#endif // OTABSL_BASE_OPTIMIZATION_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/options.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/options.h new file mode 100644 index 00000000..c4b00a3d --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/options.h @@ -0,0 +1,216 @@ +#ifndef OTABSL_BASE_OPTIONS_H_ +#define OTABSL_BASE_OPTIONS_H_ + +// Copyright 2019 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: options.h +// ----------------------------------------------------------------------------- +// +// This file contains Abseil configuration options for setting specific +// implementations instead of letting Abseil determine which implementation to +// use at compile-time. Setting these options may be useful for package or build +// managers who wish to guarantee ABI stability within binary builds (which are +// otherwise difficult to enforce). +// +// *** IMPORTANT NOTICE FOR PACKAGE MANAGERS: It is important that +// maintainers of package managers who wish to package Abseil read and +// understand this file! *** +// +// Abseil contains a number of possible configuration endpoints, based on +// parameters such as the detected platform, language version, or command-line +// flags used to invoke the underlying binary. As is the case with all +// libraries, binaries which contain Abseil code must ensure that separate +// packages use the same compiled copy of Abseil to avoid a diamond dependency +// problem, which can occur if two packages built with different Abseil +// configuration settings are linked together. Diamond dependency problems in +// C++ may manifest as violations to the One Definition Rule (ODR) (resulting in +// linker errors), or undefined behavior (resulting in crashes). +// +// Diamond dependency problems can be avoided if all packages utilize the same +// exact version of Abseil. Building from source code with the same compilation +// parameters is the easiest way to avoid such dependency problems. However, for +// package managers who cannot control such compilation parameters, we are +// providing the file to allow you to inject ABI (Application Binary Interface) +// stability across builds. Settings options in this file will neither change +// API nor ABI, providing a stable copy of Abseil between packages. +// +// Care must be taken to keep options within these configurations isolated +// from any other dynamic settings, such as command-line flags which could alter +// these options. This file is provided specifically to help build and package +// managers provide a stable copy of Abseil within their libraries and binaries; +// other developers should not have need to alter the contents of this file. +// +// ----------------------------------------------------------------------------- +// Usage +// ----------------------------------------------------------------------------- +// +// For any particular package release, set the appropriate definitions within +// this file to whatever value makes the most sense for your package(s). Note +// that, by default, most of these options, at the moment, affect the +// implementation of types; future options may affect other implementation +// details. +// +// NOTE: the defaults within this file all assume that Abseil can select the +// proper Abseil implementation at compile-time, which will not be sufficient +// to guarantee ABI stability to package managers. + +// Include a standard library header to allow configuration based on the +// standard library in use. +// Using C++20 feature-test macros when possible, otherwise fall back to +// ciso646/iso646.h.There are warnings when including ciso646 in C++17 mode +#ifdef __has_include +# if __has_include() +# include +# endif +#elif defined(_MSC_VER) && \ + ((defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)) +# if _MSC_VER >= 1922 +# include +# endif +#else +# if defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wcpp" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wcpp" +# endif +# include +# if defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif +#endif + +// ----------------------------------------------------------------------------- +// Type Compatibility Options +// ----------------------------------------------------------------------------- +// +// OTABSL_OPTION_USE_STD_ANY +// +// This option controls whether absl::OTABSL_OPTION_NAMESPACE_NAME::any is implemented as an alias to +// std::any, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::any. This requires that all code +// using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::any is available. This option is +// useful when you are building your entire program, including all of its +// dependencies, from source. It should not be used otherwise -- for example, +// if you are distributing Abseil in a binary package manager -- since in +// mode 2, absl::OTABSL_OPTION_NAMESPACE_NAME::any will name a different type, with a different mangled name +// and binary layout, depending on the compiler flags passed by the end user. +// For more info, see https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::OTABSL_OPTION_NAMESPACE_NAME::any is a typedef of std::any, use the feature macro OTABSL_USES_STD_ANY. + +#define OTABSL_OPTION_USE_STD_ANY 0 + + +// OTABSL_OPTION_USE_STD_OPTIONAL +// +// This option controls whether absl::OTABSL_OPTION_NAMESPACE_NAME::optional is implemented as an alias to +// std::optional, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::optional. This requires that all +// code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::optional is available. This option +// is useful when you are building your program from source. It should not be +// used otherwise -- for example, if you are distributing Abseil in a binary +// package manager -- since in mode 2, absl::OTABSL_OPTION_NAMESPACE_NAME::optional will name a different +// type, with a different mangled name and binary layout, depending on the +// compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. + +// User code should not inspect this macro. To check in the preprocessor if +// absl::OTABSL_OPTION_NAMESPACE_NAME::optional is a typedef of std::optional, use the feature macro +// OTABSL_USES_STD_OPTIONAL. + +#define OTABSL_OPTION_USE_STD_OPTIONAL 0 + + +// OTABSL_OPTION_USE_STD_STRING_VIEW +// +// This option controls whether absl::OTABSL_OPTION_NAMESPACE_NAME::string_view is implemented as an alias to +// std::string_view, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::string_view. This requires that +// all code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::string_view is available. This +// option is useful when you are building your program from source. It should +// not be used otherwise -- for example, if you are distributing Abseil in a +// binary package manager -- since in mode 2, absl::OTABSL_OPTION_NAMESPACE_NAME::string_view will name a +// different type, with a different mangled name and binary layout, depending on +// the compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::OTABSL_OPTION_NAMESPACE_NAME::string_view is a typedef of std::string_view, use the feature macro +// OTABSL_USES_STD_STRING_VIEW. + +#define OTABSL_OPTION_USE_STD_STRING_VIEW 0 + +// OTABSL_OPTION_USE_STD_VARIANT +// +// This option controls whether absl::OTABSL_OPTION_NAMESPACE_NAME::variant is implemented as an alias to +// std::variant, or as an independent implementation. +// +// A value of 0 means to use Abseil's implementation. This requires only C++11 +// support, and is expected to work on every toolchain we support. +// +// A value of 1 means to use an alias to std::variant. This requires that all +// code using Abseil is built in C++17 mode or later. +// +// A value of 2 means to detect the C++ version being used to compile Abseil, +// and use an alias only if a working std::variant is available. This option +// is useful when you are building your program from source. It should not be +// used otherwise -- for example, if you are distributing Abseil in a binary +// package manager -- since in mode 2, absl::OTABSL_OPTION_NAMESPACE_NAME::variant will name a different +// type, with a different mangled name and binary layout, depending on the +// compiler flags passed by the end user. For more info, see +// https://abseil.io/about/design/dropin-types. +// +// User code should not inspect this macro. To check in the preprocessor if +// absl::OTABSL_OPTION_NAMESPACE_NAME::variant is a typedef of std::variant, use the feature macro +// OTABSL_USES_STD_VARIANT. + +#define OTABSL_OPTION_USE_STD_VARIANT 0 + + +// OTABSL_OPTION_NAMESPACE_NAME +// +// All codes in otabsl are under OTABSL_OPTION_NAMESPACE_NAME, we do not use inline namespace to avoid +// conlict with external Abseil. + +#define OTABSL_OPTION_NAMESPACE_NAME otel_v1 + +#endif // OTABSL_BASE_OPTIONS_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/policy_checks.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/policy_checks.h new file mode 100644 index 00000000..f86c264f --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/policy_checks.h @@ -0,0 +1,115 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: policy_checks.h +// ----------------------------------------------------------------------------- +// +// This header enforces a minimum set of policies at build time, such as the +// supported compiler and library versions. Unsupported configurations are +// reported with `#error`. This enforcement is best effort, so successfully +// compiling this header does not guarantee a supported configuration. + +#ifndef OTABSL_BASE_POLICY_CHECKS_H_ +#define OTABSL_BASE_POLICY_CHECKS_H_ + +// Included for the __GLIBC_PREREQ macro used below. +#include + +// Included for the _STLPORT_VERSION macro used below. +#if defined(__cplusplus) +#include +#endif + +// ----------------------------------------------------------------------------- +// Operating System Check +// ----------------------------------------------------------------------------- + +#if defined(__CYGWIN__) +#error "Cygwin is not supported." +#endif + +// ----------------------------------------------------------------------------- +// Compiler Check +// ----------------------------------------------------------------------------- + +#if 0 /* FIXME: MG */ +// We support MSVC++ 14.0 update 2 and later. +// This minimum will go up. +#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023918 && !defined(__clang__) +#error "This package requires Visual Studio 2015 Update 2 or higher." +#endif +#endif + +// We support gcc 4.7 and later. +// This minimum will go up. +#if defined(__GNUC__) && !defined(__clang__) +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) +#error "This package requires gcc 4.7 or higher." +#endif +#endif + +// We support Apple Xcode clang 4.2.1 (version 421.11.65) and later. +// This corresponds to Apple Xcode version 4.5. +// This minimum will go up. +#if defined(__apple_build_version__) && __apple_build_version__ < 4211165 +#error "This package requires __apple_build_version__ of 4211165 or higher." +#endif + +// ----------------------------------------------------------------------------- +// C++ Version Check +// ----------------------------------------------------------------------------- + +// Enforce C++11 as the minimum. +#if defined(_MSVC_LANG) +#if _MSVC_LANG < 201103L +#error "C++ versions less than C++11 are not supported." +#endif // _MSVC_LANG < 201103L +#elif defined(__cplusplus) +#if __cplusplus < 201103L +#error "C++ versions less than C++11 are not supported." +#endif // __cplusplus < 201103L +#endif + +// ----------------------------------------------------------------------------- +// Standard Library Check +// ----------------------------------------------------------------------------- + +#if defined(_STLPORT_VERSION) +#error "STLPort is not supported." +#endif + +// ----------------------------------------------------------------------------- +// `char` Size Check +// ----------------------------------------------------------------------------- + +// Abseil currently assumes CHAR_BIT == 8. If you would like to use Abseil on a +// platform where this is not the case, please provide us with the details about +// your platform so we can consider relaxing this requirement. +#if CHAR_BIT != 8 +#error "Abseil assumes CHAR_BIT == 8." +#endif + +// ----------------------------------------------------------------------------- +// `int` Size Check +// ----------------------------------------------------------------------------- + +// Abseil currently assumes that an int is 4 bytes. If you would like to use +// Abseil on a platform where this is not the case, please provide us with the +// details about your platform so we can consider relaxing this requirement. +#if INT_MAX < 2147483647 +#error "Abseil assumes that int is at least 4 bytes. " +#endif + +#endif // OTABSL_BASE_POLICY_CHECKS_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/port.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/port.h new file mode 100644 index 00000000..aaba551b --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/base/port.h @@ -0,0 +1,26 @@ +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This files is a forwarding header for other headers containing various +// portability macros and functions. +// This file is used for both C and C++! + +#ifndef OTABSL_BASE_PORT_H_ +#define OTABSL_BASE_PORT_H_ + +#include "attributes.h" +#include "config.h" +#include "optimization.h" + +#endif // OTABSL_BASE_PORT_H_ diff --git a/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/meta/type_traits.h b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/meta/type_traits.h new file mode 100644 index 00000000..dbd03488 --- /dev/null +++ b/zerotier-one/ext/opentelemetry-cpp-1.21.0/api/include/opentelemetry/nostd/internal/absl/meta/type_traits.h @@ -0,0 +1,779 @@ +// +// Copyright 2017 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// type_traits.h +// ----------------------------------------------------------------------------- +// +// This file contains C++11-compatible versions of standard API +// functions for determining the characteristics of types. Such traits can +// support type inference, classification, and transformation, as well as +// make it easier to write templates based on generic type behavior. +// +// See https://en.cppreference.com/w/cpp/header/type_traits +// +// WARNING: use of many of the constructs in this header will count as "complex +// template metaprogramming", so before proceeding, please carefully consider +// https://google.github.io/styleguide/cppguide.html#Template_metaprogramming +// +// WARNING: using template metaprogramming to detect or depend on API +// features is brittle and not guaranteed. Neither the standard library nor +// Abseil provides any guarantee that APIs are stable in the face of template +// metaprogramming. Use with caution. +#ifndef OTABSL_META_TYPE_TRAITS_H_ +#define OTABSL_META_TYPE_TRAITS_H_ + +#include +#include +#include + +#include "../base/config.h" + +// MSVC constructibility traits do not detect destructor properties and so our +// implementations should not use them as a source-of-truth. +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__GNUC__) +#define OTABSL_META_INTERNAL_STD_CONSTRUCTION_TRAITS_DONT_CHECK_DESTRUCTION 1 +#endif + +namespace absl { +OTABSL_NAMESPACE_BEGIN + +// Defined and documented later on in this file. +template +struct is_trivially_destructible; + +// Defined and documented later on in this file. +template +struct is_trivially_move_assignable; + +namespace type_traits_internal { + +// Silence MSVC warnings about the destructor being defined as deleted. +#if defined(_MSC_VER) && !defined(__GNUC__) +#pragma warning(push) +#pragma warning(disable : 4624) +#endif // defined(_MSC_VER) && !defined(__GNUC__) + +template +union SingleMemberUnion { + T t; +}; + +// Restore the state of the destructor warning that was silenced above. +#if defined(_MSC_VER) && !defined(__GNUC__) +#pragma warning(pop) +#endif // defined(_MSC_VER) && !defined(__GNUC__) + +template +struct IsTriviallyMoveConstructibleObject + : std::integral_constant< + bool, std::is_move_constructible< + type_traits_internal::SingleMemberUnion>::value && + absl::OTABSL_OPTION_NAMESPACE_NAME::is_trivially_destructible::value> {}; + +template +struct IsTriviallyCopyConstructibleObject + : std::integral_constant< + bool, std::is_copy_constructible< + type_traits_internal::SingleMemberUnion>::value && + absl::OTABSL_OPTION_NAMESPACE_NAME::is_trivially_destructible::value> {}; + +template +struct IsTriviallyMoveAssignableReference : std::false_type {}; + +template +struct IsTriviallyMoveAssignableReference + : absl::OTABSL_OPTION_NAMESPACE_NAME::is_trivially_move_assignable::type {}; + +template +struct IsTriviallyMoveAssignableReference + : absl::OTABSL_OPTION_NAMESPACE_NAME::is_trivially_move_assignable::type {}; + +template +struct VoidTImpl { + using type = void; +}; + +//////////////////////////////// +// Library Fundamentals V2 TS // +//////////////////////////////// + +// NOTE: The `is_detected` family of templates here differ from the library +// fundamentals specification in that for library fundamentals, `Op` is +// evaluated as soon as the type `is_detected` undergoes +// substitution, regardless of whether or not the `::value` is accessed. That +// is inconsistent with all other standard traits and prevents lazy evaluation +// in larger contexts (such as if the `is_detected` check is a trailing argument +// of a `conjunction`. This implementation opts to instead be lazy in the same +// way that the standard traits are (this "defect" of the detection idiom +// specifications has been reported). + +template class Op, class... Args> +struct is_detected_impl { + using type = std::false_type; +}; + +template

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%0Dg7;STBx$*+{+#U0)GRKs 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
j-cRb6oG3>X_?T?s(Yoj3eD~$nkqegWrWV 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